インストール設定のカスタマイズ

前提条件

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

  1. Istioリリースのダウンロード.
  2. 必要なプラットフォーム固有の設定を実行します。
  3. Podとサービスの要件を確認します。

Istioの組み込み設定プロファイルをインストールすることに加えて、istioctl installは設定をカスタマイズするための完全なAPIを提供します。

このAPIの設定パラメータは、コマンドラインで--setオプションを使用して個別に設定できます。たとえば、デフォルトの設定プロファイルでデバッグログを有効にするには、次のコマンドを使用します。

$ istioctl install --set values.global.logging.level=debug

あるいは、IstioOperatorの設定をYAMLファイルで指定し、-fオプションを使用してistioctlに渡すこともできます。

$ istioctl install -f samples/operator/pilot-k8s.yaml

Istioコンポーネントの特定

IstioOperator APIは、以下の表に示すようにコンポーネントを定義します。

コンポーネント
base
pilot
ingressGateways
egressGateways
cni
istiodRemote

これらの各コンポーネントの設定可能な設定は、API のcomponents.<component name>で確認できます。たとえば、API を使用してpilotコンポーネントのenabled設定を(false に)変更するには、--set components.pilot.enabled=falseを使用するか、次のようにIstioOperatorリソースで設定します。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    pilot:
      enabled: false

すべてのコンポーネントは、次のセクションで説明されているように、components.<component name>.k8sの下で、Kubernetes固有の設定を変更するための共通APIも共有しています。

Kubernetes設定のカスタマイズ

IstioOperator APIを使用すると、各コンポーネントのKubernetes設定を一貫した方法でカスタマイズできます。

各コンポーネントには、KubernetesResourceSpecがあり、以下の設定を変更できます。このリストを使用して、カスタマイズする設定を特定してください。

  1. リソース
  2. 準備済みプローブ
  3. レプリカ数
  4. HorizontalPodAutoscaler
  5. PodDisruptionBudget
  6. Podアノテーション
  7. サービスアノテーション
  8. ImagePullPolicy
  9. 優先クラス名
  10. ノードセレクタ
  11. アフィニティとアンチアフィニティ
  12. サービス
  13. 許容
  14. 戦略
  15. 環境変数
  16. Podセキュリティコンテキスト
  17. ボリュームとボリュームマウント

これらのKubernetes設定はすべてKubernetes API定義を使用しているため、参照としてKubernetesドキュメントを使用できます。

次の例では、オーバーレイファイルを使用して、Pilotのリソースと水平ポッドオートスケーリングの設定を調整します。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    pilot:
      k8s:
        resources:
          requests:
            cpu: 1000m # override from default 500m
            memory: 4096Mi # ... default 2048Mi
        hpaSpec:
          maxReplicas: 10 # ... default 5
          minReplicas: 2  # ... default 1

変更された設定をクラスタに適用するには、istioctl installを使用します。

$ istioctl install -f samples/operator/pilot-k8s.yaml

Helm APIを使用したIstio設定のカスタマイズ

IstioOperator APIには、valuesフィールドを使用してHelm APIへのパススルーインターフェースが含まれています。

次のYAMLファイルは、Helm APIを使用してグローバル設定とPilot設定を構成します。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    pilot:
      traceSampling: 0.1 # override from 1.0
    global:
      monitoringPort: 15014

一部のパラメータは、Kubernetesリソース、名前空間、有効化設定など、Helm APIとIstioOperator APIの両方に一時的に存在します。Istioコミュニティでは、より一貫性があり、検証され、コミュニティ卒業プロセスに従っているため、IstioOperator APIを使用することを推奨しています。

ゲートウェイの設定

ゲートウェイは、複数のイングレスとエグレスゲートウェイを定義できるため、特殊なタイプのコンポーネントです。IstioOperator APIでは、ゲートウェイはリスト型として定義されています。defaultプロファイルは、istio-ingressgatewayと呼ばれる1つのイングレスゲートウェイをインストールします。このゲートウェイのデフォルト値を確認できます。

$ istioctl profile dump --config-path components.ingressGateways
$ istioctl profile dump --config-path values.gateways.istio-ingressgateway

これらのコマンドは、生成されたゲートウェイリソースの定義に使用されるゲートウェイのIstioOperator設定とHelm設定の両方を表示します。組み込みのゲートウェイは、他のコンポーネントと同様にカスタマイズできます。

新しいユーザーゲートウェイは、新しいリストエントリを追加することで作成できます。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
      - namespace: user-ingressgateway-ns
        name: ilb-gateway
        enabled: true
        k8s:
          resources:
            requests:
              cpu: 200m
          serviceAnnotations:
            cloud.google.com/load-balancer-type: "internal"
          service:
            ports:
            - port: 8060
              targetPort: 8060
              name: tcp-citadel-grpc-tls
            - port: 5353
              name: tcp-dns

Helm値(spec.values.gateways.istio-ingressgateway/egressgateway)は、すべてのイングレス/エグレスゲートウェイで共有されます。これらの値をゲートウェイごとにカスタマイズする必要がある場合は、メインのIstioインストールとは別に、ユーザーゲートウェイのマニフェストを生成するために、個別のIstioOperator CRを使用することをお勧めします。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: empty
  components:
    ingressGateways:
      - name: ilb-gateway
        namespace: user-ingressgateway-ns
        enabled: true
        # Copy settings from istio-ingressgateway as needed.
  values:
    gateways:
      istio-ingressgateway:
        debug: error

高度なインストールのカスタマイズ

外部チャートとプロファイルのカスタマイズ

istioctlinstallmanifest generateprofileコマンドは、チャートとプロファイルに以下のいずれかのソースを使用できます。

  • コンパイル済みチャート。--manifestsオプションが設定されていない場合のデフォルトです。コンパイル済みチャートは、Istioリリース.tgzmanifests/ディレクトリにあるものと同じです。
  • ローカルファイルシステムのチャート、例: istioctl install --manifests istio-1.24.0/manifests

ローカルファイルシステムのチャートとプロファイルは、manifests/内のファイルを編集することでカスタマイズできます。大規模な変更を行う場合は、manifestsディレクトリの複製を作成して変更することをお勧めします。ただし、manifestsディレクトリのコンテンツレイアウトは維持する必要があります。

manifests/profiles/にあるプロファイルは、目的のプロファイル名と.yaml拡張子を持つ新しいファイルを作成することで編集および追加できます。istioctlprofilesサブディレクトリをスキャンし、そこで検出されたすべてのプロファイルは、IstioOperatorSpecプロファイルフィールドで名前で参照できます。組み込みのプロファイルは、ユーザーオーバーレイが適用される前に、デフォルトのプロファイルYAMLにオーバーレイされます。たとえば、defaultプロファイルから一部の設定をカスタマイズするcustom1.yamlという新しいプロファイルファイルを作成し、その上にユーザーオーバーレイファイルを適用できます。

$ istioctl manifest generate --manifests mycharts/ --set profile=custom1 -f path-to-user-overlay.yaml

この場合、custom1.yamlファイルとuser-overlay.yamlファイルはdefault.yamlファイルにオーバーレイされ、マニフェスト生成の入力として使用される最終的な値が取得されます。

一般的に、複数のオーバーレイファイルを渡すことでも同様の結果が得られるため、新しいプロファイルを作成する必要はありません。たとえば、上記のコマンドは、2つのユーザーオーバーレイファイルを渡すことと同じです。

$ istioctl manifest generate --manifests mycharts/ -f manifests/profiles/custom1.yaml -f path-to-user-overlay.yaml

カスタムプロファイルを作成する必要があるのは、IstioOperatorSpecで名前を使用してプロファイルを参照する必要がある場合のみです。

出力マニフェストのパッチ適用

istioctlへの入力であるIstioOperator CRは、クラスタに適用するKubernetesリソースを含む出力マニフェストを生成するために使用されます。出力マニフェストは、生成後、クラスタに適用される前に、IstioOperatorオーバーレイ APIを使用して、リソースの追加、変更、削除をさらにカスタマイズできます。

次の例では、オーバーレイファイル(patch.yaml)を使用して、実行できる出力マニフェストパッチのタイプを示しています。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: empty
  hub: docker.io/istio
  tag: 1.1.6
  components:
    pilot:
      enabled: true
      namespace: istio-control
      k8s:
        overlays:
          - kind: Deployment
            name: istiod
            patches:
              # Select list item by value
              - path: spec.template.spec.containers.[name:discovery].args.[30m]
                value: "60m" # overridden from 30m
              # Select list item by key:value
              - path: spec.template.spec.containers.[name:discovery].ports.[containerPort:8080].containerPort
                value: 1234
              # Override with object (note | on value: first line)
              - path: spec.template.spec.containers.[name:discovery].env.[name:POD_NAMESPACE].valueFrom
                value: |
                  fieldRef:
                    apiVersion: v2
                    fieldPath: metadata.myPath
              # Deletion of list item
              - path: spec.template.spec.containers.[name:discovery].env.[name:REVISION]
              # Deletion of map item
              - path: spec.template.spec.containers.[name:discovery].securityContext
          - kind: Service
            name: istiod
            patches:
              - path: spec.ports.[name:https-dns].port
                value: 11111 # OVERRIDDEN

ファイルをistioctl manifest generate -f patch.yamlに渡すと、上記のパッチがデフォルトプロファイルの出力マニフェストに適用されます。2つのパッチされたリソースは以下のように変更されます(リソースの一部は簡潔にするために省略されています)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
spec:
  template:
    spec:
      containers:
      - args:
        - 60m
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v2
              fieldPath: metadata.myPath
        name: discovery
        ports:
        - containerPort: 1234
---
apiVersion: v1
kind: Service
metadata:
  name: istiod
spec:
  ports:
  - name: https-dns
    port: 11111
---

パッチは指定された順序で適用されます。各パッチは、前のパッチからの出力が適用されます。出力マニフェストに存在しないパッチ内のパスは作成されます。

リストアイテムパスの選択

istioctl --setフラグとIstioOperator CRのk8s.overlaysフィールドの両方で、[index][value]、または[key:value]によってリストアイテムを選択できます。–setフラグは、リソースに存在しないパスの中間ノードも作成します。

この情報は役に立ちましたか?
改善点のご提案はありますか?

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