题目
如何创建一个简单的Kubernetes Deployment?
信息
- 类型:问答
- 难度:⭐
考点
Deployment基本概念,YAML文件编写,Pod管理
快速回答
创建一个Kubernetes Deployment需要以下步骤:
- 编写YAML定义文件,包含apiVersion、kind、metadata和spec字段
- 在spec中设置副本数(replicas)、选择器(selector)和Pod模板(template)
- 使用
kubectl apply -f命令部署 - 验证部署状态:
kubectl get deployments
1. 原理说明
Deployment是Kubernetes中管理Pod副本的核心对象,它提供:
- 声明式更新:通过YAML文件定义期望状态
- 滚动升级/回滚:逐步替换Pod版本
- 自愈能力:自动维持指定数量的Pod副本
2. 代码示例
创建名为nginx-deployment.yaml的文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # 维持3个Pod副本
selector:
matchLabels:
app: nginx
template: # Pod模板定义
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80执行部署命令:
kubectl apply -f nginx-deployment.yaml
# 验证部署
kubectl get deployments
# 查看Pod状态
kubectl get pods3. 最佳实践
- 标签一致性:确保
spec.selector.matchLabels与Pod模板的metadata.labels匹配 - 资源限制:始终在容器中设置
resources.requests/limits - 版本控制:避免使用
latest标签,明确指定容器镜像版本
4. 常见错误
- 标签不匹配:导致Deployment无法关联Pod,错误示例:
selector: matchLabels: app: frontend # 错误!应与Pod模板的app: nginx一致 - 缺少选择器:YAML中遗漏
spec.selector字段 - 端口未暴露:忘记定义
containerPort导致服务无法访问
5. 扩展知识
- 更新策略:通过
spec.strategy.type设置RollingUpdate(默认)或Recreate - 扩缩容:
kubectl scale deployment/nginx-deployment --replicas=5 - 更新镜像:
kubectl set image deployment/nginx-deployment nginx=nginx:1.19.0 - 关联对象:Deployment会自动创建ReplicaSet,由ReplicaSet直接管理Pod