k8s 之 Deployment

(1)Deployment 作用是确保 Pod 副本数量,能够保证 Pod 数量与期望值一样,会有自恢复功能。简洁地说:具有 水平扩展 / 收缩 功能。

可能好奇的是在 kubernetes 中是谁在执行这些控制器的,它就是 kube-controller-manager 组件。实际上,这个组件,就是一系列控制器的集合。

go 复制代码
for {
实际状态 := 获取集群中对象 X 的实际状态
期望状态 := 获取集群中对象 X 的期望状态
if 实际状态 == 期望状态{
	什么都不做 
} else {
	执行编排动作,将实际状态调整为期望状态 
 }
}

接下来,以 Deployment 为例,简单描述一下它对控制器模型的实现:

  • Deployment 控制器从 Etcd 中获取到所有携带了"app: nginx"标签的 Pod,然后统计它们 的数量,这就是实际状态;
  • Deployment 对象的 Replicas 字段的值就是期望状态;
  • Deployment 控制器将两个状态做比较,然后根据比较结果,确定是创建 Pod,还是删除已有 的 Pod(具体如何操作 Pod 对象,我会在下一篇文章详细介绍)
    这个操作,通常被叫作调谐(Reconcile)。这个调谐的过程,则被称作"Reconcile Loop"(调 谐循环)或者"Sync Loop"(同步循环)。

Deployment 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期 望状态),加上下半部分的被控制对象的模板组成的。

这就是为什么,在所有 API 对象的 Metadata 里,都有一个字段叫作 ownerReference,用于保存 当前这个 API 对象的拥有者(Owner)的信息

如何理解水平扩展 / 收缩?

举个例子,如果你更新了 Deployment 的 Pod 模板(比如,修改了容器的镜像),那么 Deployment 就需要遵循一种叫作"滚动更新"(rolling update)的方式,来升级现有的容器。而这个能力的实现,依赖的是 Kubernetes 项目中的一个非常重要的概念(API 对象): ReplicaSet。

对于一个 Deployment 所管理的 Pod,它的 ownerReference 是谁?

答案:ReplicaSet

具体的实现上,这个 Deployment,与 ReplicaSet,以及 Pod 的关系是怎样的呢?

把这个值从 3 改成 4,那么 Deployment 所对应的 ReplicaSet,就会根据修改后的值自 动创建一个新的 Pod。这就是"水平扩展"了;"水平收缩"则反之。

复制代码
kubectl scale deployment nginx-deployment --replicas=4

"滚动更新"又是什么意思,是如何实现的呢?

相关推荐
YC运维2 小时前
Dockerfile实战案例详解
运维·docker·容器
分布式存储与RustFS3 小时前
告别手动配置:用 Terraform 定义你的 RustFS 存储帝国
云原生·wpf·文件系统·terraform·对象存储·minio·rustfs
悠闲蜗牛�7 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
荣光波比12 小时前
K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与操作全解析
云原生·容器·kubernetes
伞啊伞12 小时前
K8s概念基础(一)
云原生·容器·kubernetes
Light6012 小时前
领码方案|微服务与SOA的世纪对话(6):组织跃迁——智能架构下的团队与文化变革
微服务·云原生·ddd边界·组织双生体·pod协同·文化仪式·ai自演进
hello_25013 小时前
k8s基础监控promql
云原生·容器·kubernetes
静谧之心15 小时前
在 K8s 上可靠运行 PD 分离推理:RBG 的设计与实现
云原生·容器·golang·kubernetes·开源·pd分离
Serverless 社区15 小时前
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
人工智能·阿里云·云原生·serverless·云计算
小马爱打代码16 小时前
zookeeper:一致性原理和算法
分布式·zookeeper·云原生