Kubernetes(通常缩写为K8S)是容器编排平台。
Kubernetes提供了支持复杂容器应用程序所需的一切。对于开发人员和运营人员来说,这是最便捷,最受欢迎的框架,几乎所有组织的DevOps团队都广泛使用它。
Kubernetes对计算机集群而言,就像操作系统对计算机而言。
为了方便管理和服务发现,Kubernetes将组成一个应用程序的容器分组为逻辑单元。这对于微服务应用程序特别有用。
尽管Kubernetes在Linux上运行,但它与平台无关,可以在裸机,虚拟机,云实例或OpenStack上运行。最新版本的Kubernetes已经支持在Windows上运行。
Kubernetes集群中的计算机或节点分为控制平面和工作负载平面。
Kubernetes 集群架构
Kubernetes集群由分为两组的节点组成:
- 一组master节点,它们承载着控制平面组件,它们是系统的大脑,因为它们控制着整个集群。
- 一组构成工作负载平面的工作节点,工作负载(或应用程序)在此运行。
这两个平面共同组成了Kubernetes集群。
Kubernetes Master 节点
这是Kubernetes控制面板或控制平面。这里做出有关集群的决策,例如调度和检测/响应集群事件。master服务器的组件可以在集群中的任何节点上运行。以下是每个关键组件的细分:
- API Server
- 集群数据存储 (etcd)
- Controller Manager
- Scheduler
- Dashboard (可选)
让我们逐一讨论这些组件。
API Server
这是Kubernetes控制面板中唯一用户可访问的API的组件,并且是你将与之交互的唯一主组件。 API Server公开了一个restful的Kubernetes API,并使用了JSON清单文件。
Kubernetes API Server公开了RESTful Kubernetes API。使用集群和其他Kubernetes组件的工程师通过此API创建对象。
集群数据存储
Kubernetes使用ETCD作为数据存储。这是一个一致性且高可用的键值存储,用于持久存储所有API对象。
由于API Server本身是无状态的,因此etcd分布式数据存储将持久保存通过API创建的对象。API Server 是与etcd通信的唯一组件。
Controller Manager
kube-controller manager,它运行所有处理集群中任务的控制器。这些包括节点控制器,副本控制器,端点控制器以及服务帐户和secret控制器。这些控制器中的每一个都单独工作以维持所需状态。
控制器使你通过API创建的对象按照想要的状态运行。它们中的大多数仅创建其他对象,但是有些还与外部系统通信(例如,通过其API的云提供商)。
Scheduler
调度程序监视新创建的Pod(一个或多个容器的组),并将其分配给节点。
调度程序决定每个应用程序实例应在哪个工作程序节点上运行。
master节点和工作节点的组件之间就是这样进行交互的。
Kubernetes 工作节点
master节点处理和管理集群,而工作节点运行容器并提供Kubernetes运行时环境。
主要组件有:
- Kubelet
- Container runtime
- Kube-proxy
让我们逐一讨论这些组件。
Kubelet
工作节点包含一个kubelet。这是主要的节点代理。它监视API服务器以查找已分配给其节点的Pod。 Kubelet执行任务并维护向主节点报告pod状态的反向通道。
Kubelet是与API Server进行对话并管理在其节点上运行的应用程序的代理。它通过API报告这些应用程序和节点的状态。
Container Runtime
每个pod内都有容器,kubelet通过Docker运行这些容器(拉取镜像,启动和停止容器等)。它还定期执行任何请求的容器活动性探测。它支持Docker和CRI-O等。
容器运行时,可以是Docker或与Kubernetes兼容的任何其他运行时。它按照Kubelet的指令在容器中运行你的应用程序。
Kube-proxy
这是节点的网络大脑,负责维护主机上的网络规则并执行连接转发。它还负责服务中所有Pod的负载平衡。
Kubernetes服务代理(Kube-proxy)对应用程序之间的网络流量进行负载平衡。
附加组件
大多数Kubernetes集群还包含其他几个组件。这包括DNS服务器,网络插件,日志记录代理等。
它们通常在工作节点上运行,但也可以配置为在master节点上运行。
Kubernetes 实战
将应用程序部署到Kubernetes中的步骤。
在部署应用程序时,将发生以下操作:
- 你将应用程序清单提交给Kubernetes API。 API Server将清单中定义的对象写入etcd。
- 控制器会注意到新创建的对象,并创建几个新对象。
- 调度程序将Pod分配给每个工作节点。
- Kubelet注意到已分配给自己的Pod。它通过Container Runtime运行应用程序实例。
- Kube-proxy会注意到,应用程序实例已准备就绪,可以接受来自客户端的连接并为其配置负载均衡器。
- Kubelet和控制器监视系统并保持应用程序运行。
Kubernetes 是 容器编排事实上的标准,当然在实际使用过程中,需要了解更多的知识点,本文希望可以帮助还没有接触过Kubernetes的小伙伴快速入门。
PS: 本文属于翻译,原文
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。