在Pod中,容器是共享存儲資源和網絡資源的,因此Init Container容器產生的數據是能夠被其餘容器做用到的。初始化容器有點相似於postStart 鉤子的做用,在Pod沒有啓動以前,爲應用容器作一些準備工做,可是跟鉤子的啓動處於不一樣的階段,在Pod生命週期圖中能夠明顯看出。Pod中能夠啓動一個或多個容器,也能夠有一個或多個initContainer 容器。html
initContainer 容器和普通容器幾乎同樣,除了一下兩點:mysql
若是init容器啓動失敗,容器根據restartPolicy策略重啓,若是有多個,它們會按順序,一次執行一個,每一個init容器都必須運行成功了纔會運行下一個。init容器不支持readnessProbe,由於它們必須在Pod就緒前運行完成。web
apiVersino: v1 kind: Pod metadata: name: myapp spec: initContainers: - name: init-server image: busybox command: ["/bin/bash","-c","chown -R apache:apache /var/www"] volumeMount: - name: wwwroot mountPath: /var/www containers: - name: my-service image: httpd containerPort: - name: http port: 80 protocol: TCP volumeMount: - name: wwwroot mountPath: /var/www volumes: - name: wwwroot hostPath: path: /home/wwwroot
能夠經過init Container修改主容器應用中的共享存儲文件權限,讓/var/www 路徑成爲apache用戶和組擁有。這是咱們利用initContainer起到的做用之一。sql
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice image: busybox command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] - name: init-mydb image: busybox command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']