<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes容器之間的通信淺談

          共 3092字,需瀏覽 7分鐘

           ·

          2021-02-06 08:03

          公眾號關(guān)注?「開源Linux
          回復(fù)「學(xué)習(xí)」,有我為您特別篩選的學(xué)習(xí)資料~

          作者: Matt Zand?和?Jim Sullivan
          譯者: 穿過生命散發(fā)芬芳F

          Kubernetes是一個容器化的解決方案。它提供了稱為Pods的虛擬化運(yùn)行環(huán)境,該環(huán)境容納一個或多個容器以提供虛擬運(yùn)行環(huán)境。Kubernetes的一個重要方面是Pod內(nèi)的容器間通信。此外,管理Kubernetes網(wǎng)絡(luò)的一個重要領(lǐng)域是在內(nèi)部和外部轉(zhuǎn)發(fā)容器端口,以確保Pod中的容器之間能夠正確通信。為了管理此類通信,Kubernetes提供以下四種聯(lián)網(wǎng)模型:


          • 容器到容器通信
          • PodPod通信
          • PodService通信
          • 外部到內(nèi)部通信


          在本文中,我們向您展示了Pod中容器之間的聯(lián)網(wǎng)和通信方式,從而深入探討容器與容器之間的通信。





          ?一個Pod中容器之間的通信


          在單個Pod中擁有多個容器,使它們彼此之間進(jìn)行通信變得相對簡單。他們可以使用幾種不同的方法來做到這一點(diǎn)。在本文中,我們將詳細(xì)討論兩種方法:i-共享卷和ii-進(jìn)程間通信。
          ?
          1、?一個Kubernetes Pod中的共享卷
          ?
          Kubernetes中,您可以使用共享的Kubernetes卷作為在Pod中的容器之間共享數(shù)據(jù)的簡單有效的方法。在大多數(shù)情況下,使用主機(jī)上與Pod中所有容器共享的目錄就足夠了。
          ?
          Kubernetes Volumes使數(shù)據(jù)能夠在容器重啟后依然存在,但是這些卷具有與Pod相同的生命周期。這意味著卷(及其存儲的數(shù)據(jù))與Pod存在的時間完全一樣。如果出于任何原因刪除了該Pod,即使創(chuàng)建了相同的替換,共享卷也將被破壞并從頭開始創(chuàng)建。
          ?
          具有共享卷的多容器Pod的標(biāo)準(zhǔn)用例是,當(dāng)一個容器將日志或其他文件寫入共享目錄,而另一個容器從共享目錄讀取。例如,我們可以像這樣創(chuàng)建一個Pod
          apiVersion: v1kind: Podmetadata:?? name: mc1spec:??volumes:??-?name:?html????emptyDir:?{}??containers:??-?name:?1st????image:?nginx????volumeMounts:????-?name:?html??????mountPath:?/usr/share/nginx/html??-?name:?2nd????image:?debian????volumeMounts:????-?name:?html??????mountPath:?/html????command:?["/bin/sh",?"-c"]????args:??????-?while?true;?do???????????date?>>?/html/index.html;???????????sleep?1;?????????done


          在此示例中,我們定義了一個名為html的卷。它的類型為emptyDir,這意味著該卷是在將Pod分配給節(jié)點(diǎn)時首次創(chuàng)建的,并且只要該Pod在該節(jié)點(diǎn)上運(yùn)行就存在。顧名思義,它最初是空的。第一個容器運(yùn)行Nginx服務(wù),并將共享卷掛載到目錄/ usr / share / nginx / html。第二個容器使用Debian映像,并將共享卷安裝到目錄/ html。第二個容器每秒將當(dāng)前日期和時間添加到共享卷中的index.html文件中。當(dāng)用戶向Pod發(fā)出HTTP請求時,Nginx服務(wù)器將讀取此文件并將其傳輸給用戶以響應(yīng)該請求。



          你可以通過暴露nginx端口并使用瀏覽器訪問它,或直接在容器中檢查共享目錄來檢查Pod是否正常工作:

          $ kubectl exec mc1 -c 1st -- /bin/cat /usr/share/nginx/html/index.html ...  
          $ kubectl exec mc1 -c 2nd -- /bin/cat /html/index.html ...


          2、進(jìn)程間通信(IPC

          ?

          Pod中的容器共享相同的IPC命名空間,這意味著它們還可以使用標(biāo)準(zhǔn)的進(jìn)程間通信(例如SystemV信號量或POSIX共享內(nèi)存)相互通信。容器使用本地主機(jī)名的策略在Pod中進(jìn)行通信。
          ?
          在下面的示例中,我們定義了一個具有兩個容器的Pod。兩者都使用相同的Docker映像。第一個容器是生產(chǎn)者,它創(chuàng)建一個標(biāo)準(zhǔn)的Linux消息隊(duì)列,寫一些隨機(jī)消息,然后寫一個特殊的退出消息。第二個容器是使用者,它打開相同的消息隊(duì)列以進(jìn)行讀取并讀取消息,直到接收到退出消息為止。我們還將重啟策略設(shè)置為從不,因此在兩個容器終止后,Pod停止。

          apiVersion: v1kind: Podmetadata:??name: mc2spec:???containers:????- name: producer?????image: allingeek/ch6_ipc????command:?["./ipc",?"-producer"]??-?name:?consumer????image:?allingeek/ch6_ipc????command:?["./ipc",?"-consumer"]??restartPolicy:?Never


          要檢查這一點(diǎn),請使用kubectl create創(chuàng)建pod并觀察Pod的狀態(tài):


          $ kubectl get pods --show-all -wNAME??????READY???? STATUS??????????????RESTARTS??AGEmc2?????? 0/2?????? Pending???????????? 0???????? 0smc2?????? 0/2?????? ContainerCreating?? 0???????? 0smc2?????? 0/2?????? Completed?????????? 0???????? 29


          現(xiàn)在,您可以檢查每個容器的日志,并驗(yàn)證第二個容器是否收到了第一個容器的所有消息,包括退出消息:


          $ kubectl logs mc2 -c producer...Produced: f4Produced: 1dProduced: 9eProduced: 27$ kubectl logs mc2 -c consumer...Consumed: f4Consumed: 1dConsumed: 9eConsumed: 27Consumed: done




          但是,此Pod存在一個主要問題,它與容器的啟動方式有關(guān)。





          結(jié)論


          Pods可以具有多個容器的主要原因是為了支持輔助主應(yīng)用程序的幫助應(yīng)用程序。輔助應(yīng)用程序的典型示例是數(shù)據(jù)提取器,數(shù)據(jù)推送器和代理。這種模式的一個示例是帶有幫助程序的Web服務(wù)器,該程序輪詢git存儲庫以獲取新更新。


          本實(shí)驗(yàn)中的為在Pod的使用期內(nèi)容器之間通信提供了一種方法。如果刪除并重新創(chuàng)建Pod,則共享卷中存儲的所有數(shù)據(jù)都會丟失。在本文中,我們還討論了Pod中容器之間的進(jìn)程間通信的概念,它是共享卷概念的替代方法。現(xiàn)在,您了解了Pod中的容器如何通信和交換數(shù)據(jù),接下來可以繼續(xù)學(xué)習(xí)其他Kubernetes網(wǎng)絡(luò)模型,例如PodPodPodService的通信。

          關(guān)注「開源Linux」加星標(biāo),提升IT技能

          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线日本a∨ | 人人做人人操 | 男人露大鸡巴无遮挡免费视频 | 免费一级做a爱片毛片A片小说 | 亚洲第一成人在线视频 |