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

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

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

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

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

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【CPU】AMD EPYC 技術検証(PoC)サービス

【CPU】AMD EPYC 技術検証(PoC)サービス

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【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もっと勉強しよ。。。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
3,899
facebook twitter はてなブックマーク

この記事をかいた人

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