K8S 之 Deployment
摘要
-
本文介绍 K8S 的 Deployment,本文以 CentOS 8 为例。
Deployment 介绍
-
Deployment 用于管理运行一个应用负载的一组 Pod,通常适用于不保持状态的负载。
-
Deployment 是最常用的无状态服务控制器,由Deployment、ReplicaSet、Pod组成、支持集群扩容缩容、滚动、更新、自动维护Pod可用性及副本数量等功能,ReplicaSet和Pod由Deployment自动管理,用户无需干预,也就是说,创建一个Deployment后,K8S会自动创建ReplicaSet,并创建指定数量的Pod。
Deployment 管理
Deployment 创建
-
create
创建
1 | # 创建 deployment |
-
一个简单的
deployment.yaml
文件说明
1 | apiVersion: apps/v1 # 指定使用的 API 版本,这里是 apps/v1,适用于 Deployment 资源 |
-
获取 deployment 的 yaml 文件配置项帮助
1 | # 比如,这里查看用新Pod替换现有Pod的部署策略 |
小贴士
- yaml 文件中,出现了
metadata.labels
,spec.selector.matchLabels
以及template.metadata.labels
,三者是什么关系?
- metadata.labels(Deployment 的标签)
给 Deployment 本身 打的标签, 和 Pod 没有直接管理关系
常用于资源分组、查找(比如:kubectl get deploy -l app=nginx)
1 | metadata: |
-
spec.selector.matchLabels(选择器)
指定 Deployment 要管理哪些 Pod
必须精确匹配 Pod 的标签
决定 Deployment 会不会“接管”某些 Pod
1 | spec: |
-
template.metadata.labels(模板中的 Pod 标签)
Pod 模板中定义的标签
Deployment 按这个模板创建 Pod
必须与 matchLabels 完全一致,否则会报错
1 | template: |
🔁 关系图示意:
1 | Deployment |
Deployment 扩缩容
1 | # 扩容到5个,原先有3个,这里会再创建2个 |
查看 Deployment
1 | # 查看 Deployment ,默认显示 default 命名空间下的 deployments |
查看 Deployment 详情
-
当 Deployment 运行错误时,可以通过该命令查看 Deployment 的详情,找到错误原因
1 | kubectl describe deploy <deploy-name> |
删除 Deployment
1 | kubectl delete deploy <deploy-name> |
查看 Deployment 日志
1 | kubectl logs deploy/<deploy-name> |
滚动升级与回滚 Deployment
-
升级镜像
1 | # set image: 这里表示要改变的是镜像, --record=true 表示记录此次操作 |
-
查看历史版本
1 | # 前面的序号表示版本号 |
-
查看更新状态
1 | kubectl rollout status deploy nginx |
-
回滚
1 | # 回退到前一个版本 |