このペヌゞに蚘茉されおいる情報は叀い可胜性がありたす

このペヌゞの曎新日は英語版よりも叀いため、蚘茉されおいる情報が叀い可胜性がありたす。最新の情報をご芧になりたい方は英語版のペヌゞをご芧ください: Troubleshooting Clusters

クラスタヌのトラブルシュヌティング

䞀般的なクラスタヌの問題をデバッグしたす。

このドキュメントはクラスタヌのトラブルシュヌティングに関するもので、あなたが経隓しおいる問題の根本原因ずしお、アプリケヌションをすでに陀倖しおいるこずを前提ずしおいたす。 アプリケヌションのデバッグのコツは、アプリケヌションのトラブルシュヌティングガむドをご芧ください。 たた、トラブルシュヌティングドキュメントにも詳しい情報がありたす。

kubectlのトラブルシュヌティングに぀いおは、kubectlのトラブルシュヌティングを参照しおください。

クラスタヌのリストアップ

クラスタヌで最初にデバッグするのは、ノヌドがすべお正しく登録されおいるかどうかです。

以䞋を実行したす。

kubectl get nodes

そしお、期埅するノヌドがすべお存圚し、それらがすべお Ready 状態であるこずを確認したす。

クラスタヌ党䜓の健党性に関する詳现な情報を埗るには、以䞋を実行したす。

kubectl cluster-info dump

䟋: ダりンあるいは到達䞍胜なノヌドのデバッグ

デバッグを行う際、ノヌドの状態を芋るこずが有甚なこずがありたす。 たずえば、そのノヌド䞊で動䜜しおいるPodが奇劙な挙動を瀺しおいる堎合や、なぜPodがそのノヌドにスケゞュヌルされないのかを知りたい堎合などです。 Podず同様に、kubectl describe nodeやkubectl get node -o yamlを䜿甚しおノヌドに関する詳现情報を取埗できたす。 䟋えば、ノヌドがダりンしおいる(ネットワヌクから切断されおいる、たたはkubeletが停止しお再起動しないなど)堎合に芋られる状況は以䞋の通りです。 ノヌドがNotReadyであるこずを瀺すむベントに泚意し、たた、Podが動䜜しおいないこずにも泚意しおください(NotReady状態が5分間続くずPodは远い出されたす)。

kubectl get nodes
NAME                     STATUS       ROLES     AGE     VERSION
kube-worker-1            NotReady     <none>    1h      v1.23.3
kubernetes-node-bols     Ready        <none>    1h      v1.23.3
kubernetes-node-st6x     Ready        <none>    1h      v1.23.3
kubernetes-node-unaj     Ready        <none>    1h      v1.23.3
kubectl describe node kube-worker-1
Name:               kube-worker-1
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=kube-worker-1
                    kubernetes.io/os=linux
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 17 Feb 2022 16:46:30 -0500
Taints:             node.kubernetes.io/unreachable:NoExecute
                    node.kubernetes.io/unreachable:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  kube-worker-1
  AcquireTime:     <unset>
  RenewTime:       Thu, 17 Feb 2022 17:13:09 -0500
Conditions:
  Type                 Status    LastHeartbeatTime                 LastTransitionTime                Reason              Message
  ----                 ------    -----------------                 ------------------                ------              -------
  NetworkUnavailable   False     Thu, 17 Feb 2022 17:09:13 -0500   Thu, 17 Feb 2022 17:09:13 -0500   WeaveIsUp           Weave pod has set this
  MemoryPressure       Unknown   Thu, 17 Feb 2022 17:12:40 -0500   Thu, 17 Feb 2022 17:13:52 -0500   NodeStatusUnknown   Kubelet stopped posting node status.
  DiskPressure         Unknown   Thu, 17 Feb 2022 17:12:40 -0500   Thu, 17 Feb 2022 17:13:52 -0500   NodeStatusUnknown   Kubelet stopped posting node status.
  PIDPressure          Unknown   Thu, 17 Feb 2022 17:12:40 -0500   Thu, 17 Feb 2022 17:13:52 -0500   NodeStatusUnknown   Kubelet stopped posting node status.
  Ready                Unknown   Thu, 17 Feb 2022 17:12:40 -0500   Thu, 17 Feb 2022 17:13:52 -0500   NodeStatusUnknown   Kubelet stopped posting node status.
Addresses:
  InternalIP:  192.168.0.113
  Hostname:    kube-worker-1
Capacity:
  cpu:                2
  ephemeral-storage:  15372232Ki
  hugepages-2Mi:      0
  memory:             2025188Ki
  pods:               110
Allocatable:
  cpu:                2
  ephemeral-storage:  14167048988
  hugepages-2Mi:      0
  memory:             1922788Ki
  pods:               110
System Info:
  Machine ID:                 9384e2927f544209b5d7b67474bbf92b
  System UUID:                aa829ca9-73d7-064d-9019-df07404ad448
  Boot ID:                    5a295a03-aaca-4340-af20-1327fa5dab5c
  Kernel Version:             5.13.0-28-generic
  OS Image:                   Ubuntu 21.10
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  containerd://1.5.9
  Kubelet Version:            v1.23.3
  Kube-Proxy Version:         v1.23.3
Non-terminated Pods:          (4 in total)
  Namespace                   Name                                 CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                                 ------------  ----------  ---------------  -------------  ---
  default                     nginx-deployment-67d4bdd6f5-cx2nz    500m (25%)    500m (25%)  128Mi (6%)       128Mi (6%)     23m
  default                     nginx-deployment-67d4bdd6f5-w6kd7    500m (25%)    500m (25%)  128Mi (6%)       128Mi (6%)     23m
  kube-system                 kube-proxy-dnxbz                     0 (0%)        0 (0%)      0 (0%)           0 (0%)         28m
  kube-system                 weave-net-gjxxp                      100m (5%)     0 (0%)      200Mi (10%)      0 (0%)         28m
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests     Limits
  --------           --------     ------
  cpu                1100m (55%)  1 (50%)
  memory             456Mi (24%)  256Mi (13%)
  ephemeral-storage  0 (0%)       0 (0%)
  hugepages-2Mi      0 (0%)       0 (0%)
Events:
...
kubectl get node kube-worker-1 -o yaml
apiVersion: v1
kind: Node
metadata:
  annotations:
    kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
    node.alpha.kubernetes.io/ttl: "0"
    volumes.kubernetes.io/controller-managed-attach-detach: "true"
  creationTimestamp: "2022-02-17T21:46:30Z"
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/os: linux
    kubernetes.io/arch: amd64
    kubernetes.io/hostname: kube-worker-1
    kubernetes.io/os: linux
  name: kube-worker-1
  resourceVersion: "4026"
  uid: 98efe7cb-2978-4a0b-842a-1a7bf12c05f8
spec: {}
status:
  addresses:
  - address: 192.168.0.113
    type: InternalIP
  - address: kube-worker-1
    type: Hostname
  allocatable:
    cpu: "2"
    ephemeral-storage: "14167048988"
    hugepages-2Mi: "0"
    memory: 1922788Ki
    pods: "110"
  capacity:
    cpu: "2"
    ephemeral-storage: 15372232Ki
    hugepages-2Mi: "0"
    memory: 2025188Ki
    pods: "110"
  conditions:
  - lastHeartbeatTime: "2022-02-17T22:20:32Z"
    lastTransitionTime: "2022-02-17T22:20:32Z"
    message: Weave pod has set this
    reason: WeaveIsUp
    status: "False"
    type: NetworkUnavailable
  - lastHeartbeatTime: "2022-02-17T22:20:15Z"
    lastTransitionTime: "2022-02-17T22:13:25Z"
    message: kubelet has sufficient memory available
    reason: KubeletHasSufficientMemory
    status: "False"
    type: MemoryPressure
  - lastHeartbeatTime: "2022-02-17T22:20:15Z"
    lastTransitionTime: "2022-02-17T22:13:25Z"
    message: kubelet has no disk pressure
    reason: KubeletHasNoDiskPressure
    status: "False"
    type: DiskPressure
  - lastHeartbeatTime: "2022-02-17T22:20:15Z"
    lastTransitionTime: "2022-02-17T22:13:25Z"
    message: kubelet has sufficient PID available
    reason: KubeletHasSufficientPID
    status: "False"
    type: PIDPressure
  - lastHeartbeatTime: "2022-02-17T22:20:15Z"
    lastTransitionTime: "2022-02-17T22:15:15Z"
    message: kubelet is posting ready status. AppArmor enabled
    reason: KubeletReady
    status: "True"
    type: Ready
  daemonEndpoints:
    kubeletEndpoint:
      Port: 10250
  nodeInfo:
    architecture: amd64
    bootID: 22333234-7a6b-44d4-9ce1-67e31dc7e369
    containerRuntimeVersion: containerd://1.5.9
    kernelVersion: 5.13.0-28-generic
    kubeProxyVersion: v1.23.3
    kubeletVersion: v1.23.3
    machineID: 9384e2927f544209b5d7b67474bbf92b
    operatingSystem: linux
    osImage: Ubuntu 21.10
    systemUUID: aa829ca9-73d7-064d-9019-df07404ad448

ログの確認

今のずころ、クラスタヌをより深く掘り䞋げるには、関連するマシンにログむンする必芁がありたす。 以䞋は、関連するログファむルの堎所です。 (systemdベヌスのシステムでは、代わりにjournalctlを䜿う必芁があるかもしれないこずに泚意しおください)

コントロヌルプレヌンノヌド

  • /var/log/kube-apiserver.log - APIの提䟛を担圓するAPIサヌバヌのログ
  • /var/log/kube-scheduler.log - スケゞュヌリング決定責任者であるスケゞュヌラヌのログ
  • /var/log/kube-controller-manager.log - スケゞュヌリングを陀く、ほずんどのKubernetes組み蟌みのコントロヌラヌを実行するコンポヌネントのログ(スケゞュヌリングはkube-schedulerが担圓したす)

ワヌカヌノヌド

  • /var/log/kubelet.log - ノヌド䞊でコンテナの実行を担圓するKubeletのログ
  • /var/log/kube-proxy.log - サヌビスのロヌドバランシングを担うKube Proxyのログ

クラスタヌ障害モヌドの䞀般的な抂芁

これは、問題が発生する可胜性のある事柄ず、問題を軜枛するためにクラスタヌのセットアップを調敎する方法の䞍完党なリストです。

根本的な原因

  • VMのシャットダりン
  • クラスタヌ内、たたはクラスタヌずナヌザヌ間のネットワヌクパヌティション
  • Kubernetes゜フトりェアのクラッシュ
  • デヌタの損倱や氞続的ストレヌゞ(GCE PDやAWS EBSボリュヌムなど)の䜿甚䞍胜
  • Kubernetes゜フトりェアやアプリケヌション゜フトりェアの蚭定ミスなど、オペレヌタヌのミス

具䜓的なシナリオ

  • apiserver VMのシャットダりンたたはapiserverのクラッシュ
    • その結果
      • 新しいPod、サヌビス、レプリケヌションコントロヌラヌの停止、曎新、起動ができない
      • Kubernetes APIに䟝存しおいない限り、既存のPodやサヌビスは正垞に動䜜し続けるはずです
  • apiserverのバックアップストレヌゞが倱われた
    • その結果
      • apiserverが立ち䞊がらない
      • kubeletは到達できなくなりたすが、同じPodを実行し、同じサヌビスのプロキシを提䟛し続けたす
      • apiserverを再起動する前に、手動でapiserverの状態を回埩たたは再珟する必芁がある
  • サポヌトサヌビス(ノヌドコントロヌラヌ、レプリケヌションコントロヌラヌマネヌゞャヌ、スケゞュヌラヌなど)VMのシャットダりンたたはクラッシュ
    • 珟圚、これらはapiserverずコロケヌションしおおり、䜿甚できない堎合はapiserverず同様の圱響がありたす
    • 将来的には、これらも耇補されるようになり、同じ堎所に配眮されない可胜性がありたす
    • 独自の氞続的な状態を持っおいない
  • 個別ノヌド(VMたたは物理マシン)のシャットダりン
    • その結果
      • そのノヌド䞊のPodの実行を停止
  • ネットワヌクパヌティション
    • その結果
      • パヌティションAはパヌティションBのノヌドがダりンしおいるず考え、パヌティションBはapiserverがダりンしおいるず考えおいたす。(マスタヌVMがパヌティションAで終了したず仮定)
  • Kubelet゜フトりェア障害
    • その結果
      • クラッシュしたkubeletがノヌド䞊で新しいPodを起動できない
      • kubeletがPodを削陀するかどうか
      • ノヌドが䞍健党ず刀定される
      • レプリケヌションコントロヌラヌが別の堎所で新しいPodを起動する
  • クラスタヌオペレヌタヌ゚ラヌ
    • その結果
      • PodやServiceなどの損倱
      • apiserverのバック゚ンドストレヌゞの玛倱
      • ナヌザヌがAPIを読めなくなる
      • その他

軜枛策

  • 察凊法: IaaSプロバむダヌの自動VM再起動機胜をIaaS VMに䜿甚する

    • ç•°åžž: Apiserver VMのシャットダりンたたはApiserverのクラッシュ
    • ç•°åžž: サポヌトサヌビスのVMシャットダりンたたはクラッシュ
  • 察凊法: IaaSプロバむダヌの信頌できるストレヌゞ(GCE PDやAWS EBSボリュヌムなど)をapiserver+etcdを䜿甚するVMに䜿甚する

    • ç•°åžž: Apiserverのバック゚ンドストレヌゞが倱われる
  • 察凊法: 高可甚性構成を䜿甚したす

    • ç•°åžž: コントロヌルプレヌンノヌドのシャットダりンたたはコントロヌルプレヌンコンポヌネント(スケゞュヌラヌ、APIサヌバヌ、コントロヌラヌマネヌゞャヌ)のクラッシュ
      • 1぀以䞊のノヌドたたはコンポヌネントの同時故障に耐えるこずができる
    • ç•°åžž: APIサヌバヌのバックアップストレヌゞ(etcdのデヌタディレクトリヌなど)が消倱
      • HA(高可甚性)etcdの構成を想定しおいたす
  • 察凊法: apiserver PDs/EBS-volumesを定期的にスナップショットする

    • ç•°åžž: Apiserverのバック゚ンドストレヌゞが倱われる
    • ç•°åžž: 操䜜ミスが発生する堎合がある
    • ç•°åžž: Kubernetesの゜フトりェアに障害が発生する堎合がある
  • 察凊法レプリケヌションコントロヌラヌずServiceをPodの前に䜿甚する

    • ç•°åžž: ノヌドのシャットダりン
    • ç•°åžž: Kubelet゜フトりェア障害
  • 察凊法: 予期せぬ再起動に耐えられるように蚭蚈されたアプリケヌション(コンテナ)

    • ç•°åžž: ノヌドのシャットダりン
    • ç•°åžž: Kubelet゜フトりェア障害

次の項目