1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kubernetes初心者がトラブルシューティング時に打つコマンド

Last updated at Posted at 2022-01-15

はじめに

  • Kubernetesを使ってアプリケーションをデプロイする中で問題が起きた際
    トラブルシューティングの最初の段階でよく打つコマンドをまとめました
    Kubernetes初学者の役に立てばと思います

コマンド

・ kubectl get

リソース全体のサマリを確認する

  • コマンド内容
$ kubectl get [リソース種別] -n [namespace名]

Kubernetesではnamespaceを使ってクラスタ内で環境を分離する事ができるが
namespaceを-nで忘れず指定すること
(指定がないと'default'のnamespaceとなる)

実行例①(podの確認)

  • コマンド例
$ kubectl get pod -n test
  • 出力例
NAME                         READY   STATUS    RESTARTS   AGE
hello-app-54d4c4c96f-n6kpk   1/1     Running   0          16s

実行例②(serviceの確認)

  • コマンド例
$ kubectl get service -n test
または
$ kubectl get svc -n test
  • 出力例
NAME                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
hello-app-service   ClusterIP   0.0.0.0       <none>        80/TCP    11s

・ kubectl get -o yaml

先ほど確認したサマリから特定のリソースの名前を指定してyaml形式で詳細を確認する

  • コマンド内容
$ kubectl get [リソース種別] [リソース名] -n [namespace名] -o yaml

実行例

  • コマンド例
$ kubectl get pod hello-app-54d4c4c96f-n6kpk -n test -o yaml
  • 出力例
apiVersion: v1
kind: Pod
metadata:
  generateName: hello-app-54d4c4c96f-
  labels:
    app: hello-app
    pod-template-hash: 54d4c4c96f
  name: hello-app-54d4c4c96f-n6kpk
  namespace: test
...
spec:
  containers:
  - image: xxx/hello-repo/hello-app:v1
    imagePullPolicy: IfNotPresent
    name: hello-app
...
status:
  conditions:
  ...
  - lastProbeTime: null
    lastTransitionTime: "xxx"
    message: 'containers with unready status: [hello-app]'
    reason: ContainersNotReady
    status: "False"
    type: ContainersReady
...
  containerStatuses:
  - image: xxx/hello-repo/hello-app:v1
    imageID: ""
    lastState: {}
    name: hello-app
    ready: false
    restartCount: 0
    started: false
    state:
      waiting:
        message: Back-off pulling image "xxx/hello-repo/hello-app:v1"
        reason: ImagePullBackOff

statusのmessageやreasonを確認したりする
今回はイメージが取得できないImagePullBackOffが出ているのでイメージ名の指定ミス

・ kubectl describe

先ほどのkubectl get -o yamlと同じで特定のリソースの名前を指定して詳細を確認する
情報がフィルタされていて見やすく、関連したEventも表示してくれる
ただし情報がフィルタされているので、私は両方使います

  • コマンド内容
$ kubectl describe [リソース種別] [リソース名] -n [namespace名]

実行例

  • コマンド例
$ kubectl describe pod hello-app-6687b788d-dvff8 -n test
  • 出力例
Name:         hello-app-6687b788d-dvff8
Namespace:    test
Priority:     0
Node:         xxx
Start Time:   xxx
Labels:       app=hello-app
              pod-template-hash=6687b788d
...
Containers:
  hello-app:
    Container ID:
    Image:          xxx/hello-repo/hello-app:v1
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
...
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
...
Events:
  Type     Reason     Age                     From               Message
  ----     ------     ----                    ----               -------
  Normal   Scheduled  7m20s                   default-scheduler  Successfully assigned test/hello-app-6687b788d-dvff8 to xxx
  Normal   Pulling    5m52s (x4 over 7m20s)   kubelet            Pulling image "xxx/hello-repo/hello-app:v1"
  Warning  Failed     5m48s (x4 over 7m17s)   kubelet            Failed to pull image "xxx/hello-repo/hello-app:v1": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/xxx/hello-repo/hello-app:v1": failed to resolve reference "docker.io/xxx/hello-repo/hello-app:v1": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
  Warning  Failed     5m48s (x4 over 7m17s)   kubelet            Error: ErrImagePull
  Warning  Failed     5m22s (x6 over 7m16s)   kubelet            Error: ImagePullBackOff
  Normal   BackOff    2m17s (x19 over 7m16s)  kubelet            Back-off pulling image "xxx/hello-repo/hello-app:v1"

・ kubectl logs

podが作成された後、Readyにならない場合などにコンテナのログを確認する

  • コマンド内容
$ kubectl logs [pod名] -n [namespace名] -c [コンテナ名]

コンテナが一つ場合は-cオプションはなくてもOK

実行例

  • コマンド例
$ kubectl logs hello-app-54d4c4c96f-n6kpk -n test -c hello-app
  • 出力例
2022/xx/xx xx:xx:xx Server listening on port 8080 # コンテナのログ

・ kubectl exec

コンテナに実際に入ってみてデバッグしたい時に使う

  • コマンド内容
$ kubectl exec -it [pod名] -n [namespace名] -c [コンテナ名] -- [実行コマンド]

logs同様コンテナが一つ場合は-cオプションはなくてもOK

実行例

  • コマンド例
$ kubectl exec -it hello-app-54d4c4c96f-n6kpk -n test -c hello-app -- /bin/sh
または
$ kubectl exec -it hello-app-54d4c4c96f-n6kpk -n test -c hello-app -- /bin/bash

実行コマンドとしてshbashを指定することで、コンテナに入って操作することができる

sh,bashがないイメージにはできないので注意

・ kubectl get event

KubernetesのEventを確認する
あまり使わないが、詰まった時に見てみると意外と見落としていたエラーが見つかることがある

  • コマンド内容
$ kubectl get event --all-namespaces --sort-by=.metadata.creationTimestamp

実行例

  • 出力例
NAMESPACE   LAST SEEN   TYPE      REASON              OBJECT                           MESSAGE

test        14m         Warning   Failed              pod/hello-app-6687b788d-dvff8    Failed to pull image "xxx/hello-repo/hello-app:v1": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/xxx/hello-repo/hello-app:v1": failed to resolve reference "docker.io/xxx/hello-repo/hello-app:v1": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
test        14m         Warning   Failed              pod/hello-app-6687b788d-dvff8    Error: ErrImagePull
test        13m         Warning   Failed              pod/hello-app-6687b788d-dvff8    Error: ImagePullBackOff
test        23s         Normal    BackOff             pod/hello-app-6687b788d-dvff8    Back-off pulling image "xxx/hello-repo/hello-app:v1"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?