Kubernetes 核心概念
推荐阅读:
在本文中,我们将介绍基本的Kubernetes概念。Kubernetes的术语很多,可能会令人生畏。
我将帮助您建立一个思维模型,以加快对技术的了解。
首先,我们将研究6层抽象及其组成的各个部分。然后,我们将看看其他7个关键的 K8s API对象。
一、K8s 的 6 层抽象
1)Deployment
2)ReplicaSet
3)Pod
4)Node Cluster
5)Node Processes
6)Docker Container
Deployment 创建和管理 ReplicaSet。
ReplicaSet 创建和管理 Pod。
Pod 运行于 Node 中,一个 Node 中通常会运行多个 Pod。
Node 中有 Container 运行时环境,并运行放置在 Docker 镜像中的应用程序。
蓝色部分是高层次的 K8s 抽象,绿色部分描述的是 Node 以及其中的 Node 子进程。
Deployment
如果你想创建一直运行的无状态应用,例如 HTTP server,就需要 Deployment。
Deployment 允许您无缝升级运行中的应用。
Deployment 中指定了 Pod 死掉后重启的策略。
可以通过命令行创建 Deployment,也可以通过配置文件。
ReplicaSet 复制集
Deployment 会创建一个 ReplicaSet,ReplicaSet 会确保你的 APP 具有指定数量的 Pod。
ReplicaSet 根据 Deployment 中设定的指标来创建和扩展 Pod。
Pod
Pod 是 K8s 中的基本构建单元。
一个 Pod 中可以包含多个 Container,但通常是包含一个。
Pod 负责处理容器的数据卷、密钥、配置。
Pod 的生命周期是不确定的,可能非常短暂,但 Pod 具有很强的再生能力,在死后可以自动重新启动。
当 ReplicaSet 对 APP 进行水平扩展的时候,就会复制 Pod,每个 Pod 运行相同的容器代码。
Pod 生存在 Worker Node 上。
Node Cluster
K8s 群集由 Master Node(主节点) 和 Worker Node(工作节点) 组成。
下图是集群结构描述图,一个 Worker Node 中可以运行多个 Pod,Master 负责管理这些 Worker Node。
(1) Worker Node 工作节点
Worker Node 以后简称为 Node
一个 Node 表示一台机器,可以是物理机器,也可以是虚拟机。
Node 可以理解为一个 Server 服务器。
N 个 Pod 跑在一个 Node 上。
一个 Pod 就是一个最小单元,其中的内容绝对不会被分割在2个Node上,一个 Pod 中的内容始终作为一个整体。
谁告诉 Node 做什么呢?Master。
(2) Master Node 主节点
Master 有很多种叫法,例如 Master Node, Kubernetes Master, Cluster Control Plane, Control Plane。
当看到这些名字时别晕,知道是 Master 就好。
不管叫啥,他的作用就是指挥 Worker Node。
Master 负责做调度决策、响应事件、实现变更、监控集群。
Node Processes
Master 和 Worker Node 中都有子进程组件。
(1) Master 组件
-
API server:K8s 的 API 接口。
-
etcd:分布式 key-value 存储,保存集群的状态数据。
-
scheduler:为新的 Pod 选择合适的 Node。
-
kube-controller-manager:集群的控制器,处理集群的后台任务。
-
cloud-controller-manager:与云环境提供商交互的接口。
(2) Worker Node 组件
- kubelet:负责管理 Node 上的一切事物,与 Master 的 API server 沟通,可以说是 Worker Node 的大脑。
- kube-proxy:把连接路由到正确的 Pod,负责负载均衡的工作,就像一个交通警察。
- Container Runtime:下载镜像、运行容器,例如,Docker 就是一个 Container Runtime,所以为了方便记忆,我们可以把 Container Runtime 理解为就是 Docker。
Docker Container
如果要与K8s一起运行,则应用程序必须放在某种容器中。
Docker是最常见的容器平台。我们假设您正在使用它。
在创建 Deployment 时,你会指定 Pod 应该使用哪个 Docker 镜像。
K8s 不会直接创建容器,而是创建包含容器的 Pod。
Pod 中的容器共享一切已经配置好的资源,例如数据卷存储。
二、K8s 中的 7 个重要对象
这些对象负责管理和运行用于创建和运行容器的 Pod。
ReplicaSet, StatefulSet, DaemonSet
ReplicaSet 创建和管理 Pod。
如果一个 Pod 因为 Node 故障而关闭,ReplicaSet 会自动在其他 Node 中启动这个 Pod。
ReplicaSet 由 Deployment 创建,这样就可以通过 Deployment 非常方便的升级你的应用。
如果你的应用是有状态信息的,例如超级玛丽游戏,需要保存用户的状态:在哪一层、在哪个位置、有多少金币 ……
StatefulSet 就是帮助我们跟踪应用状态的。
StatefulSet 状态集
和 ReplicaSet 一样,StatefulSet 根据规范管理一组 Pod 的部署和缩放。
StatefulSet 的 Pod 都有一个唯一的、持久的标识,控制器在进行任何重新调度时都会维护该标识。
StatefulSet 对于数据库等有状态的持久化后端服务非常有用。
Pod 中的状态信息就是保存在与 StatefulSet 关联的数据卷中。
DaemonSet
DaemonSet 用于持续的进程,每当一个 Node 加入到集群中时,DaemonSet 都会在其中自动启动一个 Pod。
DaemonSet 适用于一直运行的后台任务,例如监控、日志收集。
StatefulSet 和 DaemonSet 虽然与 ReplicaSet 在一个层级中,但他们是不受 Deployment 控制的。
Job
Job 负责监督管理那些运行批处理作业的 Pod。
Job 会创建 Pod,并通过跟踪 Pod 成功完成的数量来确保他们完成任务。
与 ReplicaSet 不同,一旦容器内部的作业成功完成,容器就不会重新启动。
当你想要一次性的做一个任务的时候,可以使用 Job。
CronJob
如果要在指定的时间(例如每小时,每天或每月)运行作业,请创建 CronJob。
CronJob 与 Job 类似,但是 CronJob 计划以固定的时间间隔或固定的时间重复执行。
Service 服务
Service 为一组 Pod 创建单个访问点。
Service 提供一致的 IP 地址和端口,以访问其中的 Pod。
外部用户和内部 Pod 都使用服务与其他 Pod 通信。
Volume 数据卷
Volume 是一个可以保存数据的目录。
Volume 是一个 Pod 的组件,在 Pod 中创建,不能单独删除。
Pod 中的容器都可以访问 Volume,只要这些容器都挂载了这 Volume 即可。
Volume 的生命周期是独立于容器的,与 Pod 相关,Pod 挂掉后 Volume 也就消亡了。
翻译整理自:
https://towardsdatascience.com/key-kubernetes-concepts-62939f4bc08e1