Slide 1

Slide 1 text

Istio Helm化 共有 johnmanjiro

Slide 2

Slide 2 text

アジェンダ このタスクの目標 ● なぜ Istio を Helm 化する必要があるのか Istio の構成 ● Istio とは・Istio の構成 — istiod ● Istio Operator とは Helm 化する手順 ● Helm によるリソースの管理について ● Istio Operator 管理のものを Helm 管理にするには この共有会で何を話すか

Slide 3

Slide 3 text

このタスクの目標

Slide 4

Slide 4 text

このタスクの目標 を で管理したい!

Slide 5

Slide 5 text

なぜ Helm で管理する必要があるのか サポートはされるが、新しい機能の追加などは行われない Istio のインストール方法 ● istioctl — Istio 公式の CLI ● IaC で管理できない ● Istio Operator — istio-operator という pod が IstioOperator という CRD に基づ いて Istio のリソースを管理する — Istio を terraform で管理するために使っている ● Istioの構成管理の話 - Gunosy Tech Blog ● Helm — Kubernetes manifests 向けのパッケージマネージャー 今使っている Istio Operator でのインストールが非推奨になったから

Slide 6

Slide 6 text

Istioの構成

Slide 7

Slide 7 text

Istio の構成 そもそも ってなんだ?

Slide 8

Slide 8 text

Istio とは サービスメッシュ ● アプリケーションレベルの通信をインフラストラクチャ側で制御できる ようにする技術 ● 社内のマイクロサービスが通信する際に使っている わかりやすい資料 AWS App Mesh - AWS Black Belt Online Seminor Kubernetes 向けのサービスメッシュ

Slide 9

Slide 9 text

出典: https://istio.io/latest/about/service-mesh/ ■ Control Plane(istiod) – Istio 全体を管理する ● Pod に対して Istio Proxy を注入したり – istiod という単一のバイナリ ● 中に Pilot などのコンポーネントを持つ ■ Istio Proxy – Pod に注入される Proxy ● Envoy を拡張したもの ● Sidecar として注入される ● サービス間すべてのトラフィックを管理する Control Plane と Istio Proxy で構成される Istio の構成

Slide 10

Slide 10 text

Istio の構成 Workloads ● Deployment 権限周り ● ClusterRole ● SericeAccount ● etc… ほかにもいっぱい Istio を動かすにはさまざまなリソースのデプロイが必要

Slide 11

Slide 11 text

Istio の構成 Workloads ● Deployment 権限周り ● ClusterRole ● SericeAccount ● etc… ほかにもいっぱい Istio を動かすにはさまざまなリソースのデプロイが必要 簡単に管理したい

Slide 12

Slide 12 text

Istio のインストール方法 Istio のインストール方法(再掲) ● istioctl — Istio 公式の CLI ● IaC で管理できない ● Istio Operator — istio-operator という pod が IstioOperator という CRD に基づ いて Istio のリソースを管理する — Istio を terraform で管理するために使っている ● Istioの構成管理の話 - Gunosy Tech Blog ● Helm — Kubernetes manifests 向けのパッケージマネージャー リソースを管理するためにいくつかのインストール方法が提供されている

Slide 13

Slide 13 text

Istio のインストール方法 Istio のインストール方法(再掲) ● istioctl — Istio 公式の CLI ● IaC で管理できない ● Istio Operator — istio-operator という pod が IstioOperator という CRD に基づ いて Istio のリソースを管理する — Istio を terraform で管理するために使っている ● Istioの構成管理の話 - Gunosy Tech Blog ● Helm — Kubernetes manifests 向けのパッケージマネージャー リソースを管理するためにいくつかのインストール方法が提供されている

Slide 14

Slide 14 text

Istio Operator デプロイされると Istio 関連のリソースを管理する ● Istiod の Deployment ● Service ● stats 系の Envoy Filter istio-operator という pod が Controller として動いている IstioOperator (CR) の設定に合わせて Istio のリソースを管理する 内部で Helm のマニフェストを持っており、Render 後 Apply している ● Istio Operator の manifest で定義しているものも Helm の Value Istio のリソースを管理する方法のひとつ

Slide 15

Slide 15 text

Istio Operator Istio Operator が管理しているリソースももとはHelm Chartのもの → Helm 管理におこうとした時に競合する → 競合を解決できればそのままそのリソースを Helm で管理できる Helm のマニフェストを持っているということは

Slide 16

Slide 16 text

Istio Operator Istio Operator を削除すると…… 管理していたリソースも消える ● Kubernetes クラスターから Control Plane とかが消え去る ● やばい どうやって管理対象か判断しているのか ● リソースについているラベルを見ている(code1, code2) — install.operator.istio.io/owning-resource — install.operator.istio.io/owning-resource-namespace — operator.istio.io/managed — operator.istio.io/component — operator.istio.io/version

Slide 17

Slide 17 text

Istio Operator リソースを消さずに Istio Operator を消すには 方法1. 既存のリソースからラベルを剥がしてから消す 方法2. istio-operator(Controller)を止めてから消す

Slide 18

Slide 18 text

Istio Operator 方法1. 既存のリソースからラベルを剥がしてから消す リソースについている Istio Operator 関連のラベルをすべて剥がす ● ラベルがなくなっていれば管理対象でなくなる ● 剥がし忘れがあるとそのリソースが消えてしまう

Slide 19

Slide 19 text

Istio Operator 方法2. istio-operator(Controller)を止めてから消す IstioOperator の定義に基づいて実際にリソースを扱うのはistio-operator → istio-operator の Pod がいなければ、istio のリソースは変更されない ● IstioOperator のラベルをいじる必要がない ● 既存のリソースで Helm 管理にならないものも残しておける

Slide 20

Slide 20 text

Istio Operator リソースを消さずに Istio Operator を消すには 方法1. 既存のリソースからラベルを剥がしてから消す 方法2. istio-operator(Controller)を止めてから消す こっちでやる

Slide 21

Slide 21 text

Helm化する手順

Slide 22

Slide 22 text

前提 istio-base ● istio 全体で共通のリソース(CRDなど) ● Istio Base Helm Chart istiod ● Istio の Control Plane ● Istiod Helm Chart 必ず istio-base を先にインストールしておく必要がある Gateway を使っているなら istio-gateway も必要(うちは使ってない) 2つの Helm Chart をインストールする必要がある(参考)

Slide 23

Slide 23 text

Helm 化する手順 1. 手順書の作成 2. Helm 化する PR を用意 3. istio-operator の Pod 数を0にする 4. 既存のリソースに Helm のラベルとアノテーションをつける 5. PR のマージ

Slide 24

Slide 24 text

Helm 化する手順 一連の流れ、コマンド、スクリプトを記載する 1. 手順書の作成

Slide 25

Slide 25 text

Helm 化する手順 対象のリソースにラベルをつけない限り helmfile diff が失敗する Istio Operator の terraform のコードを削除するのも含めてもいい 2. Helm 化する PR を用意

Slide 26

Slide 26 text

Helm 化する手順 istio-operator という namespace に Deployment がある ● replicas: 0 に指定 この後、istio-operator の Pod がなくなり IstioOperator に基づいた Reconcile が行われなくなる 3. istio-operator の Pod 数を0にする

Slide 27

Slide 27 text

Helm 化する手順 ラベル ● app.kubernetes.io/managed-by=Helm アノテーション ● meta.helm.sh/release-name= ● meta.helm.sh/release-namespace= この後、PR で diff が確認できるようになるはず 4. 既存のリソースに Helm のラベルとアノテーションをつける

Slide 28

Slide 28 text

Helm 化する手順 helmfile apply が成功すれば OK ● すべてにラベルがついていれば成功するはず PR に Terraform からの Istio Operator の削除を含めていた場合、Istio Operator の削除も実行される 5. PR のマージ

Slide 29

Slide 29 text

これから何をするか

Slide 30

Slide 30 text

手順書の作成からやっていく 続いて下記を実施する ● Helm 導入の PR ● Helm の対象になるリソースのラベル・アノテーションを変えるスクリプ ト これから何をするか Istio Helm化やっていき