侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1824 篇文章
  • 累计收到 0 条评论

如何创建一个简单的Kubernetes Deployment?

2025-12-11 / 0 评论 / 4 阅读

题目

如何创建一个简单的Kubernetes Deployment?

信息

  • 类型:问答
  • 难度:⭐

考点

Deployment基本概念,YAML文件编写,Pod管理

快速回答

创建一个Kubernetes Deployment需要以下步骤:

  1. 编写YAML定义文件,包含apiVersion、kind、metadata和spec字段
  2. 在spec中设置副本数(replicas)、选择器(selector)和Pod模板(template)
  3. 使用kubectl apply -f命令部署
  4. 验证部署状态: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 pods

3. 最佳实践

  • 标签一致性:确保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