Advanced Helm Chartのカスタマイズ
前提条件
始める前に、以下の前提条件を確認してください。
- Istioリリースのダウンロード.
- 必要なプラットフォーム固有の設定を実行します。
- Podとサービスの要件を確認してください。
- Istioインストールのためのhelmの使用.
- ポストレンダリングをサポートするHelmバージョン (>= 3.1)
- kubectlまたはkustomize。
Advanced Helm Chartのカスタマイズ
IstioのHelmチャートは、ユーザーの特定の要件に必要な属性の大部分を組み込むように試みています。しかし、調整したいKubernetesの値すべてが含まれているわけではありません。そのようなメカニズムを導入することは現実的ではありませんが、このドキュメントでは、IstioのHelmチャートを直接変更する必要なく、高度なHelmチャートのカスタマイズを行うことができる方法を示します。
kustomizeを使用したHelmによるIstioチャートのポストレンダリング
Helmの`post-renderer`機能を使用すると、インストールマニフェストを簡単に調整して要件を満たすことができます。`Post-rendering`は、Helmによってインストールされる前に、レンダリングされたマニフェストを操作、構成、および/または検証する柔軟性を提供します。これにより、高度な構成が必要なユーザーは、元のチャートのメンテナーから追加のサポートを受けることなく、Kustomizeなどのツールを使用して構成変更を適用できます。
既存のチャートへの値の追加
この例では、Istioの`ingress-gateway`デプロイメントに`sysctl`値を追加します。これから行うのは、
sysctl
展開のカスタマイズパッチテンプレートを作成します。- Helmの
post-rendering
を使用してパッチを適用します。 sysctl
パッチがPodに正しく適用されたことを検証します。
Kustomizationの作成
まず、sysctl
パッチファイルを作成し、追加属性を持つsecurityContext
をingress-gateway
Podに追加します。
$ cat > sysctl-ingress-gw-customization.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingress
namespace: istio-ingress
spec:
template:
spec:
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
value: "10"
EOF
以下のシェルスクリプトは、Helmのpost-renderer
とKustomizeの橋渡しをします。前者はstdin/stdout
で動作し、後者はファイルで動作するためです。
$ cat > kustomize.sh <<EOF
#!/bin/sh
cat > base.yaml
exec kubectl kustomize # you can also use "kustomize build ." if you have it installed.
EOF
$ chmod +x ./kustomize.sh
最後に、リソースのセットと関連するカスタマイズの詳細を含むkustomization
YAMLファイルを作成します。これはkustomize
の入力となります。
$ cat > kustomization.yaml <<EOF
resources:
- base.yaml
patchesStrategicMerge:
- sysctl-ingress-gw-customization.yaml
EOF
Kustomizationの適用
Kustomizationファイルの準備ができたので、Helmを使用してこれが正しく適用されるようにします。
IstioのHelmリポジトリの追加
$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update
Helm Templateを使用したレンダリングと検証
Helmのpost-renderer
を使用して、Helmによってインストールされる前にレンダリングされたマニフェストを検証できます。
$ helm template istio-ingress istio/gateway --namespace istio-ingress --post-renderer ./kustomize.sh | grep -B 2 -A 1 netfilter.nf_conntrack_tcp_timeout_close_wait
出力で、新しく追加されたingress-gateway
Podのsysctl
属性を確認します。
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
value: "10"
Helm `Post-Renderer`を使用したパッチの適用
以下のコマンドを使用してIstio ingress-gatewayをインストールし、Helmのpost-renderer
を使用してカスタマイズを適用します。
$ kubectl create ns istio-ingress
$ helm upgrade -i istio-ingress istio/gateway --namespace istio-ingress --wait --post-renderer ./kustomize.sh
Kustomizationの検証
ingress-gatewayのデプロイメントを調べると、新しく変更されたsysctl
値が表示されます。
$ kubectl -n istio-ingress get deployment istio-ingress -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
…
name: istio-ingress
namespace: istio-ingress
spec:
template:
metadata:
…
spec:
securityContext:
sysctls:
- name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
value: "10"
追加情報
このドキュメントで説明されている概念と技術の詳細については、以下を参照してください。