Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes における宣言的なリソースデリバリーの実践

Kubernetes における宣言的なリソースデリバリーの実践

Shota Suzuki

June 11, 2021
Tweet

More Decks by Shota Suzuki

Other Decks in Technology

Transcript

  1. 自己紹介/会社紹介 鈴木 祥太 (@sshota0809) • SRE チーム所属 ◦ B2B 向け

    SaaS Product を横串で担当 • 最近 Kubernetes の Gateway API に興味を持っています 株式会社ユーザベース • 「経済情報で、世界を変える」のミッション 提供サービス: 経済情報 プラット フォーム ソーシャル 経済 メディア スタートアップ情報 プラットフォーム B2Bマーケティング プラットフォーム etc...
  2. 弊社プロダクトの 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 コマンドを利用してデプロイ ◦ どのクラスタにどのアプリがデプロイされているの かは宣言的に管理されていない ▪ 規模が大きくなるにつれて運用が辛くなる
  3. 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 ... = +
  4. 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 された クラスタ
  5. まとめ 1. envsubst を利用した独自のマニフェスト生成 + 手続き的なデリバリーに課題感 2. helm + ArgoCD

    を利用した GitOps 化を実施 3. 柔軟性の高いテンプレートエンジン + 宣言的なデリバリーを実現