了解 Deployment
了解 Deployment 如何自动化管理无状态应用的 Pod 和 ReplicaSets。
了解 Deployment 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
什么是部署?
欢迎!在 Kubernetes 中,管理应用意味着管理它们的 Pod。但直接管理单个 Pod,甚至 ReplicaSets,可能会变得复杂。
部署是一种更高层级的对象,用于简化无状态应用的管理。您可以把它看作应用的管理者。
- 它定义应用的期望状态。
- 即使 Pod 发生故障,它也能确保该状态得到维持。
- 它会自动执行更新和回滚。
为什么使用部署?
部署让应用能够在 Kubernetes 中可靠运行,并带来显著优势:
- 自动化管理:负责处理 Pod 的创建、扩缩容和删除。
- 自我修复:如果 Pod 崩溃,部署会自动替换它,以维持期望的副本数量。
- 声明式更新:您描述新的期望状态,部署会确定如何达到该状态(例如推出新版本)。
部署是管理无状态应用的推荐方式。
部署的核心作用
部署的核心是管理 ReplicaSets。ReplicaSet 的职责是确保指定数量的 Pod 副本始终在运行。
因此,部署使用 ReplicaSets 来实现其目标:根据您的定义,确保应用拥有正确数量且运行状况良好的 Pod。
这种抽象大大简化了应用生命周期的定义和维护。
部署 YAML 的结构
与大多数 Kubernetes 对象一样,部署使用 YAML 定义。以下是您通常会看到的关键部分:
apiVersion和kind:标识对象类型(Deployment)。metadata:部署对象自身的名称、标签等信息。spec:核心定义,包括:replicas:期望的 Pod 数量。selector:部署查找其所管理 Pod 的方式。template:要创建的 Pod 模板。
Pod 模板
部署 spec 中的 template 字段非常重要。它本质上是一个完整的 Pod 定义。
此部署创建的任何 Pod 都会使用这个模板。这意味着您可以定义:
- 要使用的容器镜像。
- 要公开的端口。
- 环境变量。
- 资源请求和限制。
- 以及更多内容!
对该模板的更改会触发应用更新。
创建简单部署
下面为一个简单的 Nginx Web 服务器定义部署。我们希望运行 3 个副本。
请注意,selector.matchLabels 必须与 template.metadata.labels 匹配。这会告诉部署哪些 Pod 属于它。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80应用部署
要在 Kubernetes 集群(例如 Minikube)中创建此部署,请使用 kubectl apply 命令。将上面的 YAML 保存为 nginx-deployment.yaml。
kubectl 会创建部署对象。随后,部署控制器会发现此对象并采取行动,创建一个 ReplicaSet,再由该 ReplicaSet 创建 3 个 Nginx Pod。
kubectl apply -f nginx-deployment.yaml检查您的部署
应用部署后,您可以检查部署及其管理的 Pod 的状态:
kubectl get deployments:显示您的部署。kubectl get replicasets:显示部署创建的 ReplicaSet。kubectl get pods -l app=nginx:显示部署管理的 Pod(通过其标签选择器)。kubectl describe deployment my-nginx-deployment:提供部署的详细信息,包括事件。
kubectl get deployments
kubectl get pods -l app=nginx
kubectl describe deployment my-nginx-deployment维持期望状态
部署最强大的功能之一是维持期望状态的能力。如果您定义了 replicas: 3,部署就会确保始终有 3 个 Pod 在运行。
尝试手动删除一个 Nginx Pod(kubectl delete pod <pod-name>)。您会看到部署很快创建一个新的 Pod 来替换它!这就是自我修复的实际运作方式。
快速检查
部署主要用于管理哪种类型的应用?
回顾:理解部署
做得很好!您已经迈出了学习 Kubernetes 部署的第一步。
- 部署是用于管理无状态应用的高层级对象。
- 它们通过管理 ReplicaSets,自动完成 Pod 的创建、扩缩容和自我修复。
- 您可以使用 YAML 清单定义部署,指定期望的
replicas数量和 Pod 的template。 kubectl apply会创建部署,而kubectl get/describe可以帮助您监控部署。
接下来,我们将深入学习 ReplicaSets,以及它们如何保证期望的 Pod 数量!
常见问题解答
「了解 Deployment」课时是免费的吗?
是的 — 「了解 Deployment」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「了解 Deployment」这节课中我会学到什么?
了解 Deployment 如何自动化管理无状态应用的 Pod 和 ReplicaSets。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「了解 Deployment」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 了解 Deployment
- 使用 ReplicaSets 扩展应用
- 滚动更新与回滚
- 部署策略:蓝绿与金丝雀