AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

如何在Kubernetes中使用Init Container

來(lái)源: 責(zé)編: 時(shí)間:2023-11-02 17:13:35 329觀看
導(dǎo)讀Pod 可以包含多個(gè)容器,應(yīng)用運(yùn)行在這些容器里面,同時(shí) Pod 也可以有一個(gè)或多個(gè)先于應(yīng)用容器啟動(dòng)的 Init 容器。Init Container 是什么Init Container 是一種特殊容器,顧名思義是用來(lái)做初始化工作的容器,可以是一個(gè)或者多個(gè),

Pod 可以包含多個(gè)容器,應(yīng)用運(yùn)行在這些容器里面,同時(shí) Pod 也可以有一個(gè)或多個(gè)先于應(yīng)用容器啟動(dòng)的 Init 容器。PUg28資訊網(wǎng)——每日最新資訊28at.com

PUg28資訊網(wǎng)——每日最新資訊28at.com

Init Container 是什么

Init Container 是一種特殊容器,顧名思義是用來(lái)做初始化工作的容器,可以是一個(gè)或者多個(gè),如果有多個(gè)的話,這些容器會(huì)按定義的順序依次執(zhí)行,只有所有的Init Container執(zhí)行完后,主容器才會(huì)被啟動(dòng)。PUg28資訊網(wǎng)——每日最新資訊28at.com

我們知道一個(gè)Pod里面的所有容器是共享數(shù)據(jù)卷和網(wǎng)絡(luò)命名空間的,所以Init Container里面產(chǎn)生的數(shù)據(jù)可以被主容器使用到的。Init Container與應(yīng)用容器本質(zhì)上是一樣的,除了以下兩點(diǎn):PUg28資訊網(wǎng)——每日最新資訊28at.com

  • Init Container 不支持 lifecycle、livenessProbe、readinessProbe 和 startupProbe, 因?yàn)樗鼈儽仨氃?Pod 就緒之前運(yùn)行完成,所以他們是僅運(yùn)行一次就結(jié)束的任務(wù)
  • 必須在成功執(zhí)行完后,系統(tǒng)才能繼續(xù)執(zhí)行下一個(gè)容器。

如果 Pod 的 Init 容器失敗,Kubernetes 會(huì)不斷地重啟該 Pod,直到 Init 容器成功為止。如果 Pod 對(duì)應(yīng)的 restartPolicy 為 Never,它不會(huì)重新啟動(dòng)。PUg28資訊網(wǎng)——每日最新資訊28at.com

Pod 的生命周期:PUg28資訊網(wǎng)——每日最新資訊28at.com

PUg28資訊網(wǎng)——每日最新資訊28at.com

從上面這張圖我們可以直觀的看到 Init Container 是獨(dú)立于主容器之外的,但他們都屬于Pod的生命周期。PUg28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用場(chǎng)景

  • 等待其他關(guān)聯(lián)服務(wù)正確運(yùn)行(例如數(shù)據(jù)庫(kù)或某個(gè)后臺(tái)服務(wù))
  • 基于環(huán)境變量或配置模板生成服務(wù)所需配置文件
  • 從遠(yuǎn)程數(shù)據(jù)庫(kù)獲取本地所需配置,或者將自身注冊(cè)到某個(gè)中央數(shù)據(jù)庫(kù)中
  • 下載相關(guān)依賴包,或者對(duì)統(tǒng)進(jìn)行一些預(yù)配置操作

簡(jiǎn)單示例

應(yīng)用容器定義在 Pod.Spec.Containers,是必填字段,而 init 是定義在 Pod.Spec.initContainers 中,是可選字段。PUg28資訊網(wǎng)——每日最新資訊28at.com

下面的例子定義了一個(gè)具有 2 個(gè) Init 容器的簡(jiǎn)單 Pod。第一個(gè)等待 myservice 啟動(dòng), 第二個(gè)等待 mydb 啟動(dòng)。一旦這兩個(gè) Init 容器都啟動(dòng)完成,Pod 將啟動(dòng) spec 節(jié)中的應(yīng)用容器。PUg28資訊網(wǎng)——每日最新資訊28at.com

myapp.yaml:PUg28資訊網(wǎng)——每日最新資訊28at.com

apiVersion: v1kind: Podmetadata:  name: myapp-pod  labels:    app.kubernetes.io/name: MyAppspec:  containers:  - name: myapp-container    image: busybox:1.28    command: ['sh', '-c', 'echo The app is running! && sleep 3600']  initContainers:  - name: init-myservice    image: busybox:1.28    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]  - name: init-mydb    image: busybox:1.28    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

創(chuàng)建:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl apply -f myapp.yamlpod/myapp-pod created

查看狀態(tài):PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl get -f myapp.yaml    NAME        READY   STATUS     RESTARTS   AGEmyapp-pod   0/1     Init:0/2   0          8s

輸出詳細(xì)信息:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl describe -f myapp.yaml  Name:         myapp-podNamespace:    default[...]Labels:       app.kubernetes.io/name=MyAppAnnotations:  <none>Status:       Pending[...]Init Containers:  init-myservice:[...]    State:          Running[...]  init-mydb:[...]    State:          Waiting      Reason:       PodInitializing    Ready:          False[...]Containers:  myapp-container:[...]    State:          Waiting      Reason:       PodInitializing    Ready:          False[...]Events:  Type    Reason     Age   From               Message  ----    ------     ----  ----               -------  Normal  Scheduled  20s   default-scheduler  Successfully assigned default/myapp-pod to localhost.localdomain  Normal  Pulling    17s   kubelet            Pulling image "busybox:1.28"  Normal  Pulled     8s    kubelet            Successfully pulled image "busybox:1.28" in 9.30472043s  Normal  Created    7s    kubelet            Created container init-myservice  Normal  Started    6s    kubelet            Started container init-myservice

查看 Pod 內(nèi) Init 容器的日志:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl logs myapp-pod -c init-myservice   # 查看第一個(gè) Init 容器nslookup: can't resolve 'myservice.default.svc.cluster.local'Server:    10.96.0.10Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local waiting for myservice   [root@localhost ~]# kubectl logs myapp-pod -c init-mydb     # 查看第二個(gè) Init 容器Error from server (BadRequest): container "init-mydb" in pod "myapp-pod" is waiting to start: PodInitializing

此時(shí),init-mydb容器會(huì)等待 init-myservice 執(zhí)行完成后再執(zhí)行。如下為創(chuàng)建這些 Service 的配置文件:services.yaml:PUg28資訊網(wǎng)——每日最新資訊28at.com

---apiVersion: v1kind: Servicemetadata:  name: myservicespec:  ports:  - protocol: TCP    port: 80    targetPort: 9376---apiVersion: v1kind: Servicemetadata:  name: mydbspec:  ports:  - protocol: TCP    port: 80    targetPort: 9377

創(chuàng)建:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl apply -f services.yamlservice/myservice createdservice/mydb created

再次查看狀態(tài):變成 了 Running:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl get podNAME        READY   STATUS    RESTARTS   AGEmyapp-pod   1/1     Running   0          2m35s

此時(shí)再次查看詳細(xì)信息,發(fā)現(xiàn)兩個(gè) init-myservice 和 init-mydb 已經(jīng) Terminated 了:PUg28資訊網(wǎng)——每日最新資訊28at.com

Init Containers:  init-myservice:[...]    State:          Terminated      Reason:       Completed      Exit Code:    0[...]  init-mydb:[...]    State:          Terminated      Reason:       Completed    Exit Code:    0

Sidecar 新特性

隨著Kubernetes發(fā)布了1.28,支持了不少重磅特性,其中最令人感慨的莫過(guò)于新的Sidecar,目前是alpha版本。之前Sidecar的稱謂只是一種多容器的設(shè)計(jì)模式,在K8s看來(lái)和普通容器沒(méi)什么不一樣。但由于其生命周期與業(yè)務(wù)容器并不一致,對(duì)于Sidecar的生命周期管理一直是個(gè)問(wèn)題。PUg28資訊網(wǎng)——每日最新資訊28at.com

新版本的Sidecar是放置在initContainers中,指定restartPolicy為Always便開(kāi)啟Sidecar,其生命周期以及重啟管理與普通容器也是一樣的,此特性也可用于運(yùn)行 Job 。PUg28資訊網(wǎng)——每日最新資訊28at.com

下面是一個(gè)帶有Sidecar的Deployment示例,log Sidecar容器用來(lái)輸出日志到終端,main容器模擬寫(xiě)入日志: sidecar.yaml:PUg28資訊網(wǎng)——每日最新資訊28at.com

apiVersion: apps/v1kind: Deploymentmetadata:  name: myapp  labels:    app: myappspec:  replicas: 1  selector:    matchLabels:      app: myapp  template:    metadata:      labels:        app: myapp    spec:      containers:        - name: myapp          image: alpine:latest          command: ['sh', '-c', 'while true; do echo "logging" >> /opt/logs.txt; sleep 1; done']          volumeMounts:            - name: data              mountPath: /opt      initContainers:        - name: logshipper # sidecar 容器          image: alpine:latest          restartPolicy: Always # 必須指定restartPolicy為Always才能開(kāi)啟sidecar          command: ['sh', '-c', 'tail -f /opt/logs.txt']          volumeMounts:            - name: data              mountPath: /opt      volumes:        - name: data          emptyDir: {}

部署到K8s集群中,可以看到initContainers[*].restartPolicy字段:PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl create -f sidecar.yamldeployment.apps/myapp created [root@localhost ~]# kubectl get po -l app=myapp -ojsonpath='{.items[0].spec.initContainers[0].restartPolicy}'Always [root@localhost ~]# kubectl get po  -l app=myapp NAME                    READY   STATUS    RESTARTS   AGEmyapp-215h3248d-p4z6   2/2     Running   0          1m5s

myapp Pod中兩個(gè)容器都是Ready(2/2),查看日志可以看到log Sidecar一直在輸出日志。PUg28資訊網(wǎng)——每日最新資訊28at.com

[root@localhost ~]# kubectl logs -l app=myapp -c logshipper -flogginglogging

本文鏈接:http://www.tebozhan.com/showinfo-26-16635-0.html如何在Kubernetes中使用Init Container

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 18 個(gè)非常有用的網(wǎng)站,有一天你會(huì)用上它

下一篇: 事件流處理 (ESP) 與 Kafka 簡(jiǎn)介

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 消息稱迪士尼要拍真人版《魔發(fā)奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實(shí)有點(diǎn)忙,忙著將不少動(dòng)畫(huà)改成真人版,繼《美人魚(yú)》后,真人版《白雪公主》、《魔發(fā)奇緣》也在路上了。據(jù)外媒消息稱,迪士尼將打造真人版
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過(guò)某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類(lèi)下
  • 服務(wù)存儲(chǔ)設(shè)計(jì)模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數(shù)據(jù)從主存儲(chǔ)加載到KV緩存中,加速后續(xù)的訪問(wèn)。在存在重復(fù)度的場(chǎng)景,Cache-Aside可以提升服務(wù)性能,降低底層存儲(chǔ)的壓力,缺點(diǎn)是緩存和底
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對(duì)帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡(jiǎn)單而
  • 使用LLM插件從命令行訪問(wèn)Llama 2

    最近的一個(gè)大新聞是Meta AI推出了新的開(kāi)源授權(quán)的大型語(yǔ)言模型Llama 2。這是一項(xiàng)非常重要的進(jìn)展:Llama 2可免費(fèi)用于研究和商業(yè)用途。(幾小時(shí)前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為L(zhǎng)la
  • 中國(guó)家電海外掘金正當(dāng)時(shí)|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營(yíng)|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場(chǎng)戰(zhàn)況空前,中國(guó)創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國(guó)的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 騰訊蓋樓,字節(jié)拆墻

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗(yàn)嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷(xiāo)售價(jià)2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強(qiáng)悍登場(chǎng),限時(shí)售價(jià)3099元起;價(jià)位段最強(qiáng)性能手機(jī)iQOO Neo8同期上市
  • OPPO Reno10 Pro英雄聯(lián)盟定制禮盒公布:薩勒芬妮同款配色夢(mèng)幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機(jī),全系標(biāo)配了超光影長(zhǎng)焦鏡頭,是迄今為止拍照
Top