■ はじめに
Kubernetes の Pod(ポッド)についてまとめる。
目次
【1】Pod 【2】Pod作成方法 1)YAML を使ってPod作成 2)kubectl run を使ってPod作成 【3】Pod確認方法 1)kubectl get pod 2)kubectl get pod <PodName> 【4】Pod削除方法 1)YAML で作ったPodの削除 2)kubectl run で作ったPodの削除 【5】Hello world
【1】Pod
* 1つ以上のコンテナをグループ化した仮想ホスト * k8sの管理上の最小単位 * 仮想NICを共有(同じIP、同じファイルシステム)
イメージ
+-[Pod]---------------+ | +-----------------+ | | | Container(Nginx)| | | +-----------------+ | | +-----------------+ | | | Container(MySQL)| | | +-----------------+ | +---------------------+
【2】Pod作成方法
1)YAML を使ってPod作成
[1] YAMLファイルを作る
# demo_pod.yml # [1] どのKubenetics APIバージョンを用いるか apiVersion: v1 # [2] どの Kubenetics オブジェクトを指定するか(e.g. Pod/Development) # Pod指定 kind: Pod # [3] Kubenetics オブジェクトを一意に特定するための情報を付与 # e.g. name/UID/namespace metadata: # ★ここが、名前になる name: demo-nginx # [4] 理想状態(desired state)を指定 spec: containers: - image: nginx name: nginx
[2] kubectl createコマンドで起動する
# kubectl create -f <[1]で作ったYAML> $ kubectl create -f demo_pod.yml pod/demo-nginx created # 作成したPodを確認する $ kubectl get pod NAME READY STATUS RESTARTS AGE demo-nginx 1/1 Running 0 22s # クラスター内で利用できるすべてのリソースの完全なリストを表示 # =>「apiVersion: v1」が確認できる $ kubectl api-resources | grep pod pods po v1 true Pod ...
2)kubectl run を使ってPod作成
# Helpに載っている $ kubectl run -h Create and run a particular image in a pod. Examples: # Start a nginx pod kubectl run nginx --image=nginx ... # ★実行してみる # kubectl run <PodName> --image=nginx $ kubectl run nginx-by-command --image=nginx pod/nginx-by-command created # 確認 $ kubectl get pod NAME READY STATUS RESTARTS AGE demo-nginx 1/1 Running 1 (38m ago) 12h nginx-by-command 1/1 Running 0 15s
【3】Pod確認方法
1)kubectl get pod
# Pod一覧表示 $ kubectl get pod
2)kubectl get pod
# kubectl get pod <PodName> $ kubectl get pod demo-nginx NAME READY STATUS RESTARTS AGE demo-nginx 1/1 Running 1 (53m ago) 12h # Spec情報表示(YAMLファイルの「spec:」を参照) $ kubectl get pod demo-nginx -o jsonpath='{.spec}' | jq > output.json $ less output.json { "containers": [ { "image": "nginx", "imagePullPolicy": "Always", "name": "nginx", "resources": {}, ...
補足:-o の別利用法
# kubectl get pod <PodName> -o yamlで、設定をそのまま出力できる $ kubectl get pod demo-nginx -o yaml > output.yaml
【4】Pod削除方法
1)YAML で作ったPodの削除
# kubectl delete -f <YAML> kubectl delete -f demo_pod.yml
2)kubectl run で作ったPodの削除
# kubectl delete pod <PodName>
$ kubectl delete pod nginx-by-command
【5】Hello world
[1] Hello world のPodを起動する
# [1] kubectl run --image [ImageName] --restart=Never [PodName] $ kubectl run --image gcr.io/google-samples/hello-app:1.0 --restart=Never helloworld pod/helloworld created
[2] Pod をList表示
$ kubectl get pods NAME READY STATUS RESTARTS AGE helloworld 1/1 Running 0 46s
[3] Pod内のコンテナのログ表示
# kubectl logs [PodName] $ kubectl logs helloworld 2024/10/24 13:50:05 Server listening on port 8080
[4] Podのメタデータを表示
# kubectl describe pod [PodName]
$ kubectl describe pod helloworld
Name: helloworld
Namespace: default
...
[5] Pod内のコンテナにShell接続
$ kubectl exec -it helloworld -- sh
[6] Pod内のコンテナの環境変数を定義
$ kubectl run --env HELLO_ENV=hello_world \ --image gcr.io/google-samples/hello-app:1.0 --restart=Never helloworld2
関連記事
Kubernetes ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/02/005053
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ Kubernetes Dashboard ~
https://dk521123.hatenablog.com/entry/2023/05/27/144144
Kubernetes ~ 基本編 / minikube ~
https://dk521123.hatenablog.com/entry/2023/05/07/214515
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Kubernetes / minikube に関するトラブル
https://dk521123.hatenablog.com/entry/2024/10/24/210338