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容器。

做初始化配置

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

例子

[plain] view plain copy

  1. cat << EOF >lykops-deploy-init-container.yaml  

  2. apiVersion: extensions/v1beta1  

  3. kind: Deployment  

  4. metadata:  

  5.  name: lykops-deploy-init-container  

  6.  labels:  

  7.    project: lykops  

  8.    app: init-container  

  9.    version: v1          

  10.  annotations:  

  11.    pod.beta.kubernetes.io/init-containers:  

  12.     -name: apache-web,  

  13.      image: web:apache,  

  14.      command: ["sh", "httpd -t"]  

  15. spec:  

  16.  replicas: 1  

  17.  minReadySeconds: 30  

  18.  selector:  

  19.    matchLabels:  

  20.      name: lykops-deploy-init-container  

  21.      project: lykops  

  22.      app: init-container  

  23.      version: v1  

  24.  template:  

  25.     metadata:  

  26.      labels:  

  27.        name: lykops-deploy-init-container  

  28.        project: lykops  

  29.        app: init-container  

  30.        version: v1  

  31.    spec:  

  32.      containers:  

  33.      – name: webapache  

  34.        image: web:apache  

  35.        command: [ "sh", "/etc/run.sh" ]  

  36.        ports:  

  37.        – containerPort: 80  

  38.          name: http  

  39.          protocol: TCP  

  40. EOF  

  41. kubectl create -f lykops-deploy-init-container.yaml  

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注