ahxcjxzxh 发表于 2018-1-4 19:25:26

[置顶]kubernetes--Init Container

概念
  Init Container就是做初始化工作的容器。可以有一个或多个,如果有多个,这些 Init Container 按照定义的顺序依次执行,只有所有的InitContainer 执行完后,主容器才启动。由于一个Pod里的存储卷是共享的,所以 Init Container 里产生的数据可以被主容器使用到。
  Init Container可以在多种K8S资源里被使用到如Deployment、DaemonSet, PetSet/StatefulSet、Job等,但归根结底都是在Pod启动时,在主容器启动前执行,做初始化工作。

应用场景

等待其它模块Ready
  比如使用apache部署web服务,需要做一些准备工作(例如从git服务器上拉取代码、检查运行环境是否到位等),可以在运行Web服务的Pod里使用一个InitContainer,去执行准备工作,完成后Init Container结束退出,然后启动正在的apache容器。

做初始化配置
  比如集群里检测所有已经存在的成员节点,为主容器准备好集群的配置信息,这样主容器起来后就能用这个配置信息加入集群。

例子
  

cat << EOF >lykops-deploy-init-container.yaml  
apiVersion: extensions/v1beta1
  
kind: Deployment
  
metadata:
  name: lykops-deploy-init-container
  labels:
  project: lykops
  app: init-container
  version: v1
  annotations:
  pod.beta.kubernetes.io/init-containers:
  -name: apache-web,
  image: web:apache,
  command: ["sh", "httpd -t"]
  
spec:
  replicas: 1
  minReadySeconds: 30
  selector:
  matchLabels:
  name: lykops-deploy-init-container
  project: lykops
  app: init-container
  version: v1
  template:
  metadata:
  labels:
  name: lykops-deploy-init-container
  project: lykops
  app: init-container
  version: v1
  spec:
  containers:
  - name: webapache
  image: web:apache
  command: [ "sh", "/etc/run.sh" ]
  ports:
  - containerPort: 80
  name: http
  protocol: TCP
  
EOF
  
kubectl create -f lykops-deploy-init-container.yaml
  
页: [1]
查看完整版本: [置顶]kubernetes--Init Container