@@ -9,14 +9,18 @@ no_list: true
99
1010このドキュメントはクラスターのトラブルシューティングに関するもので、あなたが経験している問題の根本原因として、アプリケーションをすでに除外していることを前提としています。
1111アプリケーションのデバッグのコツは、[ アプリケーションのトラブルシューティングガイド] ( /ja/docs/tasks/debug/debug-application/ ) をご覧ください。
12- また、[ トラブルシューティングドキュメント] ( /ja/docs/tasks/debug/debug ) にも詳しい情報があります。
12+ また、[ トラブルシューティングドキュメント] ( /docs/tasks/debug/ ) にも詳しい情報があります。
13+
14+ {{<glossary_tooltip text="kubectl" term_id="kubectl">}}のトラブルシューティングについては、[ kubectlのトラブルシューティング] ( /docs/tasks/debug/debug-cluster/troubleshoot-kubectl/ ) を参照してください。
1315
1416<!-- body -->
1517
1618## クラスターのリストアップ
1719
1820クラスターで最初にデバッグするのは、ノードがすべて正しく登録されているかどうかです。
1921
22+ 以下を実行します。
23+
2024``` shell
2125kubectl get nodes
2226```
@@ -28,59 +32,249 @@ kubectl get nodes
2832``` shell
2933kubectl cluster-info dump
3034```
35+
36+ ### 例: ダウンあるいは到達不能なノードのデバッグ
37+
38+ デバッグを行う際、ノードの状態を見ることが有用なことがあります。
39+ たとえば、そのノード上で動作しているPodが奇妙な挙動を示している場合や、なぜPodがそのノードにスケジュールされないのかを知りたい場合などです。
40+ Podと同様に、` kubectl describe node ` や` kubectl get node -o yaml ` を使用してノードに関する詳細情報を取得できます。
41+ 例えば、ノードがダウンしている(ネットワークから切断されている、またはkubeletが停止して再起動しないなど)場合に見られる状況は以下の通りです。
42+ ノードがNotReadyであることを示すイベントに注意し、また、Podが動作していないことにも注意してください(NotReady状態が5分間続くとPodは追い出されます)。
43+
44+ ``` shell
45+ kubectl get nodes
46+ ```
47+
48+ ``` none
49+ NAME STATUS ROLES AGE VERSION
50+ kube-worker-1 NotReady <none> 1h v1.23.3
51+ kubernetes-node-bols Ready <none> 1h v1.23.3
52+ kubernetes-node-st6x Ready <none> 1h v1.23.3
53+ kubernetes-node-unaj Ready <none> 1h v1.23.3
54+ ```
55+
56+ ``` shell
57+ kubectl describe node kube-worker-1
58+ ```
59+
60+ ``` none
61+ Name: kube-worker-1
62+ Roles: <none>
63+ Labels: beta.kubernetes.io/arch=amd64
64+ beta.kubernetes.io/os=linux
65+ kubernetes.io/arch=amd64
66+ kubernetes.io/hostname=kube-worker-1
67+ kubernetes.io/os=linux
68+ Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
69+ node.alpha.kubernetes.io/ttl: 0
70+ volumes.kubernetes.io/controller-managed-attach-detach: true
71+ CreationTimestamp: Thu, 17 Feb 2022 16:46:30 -0500
72+ Taints: node.kubernetes.io/unreachable:NoExecute
73+ node.kubernetes.io/unreachable:NoSchedule
74+ Unschedulable: false
75+ Lease:
76+ HolderIdentity: kube-worker-1
77+ AcquireTime: <unset>
78+ RenewTime: Thu, 17 Feb 2022 17:13:09 -0500
79+ Conditions:
80+ Type Status LastHeartbeatTime LastTransitionTime Reason Message
81+ ---- ------ ----------------- ------------------ ------ -------
82+ NetworkUnavailable False Thu, 17 Feb 2022 17:09:13 -0500 Thu, 17 Feb 2022 17:09:13 -0500 WeaveIsUp Weave pod has set this
83+ MemoryPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
84+ DiskPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
85+ PIDPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
86+ Ready Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
87+ Addresses:
88+ InternalIP: 192.168.0.113
89+ Hostname: kube-worker-1
90+ Capacity:
91+ cpu: 2
92+ ephemeral-storage: 15372232Ki
93+ hugepages-2Mi: 0
94+ memory: 2025188Ki
95+ pods: 110
96+ Allocatable:
97+ cpu: 2
98+ ephemeral-storage: 14167048988
99+ hugepages-2Mi: 0
100+ memory: 1922788Ki
101+ pods: 110
102+ System Info:
103+ Machine ID: 9384e2927f544209b5d7b67474bbf92b
104+ System UUID: aa829ca9-73d7-064d-9019-df07404ad448
105+ Boot ID: 5a295a03-aaca-4340-af20-1327fa5dab5c
106+ Kernel Version: 5.13.0-28-generic
107+ OS Image: Ubuntu 21.10
108+ Operating System: linux
109+ Architecture: amd64
110+ Container Runtime Version: containerd://1.5.9
111+ Kubelet Version: v1.23.3
112+ Kube-Proxy Version: v1.23.3
113+ Non-terminated Pods: (4 in total)
114+ Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
115+ --------- ---- ------------ ---------- --------------- ------------- ---
116+ default nginx-deployment-67d4bdd6f5-cx2nz 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
117+ default nginx-deployment-67d4bdd6f5-w6kd7 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
118+ kube-system kube-proxy-dnxbz 0 (0%) 0 (0%) 0 (0%) 0 (0%) 28m
119+ kube-system weave-net-gjxxp 100m (5%) 0 (0%) 200Mi (10%) 0 (0%) 28m
120+ Allocated resources:
121+ (Total limits may be over 100 percent, i.e., overcommitted.)
122+ Resource Requests Limits
123+ -------- -------- ------
124+ cpu 1100m (55%) 1 (50%)
125+ memory 456Mi (24%) 256Mi (13%)
126+ ephemeral-storage 0 (0%) 0 (0%)
127+ hugepages-2Mi 0 (0%) 0 (0%)
128+ Events:
129+ ...
130+ ```
131+
132+ ``` shell
133+ kubectl get node kube-worker-1 -o yaml
134+ ```
135+
136+ ``` yaml
137+ apiVersion : v1
138+ kind : Node
139+ metadata :
140+ annotations :
141+ kubeadm.alpha.kubernetes.io/cri-socket : /run/containerd/containerd.sock
142+ node.alpha.kubernetes.io/ttl : " 0"
143+ volumes.kubernetes.io/controller-managed-attach-detach : " true"
144+ creationTimestamp : " 2022-02-17T21:46:30Z"
145+ labels :
146+ beta.kubernetes.io/arch : amd64
147+ beta.kubernetes.io/os : linux
148+ kubernetes.io/arch : amd64
149+ kubernetes.io/hostname : kube-worker-1
150+ kubernetes.io/os : linux
151+ name : kube-worker-1
152+ resourceVersion : " 4026"
153+ uid : 98efe7cb-2978-4a0b-842a-1a7bf12c05f8
154+ spec : {}
155+ status :
156+ addresses :
157+ - address : 192.168.0.113
158+ type : InternalIP
159+ - address : kube-worker-1
160+ type : Hostname
161+ allocatable :
162+ cpu : " 2"
163+ ephemeral-storage : " 14167048988"
164+ hugepages-2Mi : " 0"
165+ memory : 1922788Ki
166+ pods : " 110"
167+ capacity :
168+ cpu : " 2"
169+ ephemeral-storage : 15372232Ki
170+ hugepages-2Mi : " 0"
171+ memory : 2025188Ki
172+ pods : " 110"
173+ conditions :
174+ - lastHeartbeatTime : " 2022-02-17T22:20:32Z"
175+ lastTransitionTime : " 2022-02-17T22:20:32Z"
176+ message : Weave pod has set this
177+ reason : WeaveIsUp
178+ status : " False"
179+ type : NetworkUnavailable
180+ - lastHeartbeatTime : " 2022-02-17T22:20:15Z"
181+ lastTransitionTime : " 2022-02-17T22:13:25Z"
182+ message : kubelet has sufficient memory available
183+ reason : KubeletHasSufficientMemory
184+ status : " False"
185+ type : MemoryPressure
186+ - lastHeartbeatTime : " 2022-02-17T22:20:15Z"
187+ lastTransitionTime : " 2022-02-17T22:13:25Z"
188+ message : kubelet has no disk pressure
189+ reason : KubeletHasNoDiskPressure
190+ status : " False"
191+ type : DiskPressure
192+ - lastHeartbeatTime : " 2022-02-17T22:20:15Z"
193+ lastTransitionTime : " 2022-02-17T22:13:25Z"
194+ message : kubelet has sufficient PID available
195+ reason : KubeletHasSufficientPID
196+ status : " False"
197+ type : PIDPressure
198+ - lastHeartbeatTime : " 2022-02-17T22:20:15Z"
199+ lastTransitionTime : " 2022-02-17T22:15:15Z"
200+ message : kubelet is posting ready status. AppArmor enabled
201+ reason : KubeletReady
202+ status : " True"
203+ type : Ready
204+ daemonEndpoints :
205+ kubeletEndpoint :
206+ Port : 10250
207+ nodeInfo :
208+ architecture : amd64
209+ bootID : 22333234-7a6b-44d4-9ce1-67e31dc7e369
210+ containerRuntimeVersion : containerd://1.5.9
211+ kernelVersion : 5.13.0-28-generic
212+ kubeProxyVersion : v1.23.3
213+ kubeletVersion : v1.23.3
214+ machineID : 9384e2927f544209b5d7b67474bbf92b
215+ operatingSystem : linux
216+ osImage : Ubuntu 21.10
217+ systemUUID : aa829ca9-73d7-064d-9019-df07404ad448
218+ ` ` `
219+
31220## ログの確認
32221
33222今のところ、クラスターをより深く掘り下げるには、関連するマシンにログインする必要があります。
34223以下は、関連するログファイルの場所です。
35- (systemdベースのシステムでは、代わりに ` journalctl ` を使う必要があるかもしれないことに注意してください)
224+ (systemdベースのシステムでは、代わりに` journalctl`を使う必要があるかもしれないことに注意してください)
36225
37- ### マスターノード
226+ # ## コントロールプレーンノード
38227
39- * ` /var/log/kube-apiserver.log ` - APIの提供を担当するAPIサーバーのログ
40- * ` /var/log/kube-scheduler.log ` - スケジューリング決定責任者であるスケジューラーのログ
41- * ` /var/log/kube-controller-manager.log ` - レプリケーションコントローラーを管理するコントローラーのログ
228+ * `/var/log/kube-apiserver.log` - APIの提供を担当するAPIサーバーのログ
229+ * `/var/log/kube-scheduler.log` - スケジューリング決定責任者であるスケジューラーのログ
230+ * `/var/log/kube-controller-manager.log` - スケジューリングを除く、ほとんどのKubernetes組み込みの{{<glossary_tooltip text="コントローラー" term_id="controller">}}を実行するコンポーネントのログ(スケジューリングはkube-schedulerが担当します)
42231
43232# ## ワーカーノード
44233
45- * ` /var/log/kubelet.log ` - ノード上でコンテナの実行を担当するKubeletのログ
46- * ` /var/log/kube-proxy.log ` - サービスのロードバランシングを担うKube Proxyのログ
234+ * `/var/log/kubelet.log` - ノード上でコンテナの実行を担当するKubeletのログ
235+ * `/var/log/kube-proxy.log` - サービスのロードバランシングを担うKube Proxyのログ
47236
48237# # クラスター障害モードの一般的な概要
49238
50239これは、問題が発生する可能性のある事柄と、問題を軽減するためにクラスターのセットアップを調整する方法の不完全なリストです。
51240
52241# ## 根本的な原因
53242
54- - VMのシャットダウン
55- - クラスター内、またはクラスターとユーザー間のネットワークパーティション
56- - Kubernetesソフトウェアのクラッシュ
57- - データの損失や永続的ストレージ(GCE PDやAWS EBSボリュームなど)の使用不能
58- - Kubernetesソフトウェアやアプリケーションソフトウェアの設定ミスなど、オペレーターのミス
243+ - VMのシャットダウン
244+ - クラスター内、またはクラスターとユーザー間のネットワークパーティション
245+ - Kubernetesソフトウェアのクラッシュ
246+ - データの損失や永続的ストレージ(GCE PDやAWS EBSボリュームなど)の使用不能
247+ - Kubernetesソフトウェアやアプリケーションソフトウェアの設定ミスなど、オペレーターのミス
59248
60249# ## 具体的なシナリオ
61250
62- - apiserver VMのシャットダウンまたはapiserverのクラッシュ
251+ - apiserver VMのシャットダウンまたはapiserverのクラッシュ
252+ - その結果
63253 - 新しいPod、サービス、レプリケーションコントローラーの停止、更新、起動ができない
64254 - Kubernetes APIに依存していない限り、既存のPodやサービスは正常に動作し続けるはずです
65- - apiserverのバックアップストレージが失われた
255+ - apiserverのバックアップストレージが失われた
256+ - その結果
66257 - apiserverが立ち上がらない
67- - kubeletsは到達できなくなりますが 、同じPodを実行し、同じサービスのプロキシを提供し続けます
258+ - kubeletは到達できなくなりますが 、同じPodを実行し、同じサービスのプロキシを提供し続けます
68259 - apiserverを再起動する前に、手動でapiserverの状態を回復または再現する必要がある
69- - サポートサービス(ノードコントローラー、レプリケーションコントローラーマネージャー、スケジューラーなど)VMのシャットダウンまたはクラッシュ
70- - 現在、これらはapiserverとコロケーションしており、使用できない場合はapiserverと同様の影響があります
71- - 将来的には、これらも複製されるようになり、同じ場所に配置されない可能性があります
72- - 独自の永続的な状態を持っていない。
73-
74- - 個別ノード(VMまたは物理マシン)のシャットダウン
260+ - サポートサービス(ノードコントローラー、レプリケーションコントローラーマネージャー、スケジューラーなど)VMのシャットダウンまたはクラッシュ
261+ - 現在、これらはapiserverとコロケーションしており、使用できない場合はapiserverと同様の影響があります
262+ - 将来的には、これらも複製されるようになり、同じ場所に配置されない可能性があります
263+ - 独自の永続的な状態を持っていない
264+ - 個別ノード(VMまたは物理マシン)のシャットダウン
265+ - その結果
75266 - そのノード上のPodの実行を停止
76- - ネットワークパーティション
267+ - ネットワークパーティション
268+ - その結果
77269 - パーティションAはパーティションBのノードがダウンしていると考え、パーティションBはapiserverがダウンしていると考えています。(マスターVMがパーティションAで終了したと仮定)
78- - Kubeletソフトウェア障害
270+ - Kubeletソフトウェア障害
271+ - その結果
79272 - クラッシュしたkubeletがノード上で新しいPodを起動できない
80273 - kubeletがPodを削除するかどうか
81274 - ノードが不健全と判定される
82275 - レプリケーションコントローラーが別の場所で新しいPodを起動する
83- - クラスターオペレーターエラー
276+ - クラスターオペレーターエラー
277+ - その結果
84278 - PodやServiceなどの損失
85279 - apiserverのバックエンドストレージの紛失
86280 - ユーザーがAPIを読めなくなる
@@ -99,10 +293,10 @@ kubectl cluster-info dump
99293 - 異常 : コントロールプレーンノードのシャットダウンまたはコントロールプレーンコンポーネント(スケジューラー、APIサーバー、コントローラーマネージャー)のクラッシュ
100294 - 1つ以上のノードまたはコンポーネントの同時故障に耐えることができる
101295 - 異常 : APIサーバーのバックアップストレージ(etcdのデータディレクトリーなど)が消失
102- - HA(高可用性) etcdの構成を想定しています
296+ - HA(高可用性)etcdの構成を想定しています
103297
104298- 対処法 : apiserver PDs/EBS-volumesを定期的にスナップショットする
105- - 異常: Apiserver のバックエンドストレージが失われる
299+ - 異常 : Apiserverのバックエンドストレージが失われる
106300 - 異常 : 操作ミスが発生する場合がある
107301 - 異常 : Kubernetesのソフトウェアに障害が発生する場合がある
108302
@@ -113,3 +307,13 @@ kubectl cluster-info dump
113307- 対処法 : 予期せぬ再起動に耐えられるように設計されたアプリケーション(コンテナ)
114308 - 異常 : ノードのシャットダウン
115309 - 異常 : Kubeletソフトウェア障害
310+
311+ # # {{% heading "whatsnext" %}}
312+
313+ * [リソースメトリクスパイプライン](/ja/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/)で利用可能なメトリクスについて学ぶ
314+ * [リソース使用状況の監視](/ja/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)に役立つ追加ツールを探す
315+ * Node Problem Detectorを使用して[ノードの健康状態を監視する](/ja/docs/tasks/debug/debug-cluster/monitor-node-health/)
316+ * `kubectl debug node`を使用して[Kubernetesノードをデバッグする](/docs/tasks/debug/debug-cluster/kubectl-node-debug)
317+ * `crictl`を使用して[Kubernetesノードをデバッグする](/ja/docs/tasks/debug/debug-cluster/crictl/)
318+ * [Kubernetesの監査](/ja/docs/tasks/debug/debug-cluster/audit/)に関する詳細な情報を得る
319+ * `telepresence`を使用して[ローカルでサービスを開発・デバッグする](/ja/docs/tasks/debug/debug-cluster/local-debugging/)
0 commit comments