我有一個有 3 個節點的 Kubernetes 集群。在這個集群上,有一個 Kubernetes StatefulSet 負責接收訊息,持久化訊息,調度接收到的訊息和一個 Deployment 型別的應用處理器,它有 3 個實體(副本),這里的 App Processor POD 是接收多種使用 REST 呼叫來自訊息處理器 POD 的訊息。
所以最后我有
message-processor-0
和
app-processor-12345
app-processor-23456
app-processor-45567
我的要求是,我只想將特定型別的訊息發送到應用處理器的一個專用實體。
uj5u.com熱心網友回復:
由于您使用的是部署,因此該特定 POD 沒有可靠的網路身份。POD 的名稱和 IP 地址將在它被殺死和重新創建時更改。
你有兩個選擇。一種是為該特定 pod 創建一個全新的部署和服務,以便您可以使用新創建的服務與該 pod 進行通信。
否則,StatefulSets 是另一種選擇,因為無論 POD 是被殺死還是重新啟動,它們都具有持久的網路身份。
StatefulSet pod 獲得固定的有序名稱,其格式為 $(statefulset name)-$(ordinal)。
例如,如果您的 yaml 看起來像這樣:
---
apiVersion: v1
kind: Service
metadata:
name: testservice
namespace: testnamespace
labels:
app: testapp
spec:
ports:
- port: 80
name: http
type: ClusterIP
selector:
app: myapp
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: testapp
namespace: testnamespace
spec:
serviceName: testservice
replicas: 5
selector:
matchLabels:
app: testapp
Pod 的名稱將是 testapp-0、testapp-1 等。
然后你可以使用:
testapp-0.testservice.testnamespace.svc.cluster.local用于訪問 testapp StatetefulSet 的 Pod 0
更多資訊請參考:StatefulSet 檔案
uj5u.com熱心網友回復:
你可以在這里使用的是一個Statefulset用于你的app-processor.
Statefulsets 能夠為其每個副本擁有唯一的名稱,并以以下形式在重新啟動時保持:
- 應用處理器-0
- 應用程式處理器 1
- 應用處理器 2
因此,它們保留了一個粘性身份,您可以使用該身份將特定訊息發送到一個專用實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523598.html
標籤:Kubernetes
