Kubernetesでエラーが起きた時にやること

Kubernetesを触り始めて半年足らずの初心者が、それでもエラーを解決するためにやっている事を書き連ねます。一般開発者にとっては当たり前のことかもしれませんし、場合によっては間違ってるかもしれませんが、その場合は色々アドバイスを頂けると幸いです。

## コマンド・ファイルを確認
個人的な感覚として、初心者がやっちまうミスの7割はスペルミスやインデントミスです。エラーが起きたら、一旦落ち着いてファイルやコマンドのスペルミスを確認するのが先決です。私はよくスペースを入れ忘れたり、大文字と小文字を間違えたりします。
権限や所有者も確認しておきましょう。

## kubectl describeで詳細を確認
このコマンドはKubernetesの各リソースの詳細情報を見れます。例えばpodを見たいときは以下のコマンドを打ちます。
```
kubectl describe pod <pod名>
```
上記の様にリソースの種類（ここではpod）を指定してから見たいpod名を指定します。
これの一番下の項目に『event』っていうのがあります。
```
Name:             wordpress-test-6bd6455676-fwlcp
Namespace:        default
Priority:         0
Service Account:  default
Node:             node_a
Start Time:       Thu, 29 Jun 2023 04:47:23 +0000
Labels:           app=wordpress
                  pod-template-hash=6bd6455676
Annotations:      kubectl.kubernetes.io/restartedAt: 2023-06-29T04:47:23Z
Status:           Running
IP:               10.42.1.49
IPs:
  IP:           10.42.1.49
Controlled By:  ReplicaSet/wordpress-test-6bd6455676
Containers:
  wordpress-test:
    Container ID:   containerd://80762dfa108d08dd73e57541da9cc40a1d66e22b54a96dffd587e1822bdf8672
    Image:          wordpress
    Image ID:       docker.io/library/wordpress@sha256:bec49b21154d3aa3b31952c54e4871cbebc07bf98d0b78c8fd4d17c4d3456014
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 29 Jun 2023 04:47:25 +0000
    Ready:          True
    Restart Count:  0
    Environment:
      WORDPRESS_DB_HOST:      mysql-test
      WORDPRESS_DB_NAME:      wp_db
      WORDPRESS_DB_USER:      wp_user
      WORDPRESS_DB_PASSWORD:  password
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ctvdw (ro)
      /var/www/html from wordpress-storage-test (rw)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  wordpress-storage-test:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  wordpress-pvc-test
    ReadOnly:   false
  kube-api-access-ctvdw:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>
```
表示されている例では「none」になってますが、ここにそのPodに起きたことが記録されていきます。
例↓
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851811/a068da9a-f669-2707-80ba-b80cc52069e7.png)
このMessageをそのままGoogleとかで検索してみれば手掛かりは分かってきます。

## kubectl logs
describeしてもEventがnoneになっている場合があります。そういう場合はログを見るという手があります。
```
kubectl logs <pod名>
```
上記のコマンドを入力しましょう。podにしか使えませんが、describeよりも詳しい情報が載っている時があります。

## これでも解決しない場合
周りの技術者に聞いてください。身も蓋もないですが、それが一番確実な時もあります。「describeしたらこんなメッセージが出てきました！どういうことですか！？」とか聞けば快く教えてくれるかと思います。少なくとも、何も分からない状態で聞くよりかは、自分が何をやって何を試したか伝えると、聞き手も分かり易いかと思います。

以上です。