💭

kubernetesマニュフェストの設定項目まとめ

4 min read

はじめに

くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。今回はkubernetesマニュフェストの内容を勉強する。

概要

■kubernetesのマニュフェストとは
■マニュフェスト例
■マニュフェストの必須項目
■ポッドの設定項目

をまとめた(>_<)

■kubernetesのマニュフェストとは

Kubernetesでは、「マニフェスト」と呼ばれる形式で各種リソースを定義することができる。
マニフェストはツリー構造でリソースの内容を表現し、YAML形式(またはJSON形式)で記述されたマニフェストを元にリソースの作成や削除、変更といった操作を行える。
今回はYAML形式のマニュフェストを勉強する。

■マニュフェスト例

↓は

$ kubectl run nginx --image=nginx --restart=Always

したいときのYAMLマニュフェストの例。

nginxマニュフェスト例
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

■マニュフェストの必須項目

マニュフェストの必須項目は
apiVersion, kind, metadata, specである。

リソースの設定項目 意味
apiVersion kubernetesのAPIのバージョンを指定する
kind 使用するコンテナや実行するプログラムを定義する
metadata 必須項目であり、オブジェクトを一意に特定するための情報を指定する。name、UID、namespaceなどの一意の名前を必ず指定する
spec 作成するオブジェクトの概要

apiVersionについてはこちらを参照↓バージョンには安定版、ベータ版、アルファ版がある。

https://kubernetes.io/ja/docs/concepts/overview/kubernetes-api/
kindのリソースタイプの設定はこちらを参照↓、ポッド、エンドポイント、ロールなど。
https://kubernetes.io/docs/reference/kubectl/overview/#resource-types
spec
作成するオブジェクトの概要。
現状の状態を指定した概要になるように調整してくれる。
作成するオブジェクトの種類によって指定する項目は異なる。
metadataのLabelsはkey/valueの組み合わせでlabelsを指定することにより、Kubernetesオブジェクトに指定することができる。
システムに直結する意味合いを持つ設定ではなくLabel SelectorでLabelを選択するための設定を指定する。Label Selectorのオブジェクトの選択やサブセットの指定などで使用される。つまりユーザー独自の組織構造をシステムオブジェクト上でマッピングするための設定だ。
ラベルの指定は metadataのlabels に記述する。
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/labels/
ラベルの例
release" : "stable", "release" : "canary"
"environment" : "dev", "environment" : "qa", "environment" : "production"
"tier" : "frontend", "tier" : "backend", "tier" : "cache"
"partition" : "customerA", "partition" : "customerB"
"track" : "daily", "track" : "weekly"

■ポッドの設定項目

ポッド起動の設定項目 意味
Containers コンテナの仕様を設定する
initContainers 初期化専用コンテナの仕様。
nodeSelector Podを特定のNodeにスケジューリングする設定をする
volumes 共有ボリュームを設定する

initContainers
containers で指定したコンテナが起動する前に初期設定処理を目的として起動する。
特徴                                                                                                Podのコンテナが起動する前に実行される
複数のInit Containerが指定されている場合、順に実行される
Podの restartPolicy が Always の場合、Init Containerでは OnFailure が使用される
initContainersを利用することで、
セキュリティ的な理由からアプリケーションのコンテナとツールを含むコンテナを分離したいとき、
アプリケーションのコンテナに含まれていないツールやコードを使用するためにさきに作成したい場合
に利用できる。
nodeSelector
Podを特定のNodeにスケジューリングする仕組みである。
基本的にはスケジューラーが最適な配置を選択するため、一般的にはこのような制限は不要だ。(例えば、スケジューラーが複数のPodを別々のNodeへデプロイしたり、Podを配置する際にリソースが不十分なNodeにはデプロイされないようにポッドを配置する)
どんなときに使用するのか
SSDが搭載されているNodeにPodをデプロイしたり、同じアベイラビリティーゾーン内で通信する異なるサービスのPodを同じNodeにデプロイするなど。
nodeSelectorではkey-valueペアで指定する必要がある。key-valueペアは前提条件としてmetadataのLabelsで指定する必要がある。

■コンテナ起動の設定項目

コンテナ起動の設定項目 意味
name オブジェクトの名前を指定する。オブジェクトが複数ある場合は必須項目
image dockerイメージのリポジトリとタグ
livenessProbe コンテナのアプリケーションが稼働しているかチェックする
readinessProbe コンテナが準備できている(Ready)状態になっているかチェックする
ports ポッド外部からリクエストをうけとるために開いたポートのリスト
resources CPUやメモリの要求量と上限値
volumeMounts ポッドのボリュームをコンテナにマウントする設定を記述する
command 起動時に実行するコマンドを指定する
args commandの引数を指定する
env 環境変数をコンテナに指定する
restartPolicy kebectl run --restart=で設定する内容を設定する
dnsPolicy Pod固有のDNSポリシーを指定する

livenessProbe
LivenessProbeはコンテナが生存しているかをチェックする。 例えばアプリケーションが応答できなくなった際などを想定している
ReadinessProbe
ReadinessProbeはコンテナが準備できている(Ready)状態になっているかチェックする。
例えば初期のロード処理や重いリクエストの処理中で別のリクエストが返せない場合などを想定している。
dnsPolicy
Pod固有のDNSポリシーを指定する。

https://kubernetes.io/ja/docs/concepts/services-networking/dns-pod-service/

まとめ

ポッドの設定項目たくさんあるな!って思った(>_<)

Discussion

ログインするとコメントできます