podとは?
Kubernetesのデプロイにおける最小単位です。
podの特徴
pod単位でデプロイされます。
podが使えなくなった場合は他のノードにデプロイされることもあります。
1つまたは複数のコンテナをもつ。
コンテナを複数持たせるケースとしては主コンテナをサポートするコンテナを同じpodに入れておくケースなどが想定されます。(例えば、主コンテナのログをサポートコンテナが飛ばしたりするケース)
ネットワークやリソースは共有リソースとしてもつ。
コンテナの実行方法に関する仕様を持ちます。
例えば、entrypoint、env、command、healthcheckなど。
podデプロイ時のポイント
1つのアプリケーションを複数podでデプロイすることも多いです。
なるべく複数のアプリケーションを1つのpodに入れないようにします。
本番運用の場合は個別のpodを直接操作しない。
ワークロードリソース(Deployment、StatefulSet、DaemonSetなど)を使用してpodを管理してもらいます。
共有コンテキスト
同一Pod内のコンテナは同じStorageにアクセスできる。
これを使うことで、メインコンテナが吐き出したログをヘルパーコンテナが取得するということも可能になります。
同一Pod内のコンテナはIPアドレスとPortを含むネットワーク名前空間を共有
- 同じPortは使えない。
- 同じPort内のコンテナ同士はlocalhostで通信できる。
実装方法
yamlを使ってpodを作る。
pod.yaml
1 2 3 4 5 6 7 8 |
apiVersion: v1 kind: Pod metadata: name: nginx-yaml spec: containers: - image: nginx name: nginx |
podを作る。
1 |
kubectl create -f pod.yaml |
動作確認(statusがRunningになっている。)
1 |
kubectl get pod |
kubectl runを使ってpodを作る。
以下のようにkubectl runでもpodは作ることができます。
1 |
kubectl run nginx --image=nginx |
podの詳細情報を確認する。
podはできたときはデフォルト設定で作られています。以下のコマンドで確認できます。(なお、jqはjsonに整形するコマンドなので入ってない人はbrewなどで事前にインストールするようにして下さい。)
1 |
kubectl get pod [pod名] -o jsonpath='{.spec}' | jq |
この記事へのコメントはありません。