1. 初始化容器 (Init Containers)

作用:在应用容器启动前执行准备任务(如等待依赖服务、修改系统参数、下载配置)。
关键特性

  • 按顺序执行,前一个成功后才启动下一个

  • 若失败,Pod 会根据 restartPolicy 重启(默认为 Always

  • 不支持 readinessProbe(通过 command 退出码判断成功)

您的配置示例

yaml

复制

下载

# init01.yml:延迟15秒启动主容器
initContainers:
- name: initc01
  image: nginx:1.7.9
  command: ["sh","-c","sleep 15"]

# init02.yml:修改系统参数(需特权模式)
initContainers:
- name: initc02
  image: alpine
  command: ["sh","-c","/sbin/sysctl -w vm.swappiness=0"]
  securityContext:
    privileged: true  # 启用特权模式

# myapp.yaml:等待服务就绪
initContainers:
- name: init-redis
  command: ['sh', '-c', 'until nslookup redis-service; do sleep 2; done;']  # 等待DNS解析
- name: init-mysql
  command: ['sh', '-c', 'until nslookup mysql-service; do sleep 2; done;']

2. 临时容器 (Ephemeral Containers)

作用:用于调试运行中的 Pod(不重启Pod),不直接定义在 Pod Spec 中
使用场景

  • 诊断运行中容器的问题(如网络、进程检查)

  • 动态注入调试工具(如 busyboxcurl

操作命令示例

bash

复制

下载

kubectl debug -it pod/nginx --image=busybox:1.35 --target=nginx

:您的 YAML 中未包含临时容器配置,因其是运行时动态添加的。


3. 自动扩缩容 (HPA - Horizontal Pod Autoscaler)

作用:根据指标(CPU/内存/自定义)自动调整副本数。

配置步骤(以 nginx-deployment.yaml 为例):

  1. 为容器设置资源请求(必须):

    yaml

    复制

    下载

    # nginx-deployment.yaml 修改后片段
    containers:
    - name: nginx
      resources:
        requests:
          cpu: 10m  # 必须定义资源请求
  2. 创建 HPA 策略

    yaml

    复制

    下载

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-server  # 指向您的Deployment
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50  # CPU使用率超过50%时扩容

其他高级调度示例解析

亲和性 (Affinity)

yaml

复制

下载

# test06.yml:硬亲和性(必须与 pod05 在同一节点)
affinity:
  podAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - {key: app, operator: In, values: ["pod05"]}
      topologyKey: kubernetes.io/hostname  # 节点级拓扑域

# test09.yml:反亲和性(避免与 pod05 同节点)
podAntiAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
  - labelSelector:
      matchExpressions:
      - {key: app, operator: In, values: ["pod05"]}
    topologyKey: kubernetes.io/hostname
容忍度 (Tolerations)

yaml

复制

下载

# pod2.yml:允许在带污点 check=mycheck 的节点运行60秒
tolerations:
- key: "check"
  operator: "Equal"
  value: "mycheck"
  effect: "NoExecute"
  tolerationSeconds: 60  # 临时容忍时间

关键问题修复建议

  1. test03.yaml 拼写错误

    diff

    复制

    下载

    - {key: tpye, operator: In, values: ["node01"]}  # ❌
    + {key: type, operator: In, values: ["node01"]}  # ✅
  2. 安全风险init02.yml 中 privileged: true 仅在受信环境使用。

  3. HPA 前置条件:确保所有容器定义 resources.requests(参考 nginx-deployment.yaml 修改)。


总结

特性典型场景您的文件示例
InitContainer依赖检查、配置初始化init01.yml, myapp.yaml
Ephemeral生产环境调试(无需修改YAML)
HPA动态扩缩容需补充HPA定义
Affinity精细化调度(同节点/反亲和)test06.yml, test09.yml
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐