创建 Deployment
学习目标
- 掌握使用 YAML 文件创建 Deployment
- 掌握使用命令行创建 Deployment
- 验证 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:验证部署
创建完成后,验证:
- Deployment 状态
- ReplicaSet 状态
- Pod 状态
- 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...