1. 目標
Kustomize は、テンプレートを使わずにアプリケーションの構成をカスタマイズできるツールであり、既製のアプリケーションの使用を簡素化します。スタンドアロン ユーティリティとして使用でき、kubectl apply -k
を介して kubectl に組み込まれており、スタンドアロン CLI として使用できます。詳細については、kustomize.io をご覧ください。
このチュートリアルでは、Kustomize の基本コンセプトのいくつかを確認し、Kustomize を使用してアプリケーションと環境のバリエーションを管理します。
次のことを行います。
- kustomize コマンドライン クライアントを使用する
- 共通要素をオーバーライドする
- より大きな yaml 構造にパッチを適用する
- オーバーレイの複数のレイヤを利用する
2. ワークスペースの準備
- 次の URL にアクセスして Cloud Shell エディタを開きます。
https://ide.cloud.google.com
- ターミナル ウィンドウで、このチュートリアルの作業ディレクトリを作成する
mkdir kustomize-lab
- ディレクトリに移動し、IDE ワークスペースを設定します。
cd kustomize-lab && cloudshell workspace .
3. kustomize コマンドライン クライアントの使用
kustomize の利点は、ベース Kubernetes yaml をカスタム値でオーバーレイして変更する機能にあります。そのためには、kustomize に、ファイルの場所とオーバーライドする対象に関する指示を含むベースファイルが必要です。Kustomize は Kubernetes エコシステムに含まれており、さまざまな方法で実行できます。
このセクションでは、kustomize の基本構成を作成し、スタンドアロンの kustomize コマンドライン クライアントでファイルを処理します。
- まず、ベース構成ファイルを格納するフォルダを作成します。
mkdir -p chat-app/base
- ベースフォルダにシンプルな Kubernetes
deployment.yaml
を作成します。
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- ベース
kustomization.yaml
を作成する
Kustomize は、エントリ ポイントとして kustomization.yaml というファイルを探します。このファイルには、さまざまなベース ファイルとオーバーライド ファイルへの参照と、特定のオーバーライド値が含まれています。
deployment.yaml
をベースリソースとして参照する kustomization.yaml
ファイルを作成します。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- ベースフォルダで kustomize コマンドを実行します。これを行うと、デプロイ YAML ファイルが変更なしで出力されます。まだバリエーションが含まれていないため、想定どおりの結果です。
kustomize build chat-app/base
次の例に示すように、このスタンドアロン クライアントを kubectl クライアントと組み合わせて、出力を直接適用できます。これにより、build コマンドの出力が kubectl apply コマンドに直接ストリーミングされます。
(実行しない - 参考情報として記載)
kustomize build chat-app/base | kubectl apply -f -
この手法は、特定のバージョンの kustomize クライアントが必要な場合に役立ちます。
あるいは、kubectl 自体に統合されたツールを使用して kustomize を実行することもできます。以下の例のようになります。
(実行しない - 参考情報として記載)
kubectl apply -k chat-app/base
4. 共通要素のオーバーライド
ワークスペースが構成され、kustomize が機能していることを確認できたので、いくつかの基本値をオーバーライドします。
イメージ、名前空間、ラベルは、アプリケーションや環境ごとにカスタマイズされるのが一般的です。これらは頻繁に変更されるため、Kustomize では kustomize.yaml
で直接宣言できるため、これらの一般的なシナリオ用に多くのパッチを作成する必要がなくなります。
この手法は、テンプレートの特定のインスタンスを作成するためによく使用されます。名前とその名前空間を変更するだけで、1 つの基本セットのリソースセットを複数の実装で使用できるようになりました。
この例では、名前空間と名前の接頭辞を追加し、kustomization.yaml
にいくつかのラベルを追加します。
- 共通のラベルと名前空間が含まれるように
kustomization.yaml
ファイルを更新します。
次のコマンドをコピーしてターミナルで実行します。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- ビルドコマンドを実行する
この時点でビルドを実行すると、結果の YAML ファイルに、サービスと Deployment の定義の両方に名前空間、ラベル、接頭辞を付けた名前が含まれるようになります。
kustomize build chat-app/base
出力には、デプロイ YAML ファイルにないラベルと名前空間が含まれています。名前が chat-app
から my-chat-app
に変更されたことにも注目してください。
(出力はコピーされません)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. より大きな yaml 構造へのパッチ適用
Kustomize には、ベースリソースをオーバーレイするパッチを適用する機能も用意されています。この手法は、アプリケーションと環境間でばらつきを持たせるためによく使用されます。
このステップでは、同じ基本リソースを使用する単一のアプリケーションの環境バリエーションを作成します。
- まず、環境ごとにフォルダを作成します。
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 次のコマンドを使用してステージパッチを記述します
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- 次のコマンドを使用して本番環境のパッチを書き込みます
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
上記のパッチにはコンテナ イメージ名が含まれていないことに注意してください。この値は、前のステップで作成した base/deployment.yaml で指定されています。ただし、これらのパッチには、dev と prod の固有の環境変数が含まれています。
- ベース ディレクトリに kustomize YAML ファイルを実装する
ベース kustomization.yaml を書き換え、名前空間と名前の接頭辞を削除します。これは単なる基本構成であり、バリエーションはありません。これらのフィールドはすぐに環境ファイルに移動されます。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- dev ディレクトリ用の kustomize YAML ファイルを実装する
ターミナルで次のコマンドを実行して、dev と prod のバリエーションを実装します。
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
ファイルに patches
: セクションが追加されています。これは、kustomize がこれらのファイルをベースリソースの上にオーバーレイする必要があることを示します。
- prod ディレクトリ用の kustomize YAML ファイルを実装する
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- kustomize を実行してファイルをマージする
ベースファイルと環境ファイルが作成されたら、kustomize プロセスを実行してベースファイルにパッチを適用できます。
dev に対して次のコマンドを実行して、統合された結果を表示します。
kustomize build chat-app/dev
出力には、ベース構成と dev 構成のラベル、ベース構成のコンテナ イメージ名、dev フォルダの環境変数など、統合された結果が含まれています。
6. 複数のオーバーレイ レイヤを利用する
多くの組織には、アプリチームのサポートやプラットフォームの管理を担当するチームがあります。このようなチームは、ロギング エージェントなど、すべての環境のすべてのアプリケーションに含める具体的な詳細情報を含めたいと思うことがよくあります。
この例では、shared-kustomize
フォルダと、デプロイされている環境に関係なく、すべてのアプリケーションに含まれるリソースを作成します。
- shared-kustomize フォルダを作成する
mkdir shared-kustomize
- 共有フォルダにシンプルな
deployment.yaml
を作成する
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- 共有フォルダに kustomization.yaml を作成する
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- アプリケーションから shared-kustomize フォルダを参照する
shared-kustomize
フォルダをすべてのアプリケーションのベースにするため、chat-app/base/kustomization.yaml
を更新して shared-kustomize
をベースとして使用する必要があります。その上で独自の deployment.yaml にパッチを適用します。その後、環境フォルダに再びパッチが適用されます。
次のコマンドをコピーしてターミナルで実行します。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- kustomize を実行して、マージされた結果を開発環境に表示する
kustomize build chat-app/dev
出力には、アプリベース、アプリ環境、shared-kustomize
フォルダからの統合された結果が含まれています。具体的には、3 つのロケーションすべての値をコンテナ セクションで確認できます。
(出力はコピーされません)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>