一文入门 Kubernetes

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 的小伙伴快速入门。