@@ -9,14 +9,18 @@ no_list: true
9
9
10
10
このドキュメントはクラスターのトラブルシューティングに関するもので、あなたが経験している問題の根本原因として、アプリケーションをすでに除外していることを前提としています。
11
11
アプリケーションのデバッグのコツは、[ アプリケーションのトラブルシューティングガイド] ( /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/ ) を参照してください。
13
15
14
16
<!-- body -->
15
17
16
18
## クラスターのリストアップ
17
19
18
20
クラスターで最初にデバッグするのは、ノードがすべて正しく登録されているかどうかです。
19
21
22
+ 以下を実行します。
23
+
20
24
``` shell
21
25
kubectl get nodes
22
26
```
@@ -28,59 +32,249 @@ kubectl get nodes
28
32
``` shell
29
33
kubectl cluster-info dump
30
34
```
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
+
31
220
## ログの確認
32
221
33
222
今のところ、クラスターをより深く掘り下げるには、関連するマシンにログインする必要があります。
34
223
以下は、関連するログファイルの場所です。
35
- (systemdベースのシステムでは、代わりに ` journalctl ` を使う必要があるかもしれないことに注意してください)
224
+ (systemdベースのシステムでは、代わりに` journalctl`を使う必要があるかもしれないことに注意してください)
36
225
37
- ### マスターノード
226
+ # ## コントロールプレーンノード
38
227
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が担当します)
42
231
43
232
# ## ワーカーノード
44
233
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のログ
47
236
48
237
# # クラスター障害モードの一般的な概要
49
238
50
239
これは、問題が発生する可能性のある事柄と、問題を軽減するためにクラスターのセットアップを調整する方法の不完全なリストです。
51
240
52
241
# ## 根本的な原因
53
242
54
- - VMのシャットダウン
55
- - クラスター内、またはクラスターとユーザー間のネットワークパーティション
56
- - Kubernetesソフトウェアのクラッシュ
57
- - データの損失や永続的ストレージ(GCE PDやAWS EBSボリュームなど)の使用不能
58
- - Kubernetesソフトウェアやアプリケーションソフトウェアの設定ミスなど、オペレーターのミス
243
+ - VMのシャットダウン
244
+ - クラスター内、またはクラスターとユーザー間のネットワークパーティション
245
+ - Kubernetesソフトウェアのクラッシュ
246
+ - データの損失や永続的ストレージ(GCE PDやAWS EBSボリュームなど)の使用不能
247
+ - Kubernetesソフトウェアやアプリケーションソフトウェアの設定ミスなど、オペレーターのミス
59
248
60
249
# ## 具体的なシナリオ
61
250
62
- - apiserver VMのシャットダウンまたはapiserverのクラッシュ
251
+ - apiserver VMのシャットダウンまたはapiserverのクラッシュ
252
+ - その結果
63
253
- 新しいPod、サービス、レプリケーションコントローラーの停止、更新、起動ができない
64
254
- Kubernetes APIに依存していない限り、既存のPodやサービスは正常に動作し続けるはずです
65
- - apiserverのバックアップストレージが失われた
255
+ - apiserverのバックアップストレージが失われた
256
+ - その結果
66
257
- apiserverが立ち上がらない
67
- - kubeletsは到達できなくなりますが 、同じPodを実行し、同じサービスのプロキシを提供し続けます
258
+ - kubeletは到達できなくなりますが 、同じPodを実行し、同じサービスのプロキシを提供し続けます
68
259
- apiserverを再起動する前に、手動でapiserverの状態を回復または再現する必要がある
69
- - サポートサービス(ノードコントローラー、レプリケーションコントローラーマネージャー、スケジューラーなど)VMのシャットダウンまたはクラッシュ
70
- - 現在、これらはapiserverとコロケーションしており、使用できない場合はapiserverと同様の影響があります
71
- - 将来的には、これらも複製されるようになり、同じ場所に配置されない可能性があります
72
- - 独自の永続的な状態を持っていない。
73
-
74
- - 個別ノード(VMまたは物理マシン)のシャットダウン
260
+ - サポートサービス(ノードコントローラー、レプリケーションコントローラーマネージャー、スケジューラーなど)VMのシャットダウンまたはクラッシュ
261
+ - 現在、これらはapiserverとコロケーションしており、使用できない場合はapiserverと同様の影響があります
262
+ - 将来的には、これらも複製されるようになり、同じ場所に配置されない可能性があります
263
+ - 独自の永続的な状態を持っていない
264
+ - 個別ノード(VMまたは物理マシン)のシャットダウン
265
+ - その結果
75
266
- そのノード上のPodの実行を停止
76
- - ネットワークパーティション
267
+ - ネットワークパーティション
268
+ - その結果
77
269
- パーティションAはパーティションBのノードがダウンしていると考え、パーティションBはapiserverがダウンしていると考えています。(マスターVMがパーティションAで終了したと仮定)
78
- - Kubeletソフトウェア障害
270
+ - Kubeletソフトウェア障害
271
+ - その結果
79
272
- クラッシュしたkubeletがノード上で新しいPodを起動できない
80
273
- kubeletがPodを削除するかどうか
81
274
- ノードが不健全と判定される
82
275
- レプリケーションコントローラーが別の場所で新しいPodを起動する
83
- - クラスターオペレーターエラー
276
+ - クラスターオペレーターエラー
277
+ - その結果
84
278
- PodやServiceなどの損失
85
279
- apiserverのバックエンドストレージの紛失
86
280
- ユーザーがAPIを読めなくなる
@@ -99,10 +293,10 @@ kubectl cluster-info dump
99
293
- 異常 : コントロールプレーンノードのシャットダウンまたはコントロールプレーンコンポーネント(スケジューラー、APIサーバー、コントローラーマネージャー)のクラッシュ
100
294
- 1つ以上のノードまたはコンポーネントの同時故障に耐えることができる
101
295
- 異常 : APIサーバーのバックアップストレージ(etcdのデータディレクトリーなど)が消失
102
- - HA(高可用性) etcdの構成を想定しています
296
+ - HA(高可用性)etcdの構成を想定しています
103
297
104
298
- 対処法 : apiserver PDs/EBS-volumesを定期的にスナップショットする
105
- - 異常: Apiserver のバックエンドストレージが失われる
299
+ - 異常 : Apiserverのバックエンドストレージが失われる
106
300
- 異常 : 操作ミスが発生する場合がある
107
301
- 異常 : Kubernetesのソフトウェアに障害が発生する場合がある
108
302
@@ -113,3 +307,13 @@ kubectl cluster-info dump
113
307
- 対処法 : 予期せぬ再起動に耐えられるように設計されたアプリケーション(コンテナ)
114
308
- 異常 : ノードのシャットダウン
115
309
- 異常 : 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