2017-06-14 13 views
0

2つのポッドとType:NodePortを持つサービスを実行して、ポッド間のリクエストの負荷分散を行っています。私はいつ要求をサービスに送信するのかを知りたいのですが、どのポッドにリクエストが転送されるのですか。これを見つける方法はありますか?レスポンスを見ると、すべてのリクエストが同じポッドで処理されるようです。要求を処理しているKubernetesポッドの検索方法

答えて

0
  1. 使用している場合は、アプリケーションログファイルを参照できます。 stdoutに何かを印刷する場合は、kubectl logs <pod>を使ってメッセージを見てください。

  2. テストの場合、応答にpod hostnameを含めることができます。

+0

私は 'kubectl logs 'を空にしました。 – PMat

+0

ログインしていますか? –

0

コンテキストとネームスペースがないため、ログが表示されない可能性があります。

kubectl get pods -o wide --all-namespaces | grep <pod>を試して、ポッドが存在するネームスペースとノードのIPアドレスに関する情報を取得してください。

その後ポッドがサービスに関連付けられていないことを遠隔チャンスもあり、ログ kubectl --namespace <namespace> logs --tail 100 -f <pod>

の最後の100行の実行中の尾を取得するために供給し、以下のコマンドに。 kubectl describe services --namespace <namespace> <service>を実行し、Selector:セクションのアプリケーション名を調べる

また、コンテナにexecを実行して、ポートがポッド自体にアクセス可能かどうかを確認することもできます。リッスンやアンサーしていない場合は、ネームスペース内のアプリケーションに関連付けられていないサービスが原因である可能性があります。

+0

セレクタが私の配置を指しています – PMat

2

kubernetes Serviceは、デフォルトでWRRを使用して負荷分散を行います。サービスを作成すると、ノードにiptablesルールが生成されます。

ノードにsshを入れて、iptables-save|lessを実行します。サービスの名前を検索します。以下の例では、サービスmicrobotは、microbotの展開と3つのレプリカの負荷分散を行います。 2つのポッドしかないので、2つのエントリが必要です。 iptables出力は、上記のように見えない場合は

-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-OZCDYTQTC3KQGJK5 
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SKIRAXBCCQB5R4MV 
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -j KUBE-SEP-SPMPNZCOIJIRSNNQ 

は、それはあなたのサービスが適切に設定されていない可能性があります。 Heidiのように、ポッドはサービスに関連付けられていません。

+0

私は2つのポッドを持っていますが、このように見えます。-A KUBE-SVC-RCFZYSCVQORLOLVD -mコメント - コメント "default/memory-service:" -m統計 - モードランダム - 確率0.50000000000 - j-KUBE-SEP-QL7KI24MTSZRY3Q3' – PMat

+0

iptablesのルールは正しく見えるので、正しくロードバランスする必要があります。 'memory-service'デーモンのログをそれぞれヒットさせることができますか?そうすれば 'kubectl logs -f'を使ってポッドを観察することができます。または、デプロイメントでさらに1つのポートを公開し、それをサービスに関連付けます。一度、 'kubectl exec'をポッドに入れたら、netcatをインストールして余分なポートで引き続き聞くようにしてください。次に、テストをもう一度実行します。それが私がデバッグする方法です。 –

関連する問題