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: 本文属于翻译,原文