ポッドの中に複数コンテナがあった場合の確認方法

kubernetes

error: a container name must be specified for pod ~

kubectlコマンドで、コンテナのログなどを見ようとしたら、上記のようなエラーが出てしまいました。この場合はポッドの中に複数のコンテナがある状態だと予測できます。

解決方法

コンテナのログを確認します。

$ kubectl logs -f helloworld
error: a container name must be specified for pod helloworld, choose one of: [aaa bbb]

上記の状態は「aaa」コンテナか「bbb」コンテナどちらか選んでねと言われます。今回は「bbb」の方でログを読む処理をしていますので、-c オプションを付けて、以下のようにコマンドを実行します。

$ kubectl logs -f helloworld -c bbb
Hello World!!Goodbye!

エラー再現方法

以下のymlファイルでコンテナを起動してください。

(aaaコンテナでログを出力して、bbbコンテナでログを読もうとしています。)

$ vi helloworld.yml 
apiVersion: v1
kind: Pod
metadata:
  name: helloworld
spec:
  restartPolicy: OnFailure
  containers:
  - name: aaa
    image: alpine
    command: ["/bin/sh", "-c"]
    args:
    - |
      exec >> /var/tmp/test/output.log
      echo -n 'Hello World!!'
      echo -n 'Goodbye!!'
    volumeMounts:
    - name: data-vol
      mountPath: /var/tmp/test
  - name: bbb
    image: alpine
    command: ["/bin/sh"]
    args: [ "-c", "tail /var/tmp/test/output.log" ]
    volumeMounts:
    - name: data-vol
      mountPath: /var/tmp/test
  volumes:
  - name: data-vol
    emptyDir:
  terminationGracePeriodSeconds: 0

起動します。

$ kubectl apply -f helloworld.yml
pod/helloworld created

しばらく時間をおいて確認します。STATUSがCompletedなっていたらOKです。

$ kubectl get all
NAME             READY   STATUS      RESTARTS   AGE
pod/helloworld   0/2     Completed   0          15s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d2h

コンテナのログを確認します。(ここからは上記の解決方法と同じです。)

$ kubectl logs -f helloworld
error: a container name must be specified for pod helloworld, choose one of: [aaa bbb]

「aaa」か「bbb」どちらか選んでねと言われます。今回は「bbb」の方でログを読む処理をしていますので、-c オプションを付けて、以下のようにコマンドを実行します。

$ kubectl logs -f helloworld -c bbb
Hello World!!Goodbye!

以上です!

コメント

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