この記事は Kubernetes道場 Advent Calendar 2018 3日目の記事です。
今回はPodについて概要と簡単な説明をする。
Podとは
PodはKubernetesにデプロイ出来る最小単位で以下の特徴がある。
- 1つ以上のコンテナのグループ
- 共有のネットワークとストレージ
- Podのコンテンツは同一のNodeにDeployされる
以下のようなイメージ。

通常、Podはそれ単体をそのまま扱うことは少ない、というかほぼ無い。
しかし今回は要点を抑えるためにも、勉強がてら作成してみよう。
PodのManifestを作成する
Podを作成するにはKubernetesのManifestファイルを作成する必要がある。
以下はnginxイメージを使用するPodのManifestである。
|
|
さて、これはどこを参考にしてこんな記述になっているのか。
それはKubernetes APIだ。APIのデータをyamlで記述している。
Kubernetes API Reference Docs v1.12
上記のリファレンスはVersion 1.12のものだ。このドキュメントを元に上記のManifestの項目を追ってみよう。
Podの項目は こちら にある。
各フィールドについて見ていこう。
apiVersion
apiVersion はオブジェクトのSchemaのVersionを指定する。指定については対象のObjectのGroupとVersionを参照する。
Groupがcoreのものは apiVersion にVersionに記述されたものを指定する。Groupがcore以外のものは apiVersion に Group/Version
のように指定する。
例として、Groupが core でVersionが v1 のものは apiVersion を v1 とし、
Groupが extensions でVersionが v1beta のものは apiVersion を extensions/v1beta とする。
今回、例の1つ目と同じであるため、 apiVersion を v1 に指定する。
kind
kind は作成するObject名を指定する。指定については対象のObjectのKindを参照する。
今回はPodを作成するために Pod を指定。
metadata
metadata はObjectのMetadataを指定する。
MetadataのnameでResourceの名前を指定する。
その他にもいくつか意味を持つMetadataがあるがそれは補完されたり必須ではないので後日抑えていこう。
matadata.name には今回nginxのイメージを使ったPodということで nginx と指定した。
spec
spec はオブジェクトの期待する状態を定義する。要はこのフィールドが具体的な設定を指定する場所だ。
Podでは spec の下のリンクにある PodSpec というObjectを記述する。
PodSpec v1 core - Kubernetes API Reference Docs v1.12
PodSpec には様々な項目が指定できる。重要な項目がいくつかあるが、これまた後日追っていこう。
今回は必須の項目である containers の Container Objectの name と image を見ていこう。
name はPod内でのコンテナ名を指定する。この name はPod内でユニークである必要がある。今回は nginx と指定した。
image はイメージ名を指定する。今回はnginxイメージを使ってコンテナを作成するため nginx を指定した。
Manifestを使ってPodを作成する
さて、先程上げたManifestを使ってPodを作成してみよう。先のManifestを pod-nginx.yaml という名前でファイルに保存する。
作成するには kubectl create コマンドを使う。また -f オプションでManifestファイルを指定する。
|
|
これでPodが作成できた。確認してみよう。Resourceの取得は kubectl get コマンドを使う。
|
|
作成したPodが取得できた。実行できているようだ。では、せっかくだが削除してみよう。
Resourceの削除は kubectl delete コマンドを使う。
Resource名を指定することも出来るが、 -f オプションでManifestファイルを指定して削除することも出来る。
|
|
削除できた。
というわけで今回はここまで。今回はPodの簡単な説明とManifestの書き方、Podの作成・取得・削除を行った。
次回はPodの spec 中で指定した containers フィールドのContainer Objectを掘り下げて見ていこう。
それでは。
