久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Kubernetes中容器到容器通信是怎樣的

159次閱讀
沒有評論

共計 2534 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章主要介紹“Kubernetes 中容器到容器通信是怎樣的”,在日常操作中,相信很多人在 Kubernetes 中容器到容器通信是怎樣的問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Kubernetes 中容器到容器通信是怎樣的”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

Kubernetes 是一個容器化的解決方案。它提供了 Pods 的運行時環(huán)境,該環(huán)境可以容納一個或多個容器。Kubernetes 的一個重要方面是 Pod 內的容器通信。

此外,管理 Kubernetes 網絡的一個重要領域是在內部和外部轉發(fā)容器端口,以確保 Pod 中的容器之間能夠正確通信。為了管理此類通信,Kubernetes 提供以下四種聯網模型:

容器到容器通信 Pod 到 Pod 通信 Pod 到 Service 通信對外通信容器之間的通信

在單個 Pod 中擁有多個容器,要使它們彼此之間進行通信變得相對簡單,可以使用幾種不同的方法來做到這一點。在本文中,我們將詳細討論兩種方法:共享卷和進程間通信。

1. Kubernetes Pod 中的共享卷

在 Kubernetes 中,你可以使用共享的 Kubernetes 卷,作為在 Pod 中的容器之間共享數據的簡單有效的方法。在大多數情況下,Pod 中所有容器共享使用主機上的目錄就足夠了。

Kubernetes Volumes 使數據能夠在容器重啟后幸免于難,但是這些卷具有與 Pod 相同的生存期。這意味著卷(及其存儲的數據)與 Pod 存在的時間完全一樣。如果出于任何原因刪除了該 Pod,即使創(chuàng)建了相同的替換,共享卷也將被破壞并從頭開始創(chuàng)建。

具有共享卷的多容器 Pod 的標準用例是,一個容器將日志或其他文件寫入共享目錄,而另一個容器從共享目錄讀取。例如,我們可以像這樣創(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é)點時首次創(chuàng)建的,并且只要該 Pod 在該節(jié)點上運行就存在。顧名思義,它最初是空的。第一個容器運行 Nginx 服務器,并將共享卷安裝到目錄 /usr/share/nginx/html。第二個容器使用 Debian 鏡像,并將共享卷安裝到目錄 / html。第二個容器每秒將當前日期和時間添加到共享卷中的 index.html 文件中。

當用戶向 Pod 發(fā)出 HTTP 請求時,Nginx 服務器將讀取此文件并將其傳回給用戶。

你可以通過暴露 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. 進程間通信(Inter-Process Communications,IPC)

Pod 中的容器共享相同的 IPC 名稱空間,這意味著它們還可以使用標準的進程間通信,例如 SystemV 信號量或 POSIX 共享內存相互通信。容器使用本地主機名的策略在 Pod 中進行通信。

在下面的示例中,我們定義了具有兩個容器的 Pod。兩者都使用相同的 Docker 鏡像。第一個容器是生產者,它創(chuàng)建一個標準的 Linux 消息隊列,寫一些隨機消息,然后寫一個特殊的退出消息。第二個容器是使用者,它打開相同的消息隊列以讀取消息,直到接收到退出消息為止。我們還將重啟策略設置為“從不”,因此在兩個容器終止后,容器停止。


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

要檢查這一點,請使用 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

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


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

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

到此,關于“Kubernetes 中容器到容器通信是怎樣的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注丸趣 TV 網站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計2534字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 盖州市| 汕头市| 泰和县| 故城县| 蓝山县| 大新县| 包头市| 临猗县| 云霄县| 茌平县| 昂仁县| 响水县| 卫辉市| 岳阳县| 边坝县| 松阳县| 安义县| 芷江| 榆社县| 宝兴县| 安图县| 清丰县| 鹤山市| 格尔木市| 东丽区| 新沂市| 通许县| 观塘区| 莱芜市| 定远县| 平原县| 大渡口区| 荣昌县| 公安县| 邹平县| 叶城县| 孟连| 龙门县| 盐山县| 翁源县| 岫岩|