Advanced Helm Chartのカスタマイズ

前提条件

始める前に、以下の前提条件を確認してください。

  1. Istioリリースのダウンロード.
  2. 必要なプラットフォーム固有の設定を実行します。
  3. Podとサービスの要件を確認してください。
  4. Istioインストールのためのhelmの使用.
  5. ポストレンダリングをサポートするHelmバージョン (>= 3.1)
  6. 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`値を追加します。これから行うのは、

  1. sysctl展開のカスタマイズパッチテンプレートを作成します。
  2. Helmのpost-renderingを使用してパッチを適用します。
  3. sysctlパッチがPodに正しく適用されたことを検証します。

Kustomizationの作成

まず、sysctlパッチファイルを作成し、追加属性を持つsecurityContextingress-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"

追加情報

このドキュメントで説明されている概念と技術の詳細については、以下を参照してください。

  1. IstioOperator - インストールのカスタマイズ
  2. 高度なHelmテクニック
  3. Kustomize
この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!