Kubernetes容器之間的通信淺談

容器到容器通信 Pod到Pod通信 Pod到Service通信 外部到內(nèi)部通信
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)
?
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)。
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ò)模型,例如Pod到Pod或Pod到Service的通信。
關(guān)注「開源Linux」加星標(biāo),提升IT技能

