实验目标
通过本实验,你将学习如何在 Kubernetes 中使用 Deployment 控制器来管理无状态应用的部署。实验内容包括:
-
创建 Deployment。
-
查看 Deployment 状态。
-
更新 Deployment。
-
回滚到之前的版本。
-
扩容和缩容。
-
清理资源。
实验环境
-
Kubernetes 集群:已安装并运行的 Kubernetes 集群。
-
kubectl:Kubernetes 命令行工具,已配置并连接到集群。
-
Docker:已安装并运行的 Docker 服务,用于拉取镜像。
实验步骤
1. 创建 Deployment
1.1 编写 Deployment 配置文件
创建一个名为 deployment.yml
的文件:
使用 kubectl create
快速生成 YAML 文件
kubectl create deployment my-app --image=nginx:1.23 --dry-run=client -o yaml > deployment.yml
基本命令格式
kubectl create <resource> <name> --image=<image> --dry-run=client -o yaml > <output-file>.yaml
-
kubectl create
:Kubernetes 命令行工具的命令,用于创建资源。 -
<resource>
:要创建的资源类型,例如deployment
、pod
、service
等。 -
<name>
:资源的名称。 -
--image=<image>
:指定容器镜像,仅适用于 Pod 或 Deployment 等需要镜像的资源。 -
--dry-run=client
:表示在客户端执行命令,但不实际创建资源。这允许我们在不修改集群的情况下生成配置文件。 -
-o yaml
:指定输出格式为 YAML。 -
>
:将输出重定向到文件。 -
<output-file>.yaml
:生成的 YAML 文件名。
内容如下:
# deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:1.23
ports:
- containerPort: 80
说明:
-
replicas: 3
:指定创建 3 个 Pod 副本。 -
selector
:通过标签选择器匹配 Pod。 -
template
:定义 Pod 的模板,包括容器的名称、镜像和端口。
1.2 应用配置文件
运行以下命令将配置文件应用到集群中:
kubectl apply -f deployment.yml
1.3 验证 Deployment
运行以下命令查看 Deployment 的状态:
kubectl get deployment my-app
输出示例:
运行以下命令查看 Pod 的状态:
kubectl get pods
输出示例:
2. 更新 Deployment
2.1 修改镜像版本
编辑 deployment.yml
文件,将 image
字段从 nginx:1.23
更新为 nginx:latest
:
# deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:1.latest
ports:
- containerPort: 80
2.2 应用更新
运行以下命令将更新后的配置文件应用到集群中:
kubectl apply -f deployment.yml
2.3 查看更新过程
运行以下命令查看 Pod 的更新过程:
kubectl get pods -w
输出示例:
3. 回滚到之前的版本
3.1 查看历史版本
运行以下命令查看 Deployment 的历史版本:
kubectl rollout history deployment my-app
输出示例:
3.2 回滚到之前的版本
运行以下命令将 Deployment 回滚到版本 1:
kubectl rollout undo deployment my-app --to-revision=2
3.3 查看回滚结果
运行以下命令查看 Pod 的状态:
kubectl get pods
输出示例:
4. 扩容和缩容
4.1 扩容
运行以下命令将 Deployment 的副本数量从 3 扩容到 5:
kubectl scale deployment my-app --replicas=5
4.2 查看扩容结果
运行以下命令查看 Pod 的状态:
kubectl get pods
输出示例:
NAME READY STATUS RESTARTS AGE
my-app-5d886954d4-2ckqw 1/1 Running 0 6m
my-app-5d886954d4-m8gpd 1/1 Running 0 6m
my-app-5d886954d4-s7pws 1/1 Running 0 6m
my-app-5d886954d4-tt2hz 1/1 Running 0 1m
my-app-5d886954d4-wqnvv 1/1 Running 0 1m
4.3 缩容
运行以下命令将 Deployment 的副本数量从 5 缩容到 2:
kubectl scale deployment my-app --replicas=2
4.4 查看缩容结果
运行以下命令查看 Pod 的状态:
kubectl get pods
NAME READY STATUS RESTARTS AGE
my-app-5d886954d4-2ckqw 1/1 Running 0 7m
my-app-5d886954d4-m8gpd 1/1 Running 0 7m
my-app-5d886954d4-s7pws 1/1 Terminating 0 7m
my-app-5d886954d4-tt2hz 1/1 Terminating 0 2m
my-app-5d886954d4-wqnvv 1/1 Terminating 0 2m
5. 清理资源
5.1 删除 Deployment
运行以下命令删除 Deployment 及其管理的所有 Pod:
kubectl delete deployment my-app
5.2 验证资源已删除
运行以下命令确认 Deployment 和 Pod 已被删除:
kubectl get deployment my-app