加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮安站长网 (https://www.0517zz.cn/)- 运营、云管理、经验、智能边缘、云硬盘!
当前位置: 首页 > 云计算 > 正文

开发也需清楚的运维知识之Kubernetes

发布时间:2021-06-07 09:49:19 所属栏目:云计算 来源:互联网
导读:Docker与Kubernetes是什么关系?这可能是我们刚接触Kubernetes时都有的一个疑问。那么Kubernetes是什么? Kubernetes是一个容器集群编排管理系统,用于实现容器集群的自动化部署、自动扩缩容等功能。Docker提供用于运行应用程序的容器技术,而Kubernetes本身并
Docker与Kubernetes是什么关系?这可能是我们刚接触Kubernetes时都有的一个疑问。那么Kubernetes是什么?
Kubernetes是一个容器集群编排管理系统,用于实现容器集群的自动化部署、自动扩缩容等功能。Docker提供用于运行应用程序的容器技术,而Kubernetes本身并不提供用于运行应用程序的容器,而是负责管理容器。
了解Docker与Kubernetes的关系之后,就能理解为什么我们要先学习Docker再学习Kubernetes,这与先学习Spring框架才能更好地学习Spring Boot、Spring Cloud是一样的。如果还不了解Docker可以先看下上一篇《开发也需了解的运维知识之Docker》。
作为开发,我们为什么要了解容器技术,这不是运维该学习的吗?作为开发者,只有足够了解容器技术,才能做好技术选型,以及开发部署在Kubernetes容器服务之上的应用应该要注意哪些问题。如果运维不了解代码,开发也不了解Kubernetes,谁能解决将服务迁移到Kubernetes上遇到的各种问题呢?
关于Kubernetes
学习Kubernetes首先要了解Kubernetes的架构,了解一些“概念”,再了解配置文件。配置文件这块对初学者来说是最难理解的,因此推荐大家阅读《Kubernetes in Action中文版》这本书,跟着例子一步步掌握一些配置文件中每种kind的作用,每个配置项的作用是什么。
Kubernetes管理所有可用的物理机,以阿里云容器服务Kubernetes为例,Kubernetes负责管理一堆ECS实例,这需要我们在创建Kubernetes集群时,购买足够的ECS实例,至少两台。后续也可将新购买的ECS实例加到Kubernetes集群,由Kubernetes管理。
开发者和运维都不需要知道一个应用程序部署在哪个ECS实例上,只需要指定运行应用程序所需要的cpu、内存等资源,Kubernetes会根据要求计算出满足条件的节点(ECS),并在节点(ECS)上从镜像仓库拉取应用程序的镜像创建容器并运行容器,并且监控容器的整个生命周期。我们可以把Kubernetes管理的所有节点(ECS)看成一个大的物理机,这台大的物理机的cpu、内存是所有节点(ECS)的总和。
 
(图片来之《Kubernetes in Action》)
如上图所示,开发者只需要将应用构造成镜像,并将镜像push到远程镜像仓库,然后编写一个配置文件,在配置文件中描述应用程序镜像运行所需要的资源、镜像从哪拉取等,使用kubectl调用Kubernetes提供的API就能将应用程序部署到Kubernetes。
Kubernetes由两种类型的节点组成。
 
(图片来自《Kubernetes in Action》)
一种是主节点Master,负责控制和管理整个集群,为实现高可用,主节点也要求部署集群。主节点上会部署一些组件,这些组件可以运行在单个主节点上,或者通过副本分别部署在多个主节点上,实现高可用。如基于Reft协议实现的数据强一致性存储服务etcd、提供给我们使用的Kubernetes API服务、调度应用部署的Scheculer组件、执行集群功能的Controller Manager组件。这些组件我们可以先这么简单了解,暂时不用过于深究。
另一种是工作节点,运行用户实际部署的应用。
假设我们在阿里云购买了托管的Kubernetes服务,那么主节点就由阿里云托管,而工作节点就是我们购买的ECS实例,一个集群中有多少个ECS实例就是有多少个工作节点。
工作节点就是运行容器的机器,除了运行用于运行我们部署的应用程序的容器外,每个工作节点上还会运行一些组件,这些组件负责运行、监控和管理应用服务。如Docker、Kubelet、Kube-proxy。Docker我们已经很熟悉了;Kubelet负责与主节点的Kubernetes API服务通信,并管理它所在的工作节点的容器;Kube-proxy负责组件之间的负载均衡网络流量。
 
上图是根据到目前为止我们对Kubernetes的了解所画出的一个应用部署流程图。
1、开发者在本地机器构建应用程序镜像;
2、开发者将本地应用程序镜像psuh到镜像仓库;
3、开发者为运行应用程序编写描述文件(yaml配置文件);
4、开发者使用kubectl调用Kubernetes API将应用程序描述文件提交给Kubernetes;
5、Scheduler组件根据描述文件调度工作节点部署应用程序;
6、在工作节点上由Container runtime负责从镜像仓库拉取镜像、创建容器并运行容器;
在实际项目部署时,我们可能最关系也最难理解就是网络和容器这部分内容。比如,在不使用Kubernetes时,我们部署一个需要SSD资源的应用程序时,先购买SSD挂载在该服务器上,而使用Kubernetes时,我们要告诉Kubernetes只在具有SSD的节点中选择节点部署应用。网络和容器卷的内容还是很多很复杂的,本篇就不过多介绍,后续文章中再介绍,当然也只是简单的理解和怎么去用,因为笔者目前理解的也不多。

(编辑:淮安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读