Kubernetes高级调度(初始化容器Initcontainer,临时容器Ephemeral Containers,自动扩缩容HPA)
·
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 中。
使用场景:
-
诊断运行中容器的问题(如网络、进程检查)
-
动态注入调试工具(如
busybox、curl)
操作命令示例:
bash
复制
下载
kubectl debug -it pod/nginx --image=busybox:1.35 --target=nginx
注:您的 YAML 中未包含临时容器配置,因其是运行时动态添加的。
3. 自动扩缩容 (HPA - Horizontal Pod Autoscaler)
作用:根据指标(CPU/内存/自定义)自动调整副本数。
配置步骤(以 nginx-deployment.yaml 为例):
-
为容器设置资源请求(必须):
yaml
复制
下载
# nginx-deployment.yaml 修改后片段 containers: - name: nginx resources: requests: cpu: 10m # 必须定义资源请求 -
创建 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 # 临时容忍时间
关键问题修复建议
-
test03.yaml拼写错误:diff
复制
下载
- {key: tpye, operator: In, values: ["node01"]} # ❌ + {key: type, operator: In, values: ["node01"]} # ✅ -
安全风险:
init02.yml中privileged: true仅在受信环境使用。 -
HPA 前置条件:确保所有容器定义
resources.requests(参考nginx-deployment.yaml修改)。
总结
| 特性 | 典型场景 | 您的文件示例 |
|---|---|---|
| InitContainer | 依赖检查、配置初始化 | init01.yml, myapp.yaml |
| Ephemeral | 生产环境调试(无需修改YAML) | 无 |
| HPA | 动态扩缩容 | 需补充HPA定义 |
| Affinity | 精细化调度(同节点/反亲和) | test06.yml, test09.yml |
更多推荐

所有评论(0)