CI/CD系列 | 初探Kubernetes

1,050 阅读6分钟

本系列将会从宏观角度,讲述CI/CD相关知识。系列文章不求把每一项都讲仔细,而是让大家能对CI/CD整体流程有大致的概念。无论你是前端,后端,或是运维团队,只要是CI/CD链路上的一份子,相信这系列文章对你都会有帮助。 阅读更多专栏文章

文本涉及的 CI/CD 环节: 持续部署(Continuous Deployment)

容器化技术的不足

以目前的趋势来看,容器化部署只会越来越普及,大部分的小公司也纷纷开始采用容器化部署的方案。在之前的文章中,我们提到了 Docker 的出现把容器化技术带到了大家的眼前,但这只是为服务部署提供多了一种选择。真正让容器化部署如此迅速发展的,是编排工具的成熟。

容器化技术硬件共享、应用快速启停的特性,确实给服务部署带来了很多新的想象空间。但是并没有解决大部分常见的部署问题,如集群管理,流量控制,容错调度等。

想要用在容器化技术的基础上完善这些问题 ,我们需要一个工具,来帮助我们控制,以及监控各个容器的状态。而这种工具,就是容器编排工具

什么是Kubernetes

Kubernetes 是目前业内最常用的容器编排工具。由于这个名字太长,大家常把k与s之间的8个英文字母省略,简称为 K8S

K8S 的功能十分强大,基本上可以满足服务部署的各种需求。

服务发现和负载均衡

使用 DNS 名称或自己的 IP 地址来曝露容器。 如果进入容器的流量很大, 可以负载均衡并分配网络流量,从而使部署稳定。

存储编排

可以自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

自动部署和回滚

你可以指定已部署容器的所需状态,K8S会用受控的速率将实际状态更改为你的期望状态。 例如,可以自动化为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

自动完成装箱计算

你可以为 K8S 提供许多节点组成的集群,在这个集群上运行容器化的任务。 同时,你可以告诉 K8S 每个容器需要多少 CPU 和内存 (RAM)。 K8S 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

自我修复

K8S 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

密钥与配置管理

K8S 允许存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

它是怎么做的?

K8S中定义了两大类型组件:控制平面组件(Control Plane Components)以及 Node 组件

其中,控制平面组件主要功能是会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件。而Node组件则负责维护运行的应用容器并提供 K8S 运行环境。

总的来说:

  1. K8S 提供一系列组件,如 Pod,Node 等为运行的应用组成一个个的集群。目的是增加部署应用的可用性。
  2. 只有一个运行环境是不够的,K8S 通过控制平面组件来管理这些集群。 你可以把控制平面组件看作是一个传统意义的运维人员,他会在帮助我们处理各种紧急事件,如服务重启。以及根据我们事情安排好的规则,来管理集群。

你需要知道的基本概念

现在我们来进一步了解 K8S 中的最常见的基本概念。

Pods

  • Pods 是 K8S 中对容器做了处理的抽象层,是容器运行的地方,同时也是 K8S 中最小的单位
  • 每个 Pod 都有自己的独立的 IP 地址,需要注意的是这个 IP 并不是固定的,每次 Pod 重启后,IP 都会被修改
  • 一个pod中可以运行多个应用,他们之间可以相互网络访问和共享数据(volume)

Nodes

  • Node 是某个vm或者物理机,是为运用应用提供资源的环境
  • Pod 运行在 Node 中
  • Node 中有一个叫 Kubelet(Node 组件之一) ****的工具,可以通过它确保与 Pod 以及 控制面板的联系
  • 因为是运行容器的环境,Node 中还会有如 containerd or Docker 等工具

Cluster

集群(Cluster)是多个node组成的总和,其中控制面板(Control plane)作为控制中心,控制各个 Node 的执行模式。

注意,一个集群至少要由3个 Node 组成。

集群中的每个 Node 通过 Kubernetes Api(控制平面组件) 与控制平面沟通与交互。

Deployment

  • Deployment 它存在于控制面板(Control Plane)中,是其中的一个功能模块
  • 每个 Deployment 必须对应一个配置文件,这个文件会描述集群中的 Pods 的实际活动模式

Services

前面说到了 Pods 是实际运行容器的地方,但 Pods 本身的 IP 却不是固定的。这就导致了一个问题,当目标 Pod 的 IP 被修改后,客户端就会不能用原来的 URL 找到服务了。这显然是不对的,而 Services 就是用来处理这个问题的。

Services是一种抽象的服务暴露手段。通过由它提供的访问地址,客户端可以持续访问到集群中具体容器服务,而不用关心集群中 Pods 的网络关系。

总结

今天,我们了解一系列关于 Kubernets 的起步知识。包括它诞生的目的,它的功能有哪些,以及它的设计概念。

通过了解上方讲述的概念,相信你已经对 K8S 的部署架构有一定了解了。

总的来说:

  1. K8S 中应该是一个个的集群(Cluster)
  2. 集群中有个一个控制面板(Control Plane)
  3. 控制面板中有个两个常见的模块:Deployment (负责描述集群内 Pod 的调度规则)和 Services(负责对外暴露服务的访问地址)
  4. 集群的下一级是 Node ,它是为运行容器提供硬件资源的环境。
  5. Pods 是 K8S 中的最小单位,它运行在 Node 下,同时是运行容器的环境。

在下篇文章中,我们将一起实际操作,尝试真正地运用 Kubernets 部署服务。

进一步阅读

Kubernetes 官方文档:kubernetes.io/docs/home/

如果你觉得本文对你有一点帮助,麻烦给我点个赞吧~~ 谢谢