Kubernetes Pods
Podとは
Pod(ポッド)はApplicationの最小実行単位であり、Kubernetesで管理の基本単位としてグループ化した仮想ホストのようなものを意味する。
つまり、Kubernetesでコンテナ、またはコンテナ群を指す名前である。単純にコンテナと考えてよい。
このPodは仮想Network Interface、同じIP、ファイルシステムを共有するため、仮想ホストのような役割を持つ。
1つまたは複数のApplication container、storage、networkなどの情報を含む。
Podの特徴
- Podにはそれぞれ固有のprivate IPが割り当てられる。
- Pod内のcontainerはPodのIPをlocalhostとして共有する。
- Podは実質的にPodを持つvirtual machineと言える。
Pod制御
このようなPodを作成し、情報を確認する方法を見ていく。
Pod起動 - kubectl run
まずPodの起動について見てみよう。次のコマンドを実行するとPodが起動する。
kubectl run –-image [イメージ名]:[タグ名] (オプション) [Pod名]
次のコマンドでWebServerであるnginxを起動してみる。
kubectl run webserver --image=nginx:1.14 --port 80
実行結果:
% kubectl run webserver --image=nginx:1.14 --port 80
pod/webserver created
kubectl runについてもdocker runと同じように、さまざまなオプションを指定できる。たとえば、-eオプションを使用して環境変数を設定できる。
その他のオプションは次のページを参照してほしい。
Pod一覧取得 - kubectl get
Pod一覧を見るには次のコマンドを実行する。
kubectl get pods
実行結果:
% kubectl get pods
NAME READY STATUS RESTARTS AGE
webserver 0/1 ContainerCreating 0 4s
作成直後に実行すると、上のように状態が作成中(ContainerCreating)というメッセージになる。
% kubectl get pods
NAME READY STATUS RESTARTS AGE
webserver 1/1 Running 0 16s
少し時間が経ってから実行すると、実行状態(Running)というメッセージになる。
Pod一覧をさらに詳しく見るには、次のコマンドを実行する。
kubectl get pods -o wide
実行結果:
% kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
webserver 0/1 Running 0 9s <none> minikube <none> <none>
Pod詳細取得 - kubectl describe
Podのメタデータを見るには、次のコマンドを実行する。
kubectl describe pod [Pod名]
実行結果はPod名、Namespace、Node、IP、Container、Eventなどの詳細情報を表示する。
Pod log確認 - kubectl logs
Podのログを見たい場合は、次のコマンドを実行する。
kubectl logs [Pod名]
実行結果:
% kubectl logs webserver
172.17.0.4 - - [08/Sep/2022:23:38:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.85.0-DEV" "-"
Pod実行結果確認 - curl
curlコマンドで接続できるか確認してみる。
curl [IP]
実行結果ではnginxのWelcomeページHTMLが表示される。
Podに入る - kubectl exec
作成したPodの中に入るには、次のコマンドを実行する。
kubectl exec -it [Pod名] [イメージ名]
Podの中に入る。
% kubectl exec webserver -it -- /bin/bash
root@webserver:/#
nginxの最初のページファイルがあるパスへ移動する。
root@webserver:/# cd /usr/share/nginx/html/
内容を確認する。
root@webserver:/usr/share/nginx/html# cat index.html
内容を修正する。
root@webserver:/usr/share/nginx/html# echo "Hello, devkuma" > index.html
修正内容が反映されたかサーバーへ接続して確認する。
$ curl 172.17.0.3
Hello, devkuma
Podでポートフォワード - kubectl port-forward
kubectl port-forward 8080:80
YAMLファイルを作成してPodを起動する
ここではPod起動をYAMLで作成し、そのYAMLを利用してPodを起動してみる。
-
コマンドを作る
まず--dry-runフラグを使って、実行されないコマンドを作ってみる。kubectl run webserver --image=nginx:1.14 --port 80 --dry-run=client--dry-runフラグを使用すると、実際には実行されず、クラスタへ送るオブジェクトを事前に確認できる。 -
YAML設定内容を確認する
kubectl run webserver --image=nginx:1.14 --port 80 --dry-run=client -o yaml実行するとPodの
apiVersion、kind、metadata、specなどを含むYAMLが出力される。 -
YAMLファイルを作る
この内容をwebserver-pod.yamlというファイル名で作成する。% kubectl run webserver --image=nginx:1.14 --port 80 --dry-run=client -o yaml > webserver-pod.yaml -
既存Podを削除する 既存の同じ名前の
webserverPodを削除する。% kubectl delete pod webserver pod "webserver" deleted -
YAMLで新しいPodを作成する YAMLファイルで新しいPodを作成する。
kubectl create -f webserver-pod.yaml正しく作成されたか確認する。
% kubectl get pods NAME READY STATUS RESTARTS AGE webserver 1/1 Running 0 12s
Podを削除 - kubectl delete
作成したPodを削除するには、次のコマンドを実行する。
kubectl delete pod [Pod名]
実行結果:
% kubectl delete pod webserver
pod "webserver" deleted
Podをデプロイする
kubectl create deployment mainui --image=httpd: --replicas=3
kubectl get deployment.apps
kubectl describe deployment.apps mainui
kubectl get pods
kubectl get pods -o wide
kubectl edit deployment.apps maini