nsqlookupd サービスを提供するポッドのセットがあります。ここで、各 nsqd コンテナーに同時に接続する nsqlookupd サーバーのリストが必要です (サービスは毎回異なるものを指します)。私が得る似たようなもの
kubectl describe service nsqlookupd
...
Endpoints: ....
しかし、展開定義内の変数、または何らかの方法でnsqdコンテナー内から変数に入れたい
nsqlookupd サービスを提供するポッドのセットがあります。ここで、各 nsqd コンテナーに同時に接続する nsqlookupd サーバーのリストが必要です (サービスは毎回異なるものを指します)。私が得る似たようなもの
kubectl describe service nsqlookupd
...
Endpoints: ....
しかし、展開定義内の変数、または何らかの方法でnsqdコンテナー内から変数に入れたい
nsqd
コンテナーまたは同じポッド内の別のコンテナーで実行される追加のサービスが必要になるようです。そのサービスの役割は、エンドポイントのリストを取得するために API を定期的にポールすることです。
サービス アカウントが有効になっている(デフォルトで有効になっている)と仮定すると、Pod 内curl
およびPod を使用したシェルの概念実証は次のとおりです。jq
# Read token and CA cert from Service Account
CACERT="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
# Replace the namespace ("kube-system") and service name ("kube-dns")
ENDPOINTS=$(curl -s --cacert "$CACERT" -H "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/kube-system/endpoints/kube-dns \
)
# Filter the JSON output
echo "$ENDPOINTS" | jq -r .subsets[].addresses[].ip
# output:
# 10.100.42.3
# 10.100.67.3
Go でのこの種のサービスの適切な実装については、Kube2skyのソース コードを参照してください。
StatefuSet で実行できます。安定した名前 + 安定したストレージ