Slide 1

Slide 1 text

スポンサーLT Kubernetes における宣言的な リソースデリバリーの実践 株式会社ユーザベース 鈴木祥太

Slide 2

Slide 2 text

自己紹介/会社紹介 鈴木 祥太 (@sshota0809) ● SRE チーム所属 ○ B2B 向け SaaS Product を横串で担当 ● 最近 Kubernetes の Gateway API に興味を持っています 株式会社ユーザベース ● 「経済情報で、世界を変える」のミッション 提供サービス: 経済情報 プラット フォーム ソーシャル 経済 メディア スタートアップ情報 プラットフォーム B2Bマーケティング プラットフォーム etc...

Slide 3

Slide 3 text

弊社プロダクトの CD における課題 dev#1 dev#2 prd#1 prd#2 ・・・ ・・・ templateファイル (Deployment/etc...) 変数ファイル (e2e/dev/prd) envsubst Kubernetes のコンテキスト情報 をパイプラインの中で選択し kubectl コマンドによりデプロイ 1. お手製シェルによるマニフェスト生成 ● 変数ファイルに環境ごとの変数を設定 ● envsubst でテンプレートファイルに変数を埋め込んで マニフェスト生成 ○ envsubst はシンプルだがやれることが限られる 2. Kubernetes コンテキストを意識するデプロイ ● どのクラスタにデプロイするか(どのコンテキストを使う か)はパイプラインにパラメータとしてユーザが渡す ○ 潜在的なオペミスのリスク ○ Jenkins サーバ上でコンテキストを管理する必要性 3. リソースのデプロイが手続き的 ● パイプライン内部で kubectl コマンドを利用してデプロイ ○ どのクラスタにどのアプリがデプロイされているの かは宣言的に管理されていない ■ 規模が大きくなるにつれて運用が辛くなる

Slide 4

Slide 4 text

envsubst によるマニフェスト作成 ... export HOST=hoge ... apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: test namespace: test spec: hosts: - ${HOST}.com ... apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: test namespace: test spec: hosts: - hoge.com ... = +

Slide 5

Slide 5 text

envsubst によるマニフェスト生成 + kubectl によるデプロイ helm によるマニフェスト生成 + ArgoCD による GitOps

Slide 6

Slide 6 text

GitOps による宣言的なリソースデリバリー dev#1 dev#2 prd#1 prd#2 ・・・ ・・・ templateファイル (Deployment/etc...) 変数ファイル (e2e/dev/prd) 1. helm によるテンプレート管理 ● リッチなテンプレートエンジンによる柔軟性の高さ 2. Kubernetes コンテキスト情報をパイプラインから排除 ● どのクラスタにリソースがデプロイされるか ArgoCD が保持 ○ ArgoCD の設定ファイル自身も CRD によって宣言的に 管理される ○ Kubernetes のコンテキスト情報を管理する必要無し 3. リソースのデプロイが宣言的 ● GitOps による Single Source of Truth の実現 ○ クラスタにどのようなリソースがデプロイされている かすべてリポジトリ内に定義されている ArgoCD が Deploy された クラスタ

Slide 7

Slide 7 text

まとめ 1. envsubst を利用した独自のマニフェスト生成 + 手続き的なデリバリーに課題感 2. helm + ArgoCD を利用した GitOps 化を実施 3. 柔軟性の高いテンプレートエンジン + 宣言的なデリバリーを実現

Slide 8

Slide 8 text

宣伝 Cloud Native Lounge#1/#2 に弊社メンバーが登壇します ぜひ参加お願い致します! https://forkwell.connpass.com/event/215187/