初始化容器是在pod的主容器啟動(dòng)之前要運(yùn)行的容器,主要是做一些 主容器的前置工作,它具有兩大特征:
1、初始化容器必須運(yùn)行完成直至結(jié)束,若某初始化容器運(yùn)行失敗,那么kubernetes需要重啟它直到成功完成;
2、初始化容器必須按照定義的順序執(zhí)行,當(dāng)且僅當(dāng)前一個(gè)成功之后,后面的一個(gè)才能運(yùn)行,一旦失敗,如果 Pod 對(duì)應(yīng)的 restartPolicy 值為 Never,它不會(huì)重新啟動(dòng);
初始化容器有很多的應(yīng)用場(chǎng)景,下面列出的是最常見的幾個(gè):
提供主容器鏡像中不具備的工具程序或自定義代碼;
初始化容器要先于應(yīng)用容器串行啟動(dòng)并運(yùn)行完成,因此可用于延后應(yīng)用容器的啟動(dòng)直至其依賴的條件得到滿足;
二、initConatiner數(shù)據(jù)共享
需求:假設(shè)要以主容器來(lái)運(yùn)行nginx,但是要求在運(yùn)行nginx之前需要拿到最新的index主頁(yè);
創(chuàng)建pod-initcontainer.yaml,內(nèi)容如下:
apiVersion:v1 kind:Pod metadata: name:php-updated spec: containers: -name:php image:php:7-fpm volumeMounts: -name:dir mountPath:/var/www/html/ initContainers: -name:install image:busybox volumeMounts: -name:dir mountPath:/var/www/html/ command: -wget -"-O" -"/var/www/html/index.php" -https://gitee.com volumes: -name:dir emptyDir: {}
啟動(dòng)成功后,登陸進(jìn)PHP容器,可以查看到/var/www/html/目錄下的index.html文件為init container所生成。
三、initConatiner前置數(shù)據(jù)操作
初始化容器和PortStart的區(qū)別:
PostStart:依賴主應(yīng)用的環(huán)境,而且并不一定先于Command運(yùn)行
InitContainer:不依賴主應(yīng)用的環(huán)境,可以有更高的權(quán)限和更多的工具,一定會(huì)在主應(yīng)用啟動(dòng)之前完成。
Init 容器不支持 lifecycle、livenessProbe、readinessProbe 和 startupProbe。
需求:
假設(shè) 主容器在運(yùn)行前,需要依賴一個(gè)B應(yīng)用,只有B應(yīng)用成功啟動(dòng)后此容器才可以正常運(yùn)行;
創(chuàng)建pod-initcontainer22.yaml,內(nèi)容如下:
apiVersion: apps/v1 kind: Deployment metadata: labels: run: my-app name: my-app spec: replicas: 2 selector: matchLabels: run: my-app template: metadata: labels: run: my-app spec: restartPolicy: Always containers: - name: myapp-container image: busybox:1.28 command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myappb image: busybox:1.28 command: ['sh', '-c', "until nslookup myappb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myappb; sleep 2; done"]
創(chuàng)建測(cè)試所用的svc:
apiVersion: v1 kind: Service metadata: name: myappb spec: ports: - protocol: TCP port: 80 targetPort: 9377
為創(chuàng)建svc前,initcontainer一直處于等待,可以從console端輸出日志看到其狀態(tài),一旦創(chuàng)建svc,initcontainer探測(cè)到svc正常后,即啟動(dòng)后續(xù)的mainContainer。
-
容器
+關(guān)注
關(guān)注
0文章
495瀏覽量
22069 -
代碼
+關(guān)注
關(guān)注
30文章
4791瀏覽量
68669 -
鏡像
+關(guān)注
關(guān)注
0文章
165瀏覽量
10751
原文標(biāo)題:initContainer多場(chǎng)景應(yīng)用
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論