メタデータ@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