【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

KubernetesのPod内で複数のコンテナが稼働している場合にkubectl execでログインする方法

インフラエンジニアの寺岡です。
今回はKubernetes関連のお話になります。

以下のURLにも記載されていますが
複数のコンテナが稼働しているPodに対してkubectl execを実行し
任意のコンテナに対してログインする方法をご紹介します。

https://kubernetes.io/ja/docs/tasks/debug-application-cluster/get-shell-running-container/

Podを起動する

まずは以下のマニフェスト通りのPodを立ち上げてみます。
デプロイメントコントローラを利用してNginxコンテナが稼働するPodを起動するシンプルなものです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-web
  namespace: default
spec:
  selector:
    matchLabels:
      app: example-web
  replicas: 1
  template:
    metadata:
      labels:
        app: example-web
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80

マニフェストを反映します。

$ Kubectl apply -f deployment_example_web.yaml

Podが立ち上がったか確認します。

$ kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
example-web-59fccdb6d4-slrkv   1/1     Running   0          13s

立ち上がりましたね。
このPod内で起動しているコンテナにログインする場合は

$ kubectl exec -it example-web-59fccdb6d4-slrkv bash
root@example-web-59fccdb6d4-slrkv:/# 

とすればログインできますね。
では次に少しマニフェストファイルを編集します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-web
  namespace: default
spec:
  selector:
    matchLabels:
      app: example-web
  replicas: 1
  template:
    metadata:
      labels:
        app: example-web
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
      - name: php-fpm
        image: php:7.4-fpm
        imagePullPolicy: Always
        ports:
        - containerPort: 9000

PHP-FPMのコンテナも追加しました。
反映するコマンドは先ほどと同じなので省略しますが
Podを起動するとREADYの部分が2/2になります。

$ kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
example-web-85cd8dbd8d-24rx4   2/2     Running   0          69s

先ほどと同じkubectl execを実行してみます。

$ kubectl exec -it example-web-85cd8dbd8d-24rx4 bash
Defaulting container name to nginx.
Use 'kubectl describe pod/example-web-85cd8dbd8d-24rx4 -n default' to see all of the containers in this pod.

何やらメッセージが表示されました。
「デフォルトはnginxという名前のコンテナだから全てのコンテナの情報はkubectl describeで確認してね」という意味です。
つまり、PHP-FPMのコンテナにログインしたい場合は上記のコマンドは利用できません。
以下のように--containerオプションを利用することでログインできます。

$ kubectl exec -it example-web-85cd8dbd8d-24rx4 --container php-fpm bash
root@example-web-85cd8dbd8d-24rx4:/var/www/html# 

ログインできました!

まとめ

当たり前と言えばその通りですが備忘録として残しておきます。
Kubernetesもっと勉強しよ。。。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
4
読み込み中...
4 票, 平均: 1.00 / 14
9,532
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

寺岡佑樹

2016年ビヨンド入社、現在6年目のインフラエンジニア
MSPの中の人として障害対応時のトラブルシューティングを行いながら
AWSなどのパブリッククラウドを用いたインフラの設計/構築も行っている。
最近はDockerやKubernetesなどのコンテナ基盤の構築や
運用自動化の一環としてTerraformやPackerなどのHashicorpツールを扱うことが多く
外部の勉強会やセミナーで登壇するEvangelistの役割も担っている。

・GitHub
https://github.com/nezumisannn

・登壇経歴
https://github.com/nezumisannn/my-profile

・発表資料(SpeakerDeck)
https://speakerdeck.com/nezumisannn

・所有資格
AWS Certified Solutions Architect - Associate
Google Cloud Professional Cloud Architect