k8s之Deployment、PodTemplate与容器的关系

Kubernetes中Deployment、PodTemplate与容器的关系

这三者在Kubernetes中是层层嵌套的关系,可以用"套娃"模型来理解:

1. 核心关系图示

Deployment (管理应用部署)
│
└── PodTemplate (定义Pod的模板)
    │
    └── 容器 (实际运行的应用)

2. 具体关系解析

Deployment (部署控制器)

  • 作用:声明应用的期望状态(要运行多少副本、用什么镜像等)
  • 关键能力:滚动更新、回滚、扩缩容
  • 包含:一个PodTemplate + 副本数等配置

PodTemplate (Pod模板)

  • 位置:在Deployment的spec.template字段中
  • 作用:定义要创建的Pod的"模具"
  • 包含
    • 容器定义(1个或多个)
    • 存储卷配置
    • 网络设置
    • 节点选择规则等

容器 (Container)

  • 位置:在PodTemplate的spec.containers数组中
  • 作用:实际运行应用程序的隔离环境
  • 包含
    • 容器镜像
    • 环境变量
    • 资源限制
    • 端口配置等

3. 工作流程示例

当创建一个Deployment时:

  1. 用户定义Deployment(包含PodTemplate)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deploy
    spec:
      replicas: 3  # 要创建3个Pod
      template:    # 这就是PodTemplate
        spec:
          containers:
          - name: nginx
            image: nginx:1.19
            ports:
            - containerPort: 80
    
  2. Deployment控制器

    • 读取PodTemplate
    • 创建3个相同的Pod(每个Pod里运行1个nginx容器)
  3. kubelet

    • 在每个节点上拉取nginx:1.19镜像
    • 创建并运行容器

4. 三者关系特点

对象生命周期是否直接创建主要作用
Deployment长期存在应用部署管理
PodTemplate随Deployment存在定义Pod的创建规则
容器随Pod存在实际运行应用进程

5. 实际应用中的体现

  • 修改镜像版本:改的是PodTemplate中的容器定义

    kubectl set image deployment/nginx-deploy nginx=nginx:1.20
    
  • 扩容:改的是Deployment的replicas,不影响PodTemplate

    kubectl scale deployment nginx-deploy --replicas=5
    
  • 查看关系

    # 查看Deployment的PodTemplate
    kubectl get deployment nginx-deploy -o yaml | grep -A10 "template:"
    
    # 查看Pod中的容器
    kubectl get pods -l app=nginx -o yaml | grep -A5 "containers:"
    

简单记忆法

把这三者想象成工厂生产:

  • Deployment是生产主管(决定生产多少)
  • PodTemplate是产品设计图(决定产品长什么样)
  • 容器是最终产品里的核心部件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值