Kubernetesの最も小さい基本的な構成単位をPodといい、マニフェストファイルを用いると、ローカルに存在しているDockerイメージを利用してPodを作成できる。
今回は、Pythonプログラムを実行できるDockerイメージを利用して、Podを作成してみたので、その手順を共有する。
なお、Podについては、以下のサイトを参照のこと。
 https://qiita.com/MahoTakara/items/f5130bb6e9e493c46c6b
前提条件
以下の手順に従って、「Docker Desktop」インストール済のWindows端末でKubernetesを有効化済であること。

また、以下の手順に従って、Dockerイメージ「python_test 」を作成済であること。

やってみたこと
Pod作成前の状態確認
Podを作成する前の、DockerイメージとDockerコンテナの状態を確認する。その手順は、以下の通り。
1)「docker image ls」コマンドで、Dockerイメージ「python_test 」を作成済であることを確認する。
 
なお、「docker image ls (Dockerイメージ名)」コマンドを実行すると、以下のように、指定したDockerイメージのみ一覧に表示することができる。
 
このときの、Docker Desktop上でDockerイメージを確認した結果は、以下の通り。
 
2)「docker container ls -a」コマンドで、Dockerコンテナが作成されていないことを確認する。
 
このときの、Docker Desktop上でDockerコンテナを確認した結果は、以下の通り。
 
 
 

Pod作成とPythonプログラムの実行
yaml形式のマニフェストファイルを利用すると、独自Podを作成できる。Podを作成し、Pod内のPythonプログラムを実行する手順は、以下の通り。
1) マニフェストファイル(python-test-pod.yml)を以下の内容で作成する。
 
apiVersion: v1
kind: Pod
metadata:
  # Pod名
  name: python-test
spec:
  # Podに含まれるコンテナ
  containers:
      # Dockerコンテナ名
    - name: python-test
      # 利用するDockerイメージ名
      image: python_test
      # ローカルのDockerイメージを利用する旨を指定
      imagePullPolicy: Never
      # Podが終了しないよう設定
      command:
        - "sh"
        - "-c"
      args:
        - |
          while true
          do
            sleep 5
          done2) 1)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、Podを作成する。
 

3)「kubectl get pod」コマンドを実行すると、作成したPodの状態を確認できる。
 
このときの、Docker Desktop上でDockerコンテナを確認した結果は、以下の通り。
 
4)「kubectl exec -it (Pod名) — /bin/bash」コマンドを実行すると、指定したPod内に入ることができる。
 
5) 2)で起動したPod内で、Pythonプログラム「decision_tree_sample.py」を実行すると、プログラムが正常終了し、画像ファイル「decision_tree_graph.png」が出力されることが確認できる。
 
6) exitコマンドを実行すると、以下のように、2)で起動したPodから出ることができる。また、「kubectl get pod」コマンドを実行すると、Podがまだ起動中であることが確認できる。
 
7)「kubectl cp (Pod名):(ファイルパス)  ./(ローカルのファイル名)」コマンドを実行すると、以下のように、Pod内のファイルをローカルにコピーすることができる。
 
8)「kubectl delete pod/(Pod名)」コマンドを実行すると、以下のように、起動しているPodを削除することができる。
 
このときの、Docker Desktop上でDockerコンテナを確認した結果は、以下の通り。
 
要点まとめ
- Kubernetesの最も小さい基本的な構成単位をPodといい、マニフェストファイルを用いると、ローカルに存在しているDockerイメージを利用してPodを作成できる。




