Kubernetesのyamlファイルに必須の項目について

Kubernetesの勉強をはじめると、設定が記載されたyamlファイルをよく見るようになります。

でもサンプルコードを見ると多くのフィールドがあり、何を見たらいいかわからなくなるという...。


ということで、まずは必須の4つのフィールドをまとめます。

  • apiVersion
  • kind
  • metadata
  • spec


サンプルコード

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

apiVersion

リソースのオブジェクトを作成時に利用するKubernetesAPIのバージョン

サンプルコードだと「apps/v1」バージョンを使うよ、と設定してます。

Kubernetesでは、マイナーバージョン毎に新機能の追加や、古い機能の非推奨化・廃止が実施されます。
Kubernetesのバージョンアップ時には、リソースのapiVersionの設定が非推奨となった場合、書き換える必要があります。

下記ドキュメントには、各オブジェクトのバージョンの状況や、非推奨APIからの移行方法が記載されてます。

kubernetes.io

kind


作成するリソースの種類

PodとかDeploymentとか、Kubernetesには色々な種類のリソースがありますが、
yamlファイルが何のリソースの設定かを記載します。

サンプルコードをみると、Deploymentの設定になっています。

 

metadata

オブジェクトを一意に特定するための情報。
nameとかUID、またnamespaceの情報が記載されます。
サンプルコードを見るとnginx-deploymentという名前のDeploymentになっています。

spec

オブジェクトの望ましい状態を表す設定(いっぱいいろいろ)

リソースの設定を見たければここ見てって感じでしょうか。

サンプルコードではselectorやreplicas、templateが設定されています。

 

specに記載できるフィールドは、各リソースそれぞれで設定されています。
どんなフィールドが設定できるかは、Kubernetes API リファレンスを見るといいらしいです。
Podに関するのはPodSpec v1 coreを、Deploymentに関するのはDeploymentSpec v1 appsを確認してねとのこと。

kubernetes.io