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

スポンサーリンク

はじめに

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

kubectl-pod-inspect

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

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

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

インストール

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

kubectl krew install pod-inspect

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

【Kubernetes】Krewでkubectlのプラグインを管理する
はじめに kubectlのプラグインを管理できるKrewについて紹介していきます。 Krewとは Krewは、kubectlコマンドのプラグインマネージャーになります。 kubectlのプラグインの検索やインストール、アップデートが楽にでき...

使い方

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

kubectl pod-inspect {pod name}

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

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

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-pod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-pod
  template:
    metadata:
      labels:
        app: sample-pod
    spec:
      containers:
        - name: bb1
          image: busybox:1.34-glibc
          command:
            - sleep
            - "99999"
        - name: bb2
          image: busybox:1.35-muslaaaa
          command:
            - sleep
            - "99999"
        - name: app
          image: wonwoo/spring-boot-docker-postgresql

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

❯ kpi sample-pod-5f77566dd-9lwsp -l 15
Pod:  default / sample-pod-5f77566dd-9lwsp
Node: docker-desktop

Containers:

  Type  Name  State                 RC  Ready  Image
  C     app   W (CrashLoopBackOff)   2  ✖      wonwoo/spring-boot-docker-postgresql
                                               back-off 20s restarting failed container=app pod=sample-pod-5f77566dd-9lwsp_default(68186983-292a-48a8-8f6a-63dad04d08ae)
                                               ⚠️  Last Terminated: Completed (0), 2023-10-10 21:17:03 +0900 JST
  C     bb1   R                      0  ✔      busybox:1.34-glibc
  C     bb2   W (ImagePullBackOff)   0  ✖      busybox:1.35-muslaaaa
                                               Back-off pulling image "busybox:1.35-muslaaaa"

Failed Pod Conditions:

  Condition        Reason              Message
  Ready            ContainersNotReady  containers with unready status: [bb2 app]
  ContainersReady  ContainersNotReady  containers with unready status: [bb2 app]

Last 10 pod events:

  Last Seen                      Type     Reason   Message
  2023-10-10 21:15:11 +0900 JST  Normal   Pulling  Pulling image "busybox:1.35-muslaaaa"
  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
  2023-10-10 21:15:14 +0900 JST  Warning  Failed   Error: ErrImagePull
  2023-10-10 21:15:30 +0900 JST  Normal   Pulling  Pulling image "wonwoo/spring-boot-docker-postgresql"
  2023-10-10 21:14:57 +0900 JST  Normal   Pulled   Successfully pulled image "wonwoo/spring-boot-docker-postgresql" in 7.339885137s
  2023-10-10 21:15:33 +0900 JST  Normal   Created  Created container app
  2023-10-10 21:15:33 +0900 JST  Normal   Started  Started container app
  2023-10-10 21:15:30 +0900 JST  Normal   BackOff  Back-off pulling image "busybox:1.35-muslaaaa"
  2023-10-10 21:15:30 +0900 JST  Warning  Failed   Error: ImagePullBackOff
  2023-10-10 21:15:33 +0900 JST  Normal   Pulled   Successfully pulled image "wonwoo/spring-boot-docker-postgresql" in 2.676377884s

Container app logs (last 15 lines):

        ... 30 more
Caused 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
        at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:326)
        at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:708)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:642)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:464)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:141)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
        at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
        at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
        ... 35 more

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

参考

タイトルとURLをコピーしました