【kubectl】kubectl-pod-inspectでPodの情報を取得

2023.10.10
2024.03.24
Kubernetes
kubectl

はじめに

kubectl-pod-inspect について紹介していきます。

kubectl-pod-inspect

kubectl-pod-inspect は、kubectl describeなどで取得できる Pod に含まれるコンテナを情報をわかりやすく表示してくれる kubectl プラグインです。

表示できる内容としては下記になります。

  • Pod に含まれるコンテナのステータスと使っているイメージ
  • Pod の起動に失敗した時のステータス
  • Pod のイベント
  • READY でないコンテナのログ

インストール

krew を使って、下記のコマンドでインストールができます。

1kubectl krew install pod-inspect

krew については、下記を参考にしてください。

【Kubernetes】Krewでkubectlのプラグインを管理する

【Kubernetes】Krewでkubectlのプラグインを管理する

はじめに kubectlのプラグインを管理できるKrewについて紹介していきます。 Krewと

使い方

基本的には、下記で実行できます。

1kubectl pod-inspect {pod name}

使いそうなオプションとしては、下記があります。

  • --max-num-events-e): Pod のイベントの表示数
  • --max-num-log-lines-l): READYでないコンテナのログの表示数

下記のマニフェストを使って、出力を見てみます。

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: sample-pod
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: sample-pod
10  template:
11    metadata:
12      labels:
13        app: sample-pod
14    spec:
15      containers:
16        - name: bb1
17          image: busybox:1.34-glibc
18          command:
19            - sleep
20            - "99999"
21        - name: bb2
22          image: busybox:1.35-muslaaaa
23          command:
24            - sleep
25            - "99999"
26        - name: app
27          image: wonwoo/spring-boot-docker-postgresql

下記が出力結果になります。

1❯ kpi sample-pod-5f77566dd-9lwsp -l 15
2Pod:  default / sample-pod-5f77566dd-9lwsp
3Node: docker-desktop
4
5Containers:
6
7  Type  Name  State                 RC  Ready  Image
8  C     app   W (CrashLoopBackOff)   2  ✖      wonwoo/spring-boot-docker-postgresql
9                                               back-off 20s restarting failed container=app pod=sample-pod-5f77566dd-9lwsp_default(68186983-292a-48a8-8f6a-63dad04d08ae)
10                                               ⚠️  Last Terminated: Completed (0), 2023-10-10 21:17:03 +0900 JST
11  C     bb1   R                      0  ✔      busybox:1.34-glibc
12  C     bb2   W (ImagePullBackOff)   0  ✖      busybox:1.35-muslaaaa
13                                               Back-off pulling image "busybox:1.35-muslaaaa"
14
15Failed Pod Conditions:
16
17  Condition        Reason              Message
18  Ready            ContainersNotReady  containers with unready status: [bb2 app]
19  ContainersReady  ContainersNotReady  containers with unready status: [bb2 app]
20
21Last 10 pod events:
22
23  Last Seen                      Type     Reason   Message
24  2023-10-10 21:15:11 +0900 JST  Normal   Pulling  Pulling image "busybox:1.35-muslaaaa"
25  2023-10-10 21:15:14 +0900 JST  Warning  Failed   Failed to pull image "busybox:1.35-muslaaaa": rpc error: code = Unknown desc = Error response from daemon: manifest for busybox:1.35-muslaaaa not found: manifest unknown: manifest unknown
26  2023-10-10 21:15:14 +0900 JST  Warning  Failed   Error: ErrImagePull
27  2023-10-10 21:15:30 +0900 JST  Normal   Pulling  Pulling image "wonwoo/spring-boot-docker-postgresql"
28  2023-10-10 21:14:57 +0900 JST  Normal   Pulled   Successfully pulled image "wonwoo/spring-boot-docker-postgresql" in 7.339885137s
29  2023-10-10 21:15:33 +0900 JST  Normal   Created  Created container app
30  2023-10-10 21:15:33 +0900 JST  Normal   Started  Started container app
31  2023-10-10 21:15:30 +0900 JST  Normal   BackOff  Back-off pulling image "busybox:1.35-muslaaaa"
32  2023-10-10 21:15:30 +0900 JST  Warning  Failed   Error: ImagePullBackOff
33  2023-10-10 21:15:33 +0900 JST  Normal   Pulled   Successfully pulled image "wonwoo/spring-boot-docker-postgresql" in 2.676377884s
34
35Container app logs (last 15 lines):
36
37        ... 30 more
38Caused by: java.sql.SQLException: Driver:org.postgresql.Driver@247737cc returned null for URL:jdbc:postgresql://${POSTGRES_PORT_5432_TCP_ADDR}:${POSTGRES_PORT_5432_TCP_PORT}/docker
39        at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:326)
40        at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
41        at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:708)
42        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:642)
43        at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:464)
44        at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:141)
45        at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
46        at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
47        at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
48        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
49        at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
50        at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
51        ... 35 more

各コンテナの状態と使っているイメージ、コンテナが READY でない場合はその理由などがわかりやすく表示されます。また、起動に失敗して READY になっていないコンテナについては、ログも表示されているので Pod のエラー調査に使いやすそうです。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee