💭

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

2021/02/22に公開

はじめに

くーばねてすをやっつけるために新たなステージに上がるためについに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