[英]2 containers using the same port in Kubernetes pod
我有以下相同的問題: 一個 Kubernetes 吊艙中的雙 nginx
在我的 Kubernetes Deployment
模板中,我有 2 個使用相同端口 80 的容器。我知道Pod
中的容器實際上位於同一個網絡命名空間下,這使得可以使用localhost
或127.0.0.1
訪問Pod
中的另一個容器。 這意味着容器不能使用相同的端口。
借助docker run
或docker-compose
很容易實現這一點,第一個容器使用8001:80
,第二個容器使用8002:80
。
在 Kubernetes Pod 中是否有類似或更好的解決方案? 無需將這 2 個容器分成不同的 Pod。
我相信您需要做的是為 pod 中的每個容器指定不同的容器端口。 Kubernetes 允許您在 pod 定義文件中使用此參數指定每個容器公開的端口。 然后,您可以創建指向相同 pod 但不同端口的服務。
基本上我完全同意@David和@Patric 的評論,但我決定在其中添加更多內容,將其擴展為答案。
我有以下相同的問題: 一個 Kubernetes 吊艙中的雙 nginx
並且在提到的線程中已經有一個很好的答案來解決這個問題。 從技術角度來看,它為您的特定用例提供了現成的解決方案,但它並不質疑這個想法本身。
在 docker run 或 docker-compose 的幫助下,第一個容器使用 8001:80,第二個容器使用 8002:80,很容易實現這一點。
在Kubernetes中也很容易實現。 只需將兩個容器放在不同的 Pod 中,您就不必使用Pods
配置來使其偵聽不同於80
的端口。 請注意,您提到的這兩個 docker 容器不共享單個網絡命名空間,這就是為什么它們都可以偵聽映射到主機系統上不同端口( 8001
和8002
)的端口80
的原因。 Kubernetes Pods不是這種情況。 閱讀更多關於微服務架構的信息,特別是它是如何在k8s上實現的,你會注意到在一個Pod
中放置幾個容器是非常罕見的用例,絕對不應該在像你這樣的情況下應用。 應該有充分的理由將 2 個或更多容器放在一個Pod
中。 通常第二個容器與主容器有一些互補的 function。
多容器 Pod 有 3 種設計模式,常用在Kubernetes中:sidecar、ambassador 和 adapter。 很多時候,它們都被簡單地稱為邊車容器。
請注意,在上述所有用例中,在單個Pod
中耦合在一起的 2 個或多個容器具有完全不同的 function 。 即使您在單個Pod
中放置了多個容器(這是最常見的),實際上它也絕不會是同一類型的容器(例如在您的情況下偵聽不同端口的兩個 nginx 服務器)。 它們應該是互補的,並且應該有充分的理由將它們放在一起,為什么它們應該同時啟動和關閉並共享相同的網絡命名空間。 Sidecar 容器中運行着一個監控代理,它對主容器有免費的 function,例如 nginx 網絡服務器。 您可以在本文中閱讀有關容器設計模式的更多信息。
我沒有一個非常確定的用例,因為我對 Kubernetes 和集群的概念還很陌生。
因此,如果您對這種架構沒有特別的理由,那么絕對不要以這種方式使用 go。
我對集群的初步規划是將系統的所有容器放入一個 pod。 這樣我就可以根據需要復制這個 pod。
您不需要單個Pod
來復制它。 您的集群中可以有很多replicaSets
(通常由Deployments
管理),每個副本都負責運行某種Pod
的聲明數量的副本。
但根據我現在得到的所有反饋,似乎我走錯了方向。
是的,這絕對是錯誤的方向,但實際上已經說過了。 我只想強調為什么這個方向是錯誤的。 這種方法完全違背了微服務架構的理念,而這正是Kubernetes的設計目的。 將所有基礎設施放在一個巨大的Pod
中並將所有容器緊密綁定在一起是沒有意義的。 請記住, Pod
是Kubernetes中最小的可部署單元,當其中一個容器崩潰時,整個Pod
都會崩潰。 您無法手動重啟Pod
中的一個容器。
我將審查我的結構並嘗試使用你們提供的建議。 謝謝大家! =)
這是一個好主意:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.