全视角了解基于容器的编排工具Kubernetes


Kubernetes在希腊语中是“船长”或者“水手”的意思,Kubernetes诞生于谷歌,2014年开源给了CNCF。它由Go语言开发,目标是建造一个运行大量容器生产环境的强大平台。Kubernetes库可以在Github中找到。

什么是Kubernetes

Kubernetes是支持Docker容器的开源编排系统,用户可以用来管理集群化容器应用。简化例如部署、扩展、配置、版本管理和滚动升级等DevOps任务。大量考虑扩展性分布式应用都由运行于容器中的微服务构成。

容器提供一种将应用/微服务运行环境隔离的机制。但是容器仍然需要管理,以便实现调度,分配资源和负载均衡等功能。因此,数据一致性和网络配置复杂性对管理集群化容器环境提出了很大挑战。

Kubernetes在基础架构之上提供了一层解决方案。Kubernetes使用标签来标识对象,可以基于标识进行查询。标签是开放结构,可以用来指代角色,名称和其它重要属性。
1.png

Kubernetes Master

Kubernetes集群中控制服务被称为Master,或者控制面板(control panel),负责集群管理和监控、更改、作业调度和时间回复。
2.png

Kubernetes Master由运行在集群单一节点上的四个进程构成,这节点被称为Master节点。

Kube-apiserver

Master的大脑和Master的前端或者控制面板。Kube-apiserver实现RESTful API,通过manifest文件转化为json文件。Manifest文件生声明应用状态,例如意向记录,验证并在集群内部署。Master对外暴露默认端口443,kubectl(命令行)可以通过此端口向Master发送命令和查询。

Cluster Store

Cluster Store通过etcd提供一致性存储和状态,是分布式、一致性,可观察的模块。etcd是一个开源分布式kay-value数据库,提供后台集群一致性和状态管理的分布式系统。Kubernetes使用etcd作为集群中的“可信源”,存储和复制Kubernetes使用的集群间数据。

Cluster Store也是用Go语言开发的,并使用Raft协议,帮助etcd从硬件失效和网络分区问题中恢复正常。

Kube-controller-manager

Kubernetes controller manager是Kubernetes中最核心模块,是Kubernetes控制器的控制器。通过API服务器监控集群状态,并控制集群状态转化。随Kubernetes带来的控制器包括replication controller、endpoints controller、namespace controller和service account controller。当变化发生时,controller读取新状态并完成实现新状态的步骤。这些步骤可能包括扩展或者缩减应用规模和服务点等等。replication controller提供复制pod所需的pod模板,以及扩展或者缩减pod的逻辑,也可用于串行部署。

Kube-scheduler

此模块负责监控新Pod并将负载分布到集群特定节点的操作。确保负载被正确调度到每个节点,并不会超出可用资源范围。

Kubernetes Node

做具体工作的服务器被称为nodes。
3.png

每个集群中node都运行两个进程:

Kubelet

  • node上主要Kubernetes代理进程
  • 向集群注册node
  • 与API服务器分配作业
  • 定义做作业pod实例
  • 向master汇报
  • 通过暴露端口10255,监控kubelet状态。


Kube-proxy

类似于节点的大脑,反映了每个节点网络服务。确保每个Pod或者自己的IP。如果一个Pod中有多个容器,他们会共享一个IP,并在一个服务中所有Pod之间负载均衡。

Kubernetes Objects

Pod

Pod是Kubernetes的基础构成,是在集群节点上部署的最基本单元。Pod提供容器之间隔离。一般来说每个Pod中只运行一个容器,但有时候容器之间是紧耦合的,需要在一个Pod中运行两个容器。Pod之间通过网络接力实现与环境的互联。每个Pod拥有唯一IP地址,Pod内容器共享网络空间,包括IP地址和网络端口。

Service

Kubernetes Pods一旦挂掉就无法复活。Kubernetes不得不维护应用状态,当Pod出现问题,新Pod会被加入,但会有不同IP地址。这样就要求Pod发现功能,由Service来提供。

Service在网络地址后隐藏了大量Pods,pods可以不断更替但是服务IP地址和端口不变。其他应用可以通过Kubernetes Service发现功能找到应用服务。

Kubernetes Service具有如下特点:
  • 持久性
  • 可发现
  • 负载均衡
  • 提供虚拟IP层
  • 通过标签选择定位Pod


卷(Volume)

卷是容器存放信息的场所。容器在盘(on-disk)文件是临时的,一旦容器挂掉信息就丢失。第二,在同一个Pod内运行容器之间共享信息很困难。Kubernetes卷会在Pod内容器之间提供数据共享,即使容器重启数据仍然在线。对应用来说,卷以本地文件系统方式存在,可以用本地磁盘,EBS等方式实现。

命名空间(Namespace)

命名空间提供Kubernetes内部分组机制。Services、Pods、Replication controllers以及卷都可以运行在命名空间中。提供集群间某种程度的隔离。适用于多个团队之间共享项目,提供了在不同用户之间共享资源的一种方式。

总结

Kubernetes是微服务集群和编排有力工具,尽管还处于相对初期阶段,但是相信会带来集群架构管理方面的大量有用功能。

如果想基于Kubernetes部署容器化应用,可以从Minikube开始。Minikube是本地部署Kubernetes的一个工具。

原文链接:A Complete Introduction to Kubernetes — an Orchestration Tool for Containers(翻译:杨峰)

0 个评论

要回复文章请先登录注册