翻訳

このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら

TL;DR
  • 他のリソース構成のフィールドを vars によって Pod の環境変数とコマンドの引数に注入する

構成の反映

動機

Pod 内で稼働しているアプリケーションがアプリケーションのコンテキストや設定について知りたくなることがあります。たとえば、Pod はプロジェクト内で定義されている Service 名をコマンド引数から取ることができます。 Service の値を PodSpec に直接ハードコーディングするのではなく、vars エントリを使って Service の値を参照することができます。 その値が kustomization.yaml によって (たとえば namePrefix を設定して) 更新また変更されると、PodSpec の中で参照されている場所まで値が伝播します。

Reference

Vars

vars セクションはプロジェクト内のリソース構成のフィールドに参照を持つ変数を含みます。以下を定義する必要があります。

  • リソースの種類
  • リソースのバージョン
  • リソース名
  • フィールドのパス

例: Pod のコマンドライン引数を Service 名の値に設定する。

Apply 時に $(BACKEND_SERVICE_NAME)vars で指定されたオブジェクトの参照を使った値に解決されます。

入力: kustomization.yaml、deployment.yaml、service.yaml ファイル

# kustomization.yaml
namePrefix: "test-"
vars:
  # Name of the variable so it can be referenced
- name: BACKEND_SERVICE_NAME
  # GVK of the object with the field
  objref:
    kind: Service
    name: backend-service
    apiVersion: v1
  # Path to the field
  fieldref:
    fieldpath: metadata.name
resources:
- deployment.yaml
- service.yaml
# service.yaml
kind: Service
apiVersion: v1
metadata:
  # Value of the variable.  This will be customized with
  # a namePrefix, and change the Variable value.
  name: backend-service
spec:
  selector:
    app: backend
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: curl-deployment
  labels:
    app: curl
spec:
  selector:
    matchLabels:
      app: curl
  template:
    metadata:
      labels:
        app: curl
    spec:
      containers:
      - name: curl
        image: ubuntu
        # Reference the Service name field value as a variable
        command: ["curl", "$(BACKEND_SERVICE_NAME)"]

適用: クラスタに適用されるリソース

apiVersion: v1
kind: Service
metadata:
  name: test-backend-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9376
  selector:
    app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-curl-deployment
  labels:
    app: curl
spec:
  selector:
    matchLabels:
      app: curl
  template:
    metadata:
      labels:
        app: curl
    spec:
      containers:
      - command:
        - curl
        # $(BACKEND_SERVICE_NAME) has been resolved to
        # test-backend-service
        - test-backend-service
        image: ubuntu
        name: curl

変数の参照

変数はリソース構成を Pod に注入するためのものであり、他の用途に向いていません。変数は一般的なテンプレート機構として使うべきではありません。値の上書きは変数ではなく patch で行ってください。ベースとバリエーションを参照してください。

results matching ""

    No results matching ""