在K8S中,deployment的创建过程包括什么?

简介: 在K8S中,deployment的创建过程包括什么?

在Kubernetes(K8S)中,Deployment的创建过程是一个涉及多个组件和步骤的复杂流程。以下是一个详细的步骤说明,包括从创建Deployment配置文件到Pod在集群中实际运行的整个过程:

1. 创建Deployment配置文件

首先,需要准备一个YAML格式的配置文件,用于定义Deployment的属性。这个配置文件包含了Deployment的元数据(如名称、命名空间)、规格说明(如副本数量、Pod模板、容器配置等)。以下是一个简单的示例配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
2. 提交Deployment配置文件到APIServer

使用kubectl命令行工具将配置文件提交到Kubernetes集群的APIServer。这个过程中,APIServer会进行认证鉴权、校验等操作,确保请求的有效性。

kubectl apply -f my-deployment.yaml
3. APIServer处理请求并存储到Etcd

一旦APIServer验证了请求的有效性,它会将Deployment的信息存储到集群的分布式键值存储系统Etcd中。Etcd是Kubernetes用于持久化存储集群状态数据的组件。

4. Controller Manager监听并处理资源变化

Controller Manager是Kubernetes的控制中心,它监听Etcd中的资源变化事件。当新的Deployment被创建时,Deployment Controller会检测到这个事件,并开始处理它。

5. 创建ReplicaSet

Deployment Controller会根据Deployment配置文件中的规格说明,创建一个或多个ReplicaSet对象。ReplicaSet负责确保Pod的副本数量符合期望的状态。

6. ReplicaSet创建Pod

ReplicaSet Controller监听ReplicaSet的创建事件,并根据ReplicaSet的规格说明(通过Pod模板)创建相应数量的Pod。Pod是Kubernetes中可以创建和管理的最小计算单元,包含了容器和容器的配置信息。

7. Scheduler为Pod分配节点

Kube-Scheduler是Kubernetes的调度器,它监听新创建的Pod事件,并根据调度策略(如节点亲和性、污点、容忍、硬件资源等)为Pod选择一个合适的节点。调度完成后,Kube-Scheduler会将Pod与节点的绑定信息写回Etcd。

8. Kubelet在节点上运行Pod

节点上的Kubelet进程监听Etcd中的Pod变化事件。当发现有新的Pod被调度到本节点时,Kubelet会调用容器运行时(如Docker、containerd等)来创建和启动容器。同时,Kubelet还负责Pod的生命周期管理,包括健康检查、日志收集等。

9. Pod和Service网络通信

Kube-Proxy是运行在集群各个节点上的网络代理,它负责实现服务发现和负载均衡。当有外部请求访问服务时,Kube-Proxy会根据服务的Endpoints信息将请求转发到正确的Pod或容器上。

10. 总结

综上所述,Deployment的创建过程是一个高度自动化的流程,涉及多个Kubernetes组件的协同工作。从创建Deployment配置文件到Pod在集群中实际运行,整个流程遵循关注点分离的原则,确保每个组件都能专注于自己的工作。这种设计使得Kubernetes能够高效地管理大规模容器化应用的部署和运维。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
110 4
|
7月前
|
Kubernetes 安全 Ubuntu
k8s学习-CKS真题-Dockerfile和deployment优化
k8s学习-CKS真题-Dockerfile和deployment优化
137 0
|
1月前
|
Kubernetes 应用服务中间件 nginx
【赵渝强老师】K8s中的Deployment控制器
Kubernetes中的Deployment用于部署无状态应用程序,管理Pod的数量、更新方式和资源限制。通过创建和管理ReplicaSet,Deployment可以实现Pod的自动扩缩容、滚动更新和回滚。本文介绍了Deployment的基本概念,并通过一个具体的示例演示了如何使用Deployment创建、更新和管理Pod。
|
1月前
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
|
4月前
|
Kubernetes 容器 Perl
在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
|
4月前
|
弹性计算 运维 Kubernetes
Kubernetes(K8S) Controller - Deployment 介绍
Kubernetes(K8S) Controller - Deployment 介绍
46 1
|
4月前
|
存储 Kubernetes 网络协议
在K8S中,Deployment和Statefulset有何区别?
在K8S中,Deployment和Statefulset有何区别?
|
4月前
|
Kubernetes API 开发工具
在K8S中,Deployment的升级过程是什么?
在K8S中,Deployment的升级过程是什么?
|
4月前
|
Kubernetes API 容器
在K8S中,deployment的yaml文件如何编写呢?
在K8S中,deployment的yaml文件如何编写呢?
|
4月前
|
Kubernetes 容器 Perl
在k8S中,deployment升级策略是什么?
在k8S中,deployment升级策略是什么?
下一篇
DataWorks