From 8a131a566dde6ef7d45d9084e402b687eeb0832b Mon Sep 17 00:00:00 2001 From: Soto Sugita Date: Fri, 23 Aug 2019 04:24:33 +0900 Subject: [PATCH] =?UTF-8?q?Translate=20tasks/debug-application-cluster/deb?= =?UTF-8?q?ug-pod-replication-contr=E2=80=A6=20(#15883)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translate tasks/debug-application-cluster/debug-pod-replication-controller/ in Japanese * Update content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md Co-Authored-By: nasa9084 --- .../debug-pod-replication-controller.md | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md diff --git a/content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md new file mode 100644 index 0000000000000..82f0df125ab3f --- /dev/null +++ b/content/ja/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md @@ -0,0 +1,125 @@ +--- +title: PodとReplicationControllerのデバッグ +content_template: templates/task +--- + +{{% capture overview %}} + +このページでは、PodとReplicationControllerをデバッグする方法を説明します。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +* [Pod](/docs/concepts/workloads/pods/pod/)と[Podのライフサイクル](/docs/concepts/workloads/pods/pod-lifecycle/)の基本を理解している必要があります。 + +{{% /capture %}} + +{{% capture steps %}} + +## Podのデバッグ + +Podのデバッグの最初のステップは、Podを調べることです。 +次のコマンドで、Podの現在の状態と最近のイベントを確認して下さい。 + +```shell +kubectl describe pods ${POD_NAME} +``` + +Pod内のコンテナの状態を確認します。 +コンテナはすべて`Running`状態ですか?最近再起動はしましたか? + +Podの状態に応じてデバッグを続けます。 + +### PodがPending状態にとどまっている + +Podが`Pending`状態でスタックしている場合、ノードにスケジュールできていないことを意味します。 +一般的に、これは、何らかのタイプのリソースが不足しており、それによってスケジューリングを妨げられているためです。 +上述の`kubectl describe...`コマンドの出力を確認してください。 +Podをスケジュールできない理由に関するスケジューラーからのメッセージがあるはずです。 +理由としては以下のようなものがあります。 + +#### リソースが不十分 + +クラスター内のCPUまたはメモリーの供給を使い果たした可能性があります。 +この場合、いくつかのことを試すことができます。 + +* クラスターに[ノードを追加します](/docs/admin/cluster-management/#resizing-a-cluster)。 + +* [不要なPodを終了](/docs/user-guide/pods/single-container/#deleting_a_pod)して、 + `Pending`状態のPodのための空きリソースを作ります。 + +* Podがノードよりも大きくないことを確認します。 + 例えば、すべてのノードのキャパシティーが`cpu: 1`の場合、`cpu: 1.1`を要求するPodは決してスケジュールされません。 + + `kubectl get nodes -o `コマンドでノードのキャパシティーを確認できます。 + 必要な情報を抽出するコマンドラインの例を以下に示します。 + + ```shell + kubectl get nodes -o yaml | egrep '\sname:|cpu:|memory:' + kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, cap: .status.capacity}' + ``` + + [リソースクォータ](/docs/concepts/policy/resource-quotas/)機能では、 + 消費できるリソースの合計量を制限するように構成できます。 + Namespaceと組み合わせて使用すると、1つのチームがすべてのリソースを占有することを防ぐことができます。 + +#### hostPortの使用 + +Podを`hostPort`にバインドすると、Podをスケジュールできる場所の数が制限されます。 +ほとんどの場合、`hostPort`は不要です。Serviceオブジェクトを使用してPodを公開してください。 +どうしても`hostPort`が必要な場合は、コンテナクラスター内のノードと同じ数のPodのみをスケジュールできます。 + +### PodがWaiting状態にとどまっている + +Podが`Waiting`状態でスタックしている場合、Podはワーカーノードにスケジュールされていますが、そのマシンでは実行できない状態です。 +この場合も、`kubectl describe ...`の情報が参考になるはずです。 +Podが`Waiting`状態となる最も一般的な原因は、イメージをプルできないことです。 +確認すべき事項が3つあります。 + +* イメージの名前が正しいことを確認して下さい。 +* イメージはリポジトリーにプッシュしましたか? +* マシンで手動で`docker pull `を実行し、イメージをプルできるかどうかを確認して下さい。 + +### Podがクラッシュする、あるいはUnhealthy状態 + +最初に、現在のコンテナのログを確認して下さい。 + +```shell +kubectl logs ${POD_NAME} ${CONTAINER_NAME} +``` + +以前にコンテナがクラッシュした場合、次のコマンドで以前のコンテナのクラッシュログにアクセスできます。 + +```shell +kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME} +``` + +別の方法として、`exec`を使用してそのコンテナ内でコマンドを実行できます。 + +```shell +kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN} +``` + +{{< note >} +`-c ${CONTAINER_NAME}`はオプションです。単一のコンテナのみを含むPodの場合は省略できます。 +{{< /note >}} + +例えば、実行中のCassandra Podのログを確認するには、次のコマンドを実行します。 + +```shell +kubectl exec cassandra -- cat /var/log/cassandra/system.log +``` + +これらのアプローチがいずれも機能しない場合、Podが実行されているホストマシンを見つけて、そのホストにSSH接続することができます。 + +## ReplicationControllerのデバッグ + +ReplicationControllerはかなり明快です。Podを作成できるか、できないかのどちらかです。 +Podを作成できない場合は、[上述の手順](#Podのデバッグ)を参照してPodをデバッグしてください。 + +`kubectl describe rc ${CONTROLLER_NAME}`を使用して、レプリケーションコントローラーに関連するイベントを調べることもできます。 + +{{% /capture %}}