23·Deployment进阶

创建 Deployment

kubernetesdeploymentcreate

创建 Deployment

学习目标

  1. 掌握使用 YAML 文件创建 Deployment
  2. 掌握使用命令行创建 Deployment
  3. 验证 Deployment 创建成功

核心概念

方式一:使用 YAML 文件创建

# 1. 创建 YAML 文件
# deployment.yaml

# 2. 应用配置
$ kubectl apply -f deployment.yaml

# 3. 查看 Deployment
$ kubectl get deployments

# 4. 查看 Pod
$ kubectl get pods

方式二:使用命令行创建

# 基础创建
$ kubectl create deployment nginx --image=nginx

# 指定副本数
$ kubectl create deployment nginx --image=nginx --replicas=3

# 指定端口
$ kubectl create deployment nginx --image=nginx --port=80

# 导出 YAML(不执行,只生成配置)
$ kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml

完整示例:从创建到验证

# 1. 创建 deployment.yaml
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24
        ports:
        - containerPort: 80
EOF

# 2. 应用配置
$ kubectl apply -f deployment.yaml
deployment.apps/nginx-deployment created

# 3. 查看 Deployment
$ kubectl get deployment nginx-deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           10s

# 4. 查看 ReplicaSet
$ kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5d8f4c4c5    3         3         3       10s

# 5. 查看 Pod
$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5d8f4c4c5-abc12   1/1     Running   0          10s
nginx-deployment-5d8f4c4c5-def34   1/1     Running   0          10s
nginx-deployment-5d8f4c4c5-ghi56   1/1     Running   0          10s

查看详细信息

# 查看 Deployment 详情
$ kubectl describe deployment nginx-deployment

# 查看 YAML 配置(运行中的)
$ kubectl get deployment nginx-deployment -o yaml

# 查看事件
$ kubectl get events --field-selector involvedObject.name=nginx-deployment

等待 Deployment 就绪

# 等待 Deployment 完全就绪
$ kubectl rollout status deployment/nginx-deployment

# 设置超时时间
$ kubectl rollout status deployment/nginx-deployment --timeout=60s

实践练习

练习 1:命令行创建

使用命令行创建一个 Deployment:

  • 名称:web-app
  • 镜像:httpd:2.4
  • 副本数:2
# 你的命令

练习 2:YAML 创建

编写 YAML 文件创建一个 Deployment:

  • 名称:api-server
  • 镜像:node:18-alpine
  • 副本数:3
  • 端口:3000

练习 3:验证部署

创建完成后,验证:

  1. Deployment 状态
  2. ReplicaSet 状态
  3. Pod 状态
  4. Pod 日志

常见问题

1. Pod 一直 Pending

# 查看 Pod 事件
$ kubectl describe pod <pod-name>

# 常见原因:
# - 资源不足
# - 节点有 taint
# - PVC 未绑定

2. Pod 一直 CrashLoopBackOff

# 查看日志
$ kubectl logs <pod-name>

# 查看前一个容器的日志
$ kubectl logs <pod-name> --previous

# 常见原因:
# - 镜像不存在
# - 应用启动失败
# - 配置错误

3. 镜像拉取失败

# 查看事件
$ kubectl describe pod <pod-name>

# 常见原因:
# - 镜像名称错误
# - 私有仓库需要 imagePullSecrets
# - 网络问题

小结

要点说明
YAML 创建kubectl apply -f deployment.yaml
命令创建kubectl create deployment --image=
导出 YAML--dry-run=client -o yaml
查看状态kubectl get/describe deployment
等待就绪kubectl rollout status
调试kubectl logs + kubectl describe

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「扩缩容」 以巩固所学知识。