前回は、CNCFが提供するminikubeをインストールして簡単に触ってみました。minikube上でポッドという最小実行単位を動かしながら、よく使うコマンドを確認していこうと思います。

クラスター構成の確認

minikubeが起動していなければ、下記コマンドで起動します。

$ minikube start

クラスターの情報を確認します。下記コマンドでマスターのIPアドレスとk8sの内部DNSのIPアドレスがわかります。

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.                                                       

ノードの情報を確認します。minikubeでは、クラスタを制御するマスターノード、ワーカーノード(コンテナ実行環境)は、minikubeという名前で集約されています。

$ kubectl get node                                                                     
NAME       STATUS   ROLES    AGE     VERSION
minikube   Ready    master   5d23h   v1.19.0

ポッドを動かす

ポッドとは

ポッド(Pod)は、k8sでコンテナを実行するための最小実行単位です。1つ以上のコンテナを含む1つのグループです。このグループは、「論理的なホスト」として振る舞い、同一ノードで実行されます。単一目的で設計されたコンテナを組み合わせて、利用することが多いです。同一ポッドであるという部分をもう少し掘り下げると下記のような特徴があります。

  • ポッド内部のコンテナでは、IPアドレスとポート番号を共有する。
  • ポッドを外部に公開することができる。
  • ポッド内部のコンテナ同士は、localhost(=127.0.0.1)で通信可能
  • ポッド内部のコンテナ間では、プロセス間通信(System V)、POSIX共有メモリを利用したデータ共有が可能
  • ポッド内部のコンテナは、ポッドのボリュームをコンテナからマウントして利用することができる

注意点としては、ポッド自体への操作としては、起動、削除のみ提供されています。途中でくわえられた変更については、再度起動するときには、なかったことになります。

ポッドを起動する

では、ポッドを動かしてみましょう。 k8sに関する操作を行う場合には、「kubectl」を利用します。下記例では、hello-worldコンテナを動かす例です。

$ kubectl run hello-world --image=hello-world -it --restart=Never
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

runは、実行を命令するサブコマンドです。hello-worldの部分は、オブジェクト名(=コンテナの起動単位、ポッドの名前)です。--image=hello-worldは、生成するコンテナの元イメージです。リポジトリ名は、省略可能で省略した場合は、Docker Hubからイメージを取得します。

ポッド一覧を表示する

ポッド一覧を確認するには、下記コマンドを利用します。

$ kubectl get pod
NAME          READY   STATUS      RESTARTS   AGE
hello-world   0/1     Completed   0          5m55s

ポッドのライフサイクルやステータスについては、公式サイトにまとまっているのでそちらを参照してください。

ポッドを削除する

ポッドを削除するには、下記コマンドを利用します。

$ kubectl delete pod hello-world
pod "hello-world" deleted

終了時に自動削除する

docker実行時にもあった「–rm」というオプションを利用すると終了時に自動で削除されます。

$  kubectl run hello-world --image=hello-world -it --restart=Never --rm                                            水 10/ 7 01:32:15 2020

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

pod "hello-world" deleted

$  kubectl get pod
No resources found in default namespace.

ポッドの起動、削除について確認しました。次回は、コントローラについて確認していこうと思います。