手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes 1つのPod内で複数のCentOSコンテナ

目次に戻る

概要

1つのPod内で複数のコンテナを実行します。本稿ではコンテナイメージにCentOSを使用します。特に正式な名称ではないと思いますが、「Multi Container Pod」で検索すると目的の情報に辿り着きやすいかもしれません。

手順

Podの作成

Manifestの作成

Manifestを作成します。Multi Container Podの場合、containers内の配列に同じように別の名前で追加するだけです。

root@k8s-01:~# vim /root/k8s/yaml/centos-mc.yaml

apiVersion: v1
kind: Pod
metadata:
  name: centos-mc-pod
spec:
  containers:
  - name: centos1
    image: centos
    command:
    - "/sbin/init"
  - name: centos2
    image: centos
    command:
    - "/sbin/init"

Manifestの実行

ManifestからPodを作成します。

root@k8s-01:~# kubectl create -f /root/k8s/yaml/centos-mc.yaml

pod/centos-mc-pod created

Podのステータス確認

Podのステータスを確認します。Multi Container Podで起動することで気づきましたが、READYの数はコンテナの数でした。

root@k8s-01:~# kubectl get pod

NAME            READY   STATUS    RESTARTS      AGE
centos-mc-pod   2/2     Running   0             28s

コンテナ(≠Pod)のコマンドを実行

Podを指定して/bin/bashを起動

勘違いしている人をたまに見かけますが、kubectl exec -itはPodではなく、Pod内のコンテナのコマンドを実行しています。本稿のように複数のコンテナを起動させると分かりますが、”Defaulted container “centos1” out of: centos1, centos2″の通り、複数のコンテナが存在する為、コンテナを指定しなければデフォルトのコンテナに対してexecしています。

root@k8s-01:~# kubectl exec -it centos-mc-pod -- /bin/bash

Defaulted container "centos1" out of: centos1, centos2
[root@centos-mc-pod /]# ls

execでコンテナを指定

-cオプションでexecの対象コンテナを指定しています。下記の通り、execはPodではなく各コンテナ内のコマンドを実行しています。Podmanでも同じです。Kubernetesの場合、Pod作成時に必ずコンテナを含める必要があり、kubectl execではコンテナを意識しなくても実行でき、1Pod/1Containerで説明しているサイトが多い為、分かりづらい状態になっていると思われます。そもそも1Pod/1ContainerだけだったらPodの意味があまりないですね。

root@k8s-01:~# kubectl exec -it centos-mc-pod -c centos1 -- /bin/bash
[root@centos-mc-pod /]# echo centos1 > test.txt
[root@centos-mc-pod /]# exit
root@k8s-01:~# kubectl exec -it centos-mc-pod -c centos1 -- cat test.txt

centos1

root@k8s-01:~# kubectl exec -it centos-mc-pod -c centos2 -- /bin/bash
[root@centos-mc-pod /]# echo centos2 > test.txt
[root@centos-mc-pod /]# exit
root@k8s-01:~# kubectl exec -it centos-mc-pod -c centos2 -- cat test.txt

centos2

root@k8s-01:~# kubectl exec -it centos-mc-pod -- cat test.txt

Defaulted container "centos1" out of: centos1, centos2
centos1

※なぜか「kubectl exec -it centos-mc-pod -c centos1 — /bin/bash ‘echo “centos1” > test.txt’」は失敗します。

目次に戻る

Kubernetes 1つのPod内で複数のCentOSコンテナ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る