インストール設定のカスタマイズ
前提条件
始める前に、以下の前提条件を確認してください。
- Istioリリースのダウンロード.
- 必要なプラットフォーム固有の設定を実行します。
- 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
があり、以下の設定を変更できます。このリストを使用して、カスタマイズする設定を特定してください。
- リソース
- 準備済みプローブ
- レプリカ数
HorizontalPodAutoscaler
PodDisruptionBudget
- Podアノテーション
- サービスアノテーション
ImagePullPolicy
- 優先クラス名
- ノードセレクタ
- アフィニティとアンチアフィニティ
- サービス
- 許容
- 戦略
- 環境変数
- Podセキュリティコンテキスト
- ボリュームとボリュームマウント
これらの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
高度なインストールのカスタマイズ
外部チャートとプロファイルのカスタマイズ
istioctl
のinstall
、manifest generate
、profile
コマンドは、チャートとプロファイルに以下のいずれかのソースを使用できます。
- コンパイル済みチャート。
--manifests
オプションが設定されていない場合のデフォルトです。コンパイル済みチャートは、Istioリリース.tgz
のmanifests/
ディレクトリにあるものと同じです。 - ローカルファイルシステムのチャート、例:
istioctl install --manifests istio-1.24.0/manifests
。
ローカルファイルシステムのチャートとプロファイルは、manifests/
内のファイルを編集することでカスタマイズできます。大規模な変更を行う場合は、manifests
ディレクトリの複製を作成して変更することをお勧めします。ただし、manifests
ディレクトリのコンテンツレイアウトは維持する必要があります。
manifests/profiles/
にあるプロファイルは、目的のプロファイル名と.yaml
拡張子を持つ新しいファイルを作成することで編集および追加できます。istioctl
はprofiles
サブディレクトリをスキャンし、そこで検出されたすべてのプロファイルは、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フラグは、リソースに存在しないパスの中間ノードも作成します。