コンテンツにスキップ

メタデータ@Istio

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Namespaceの.metadata.labelsキー

istio-injection

指定したNamespaceに所属するPod内にistio-proxyコンテナを自動的にインジェクションするか否かを設定する。

.metadata.labels.istio.io/revキーとはコンフリクトを発生させるため、どちらかしか使えない (.metadata.labels.istio-injectionキーの値がdisabledの場合は共存できる) 。

.metadata.labels.istio-injectionキーを使用する場合、Istioのアップグレードがインプレース方式になる。

*実装例*

apiVersion: v1
kind: Namespace
metadata:
  name: app-namespace
  labels:
    istio-injection: enabled

アプリケーション以外のNamespaceではdisabled値を設定することが多い。

apiVersion: v1
kind: Namespace
metadata:
  name: observability-namespace
  labels:
    istio-injection: disabled # disabledであれば、istio.io/revキーと共存できる。
---
apiVersion: v1
kind: Namespace
metadata:
  name: chaos-mesh-namespace
  labels:
    istio-injection: disabled # disabledであれば、istio.io/revキーと共存できる。


istio.io/rev

指定したNamespaceに所属するPod内にistio-proxyコンテナを自動的にインジェクションするか否かを設定する。

IstoOperatorの.spec.revisionキーと同じである。

.metadata.labels.istio-injectionキーとはコンフリクトを発生させるため、どちらかしか使えない (.metadata.labels.istio-injectionキーの値がdisabledの場合は共存できる) 。

.metadata.labels.istio.io/revキーを使用する場合、Istioのアップグレードがカナリア方式になる。

*実装例*

apiVersion: v1
kind: Namespace
metadata:
  name: app-namespace
  labels:
    istio.io/rev: default
---
apiVersion: v1
kind: Namespace
metadata:
  name: observability-namespace
  labels:
    istio-injection: disabled # disabledであれば、istio.io/revキーと共存できる。
---
apiVersion: v1
kind: Namespace
metadata:
  name: chaos-mesh-namespace
  labels:
    istio-injection: disabled # disabledであれば、istio.io/revキーと共存できる。


02. Podの.metadata.annotationsキー

annotationsとは

Deploymentの.spec.templateキーや、Podの.metadata.キーにて、istio-proxyコンテナごとのオプション値を設定する。Deploymentの.metadata.キーで定義しないように注意する。


istio.io/rev

IstoOperatorの.spec.revisionキーと同じ。

特定のPodで、Istioとこれのカナリアリリースを有効化するか否かを設定する。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        istio.io/rev: 1-10-0


proxy.istio.io

▼ proxy.istio.ioとは

istio-proxyコンテナのenvoyプロセスの設定値を上書きし、ユーザー定義の値を設定する。

▼ configPath

デフォルトでは、./etc/istio/proxyディレクトリ配下に最終的な設定値ファイルが作成される。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          configPath: ./etc/istio/proxy

▼ parentShutdownDuration

istio-proxyコンテナ上のEnvoyの親プロセスを終了するまでに待機する時間を設定する。

istio-proxyコンテナ自体の終了タイミングを決めるterminationDrainDurationキーよりも、最低5秒以上長くすると良い。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          parentShutdownDuration: "80s"

▼ terminationDrainDuration

SIGKILLシグナルをistio-proxyコンテナに送信するまでに待機する時間を設定する。

この待機時間を経た後に、SIGKILLシグナルをistio-proxyコンテナに送信する。

時間が長すぎると、istio-proxyコンテナの終了に必要な時間が長くなり、Deploymentのローリングアップデートに必要以上に時間がかかってしまう。

時間が短すぎると、Envoyが終了するのを待たずにistio-proxyコンテナが終了してしまうため、Envoyがエラーになってしまう。

*実装例*

istio-proxyコンテナを75秒後に終了し始める。

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          terminationDrainDuration: "75s"


sidecar.istio.io/inject

特定のPod (例:DB) にサイドカーを注入するか否かを設定する。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        sidecar.istio.io/inject: "false"


sidecar.istio.io/proxyCPU

istio-proxyコンテナで使用するCPUサイズを設定する。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        sidecar.istio.io/proxyCPU: 2


sidecar.istio.io/proxyImage

istio-proxyコンテナの作成に使用するコンテナイメージを設定する。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        sidecar.istio.io/proxyImage: foo-envoy


sidecar.istio.io/proxyMemory

istio-proxyコンテナで使用するメモリサイズを設定する。

*実装例*

apiVersion: apps/v1
kind: Deployment # もしくはPod
metadata:
  name: foo-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      annotations:
        sidecar.istio.io/proxyMemory: 4