翻訳
このドキュメントは 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 で行ってください。ベースとバリエーションを参照してください。