Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
k8s ci/cd environment by circleci and helm
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kazuhiro Kosaka
May 24, 2019
Technology
950
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
k8s ci/cd environment by circleci and helm
Kazuhiro Kosaka
May 24, 2019
Other Decks in Technology
See All in Technology
CIで使うClaude
iwatatomoya
0
120
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
550
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
630
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
430
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
370
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
290
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
170
cccccc
moznion
0
1.8k
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
690
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
110
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
12
1.6k
NDIAS CTF 2026 問題解説会資料
bata_24
0
180
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
180
Bash Introduction
62gerente
615
220k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
Practical Orchestrator
shlominoach
191
11k
Marketing to machines
jonoalderson
1
5.6k
Design in an AI World
tapps
1
260
Why Our Code Smells
bkeepers
PRO
340
58k
Unsuck your backbone
ammeep
672
58k
Faster Mobile Websites
deanohume
310
32k
Transcript
と でつくる 環境 オレシカナイト
の どうしてますか?
の どうしてますか? ツール リソース 手段
ツール の どうしてますか? リソース 手段 この組み合わせでベストプラクティスを探る をチラ見しつつ…
背景 弊社ではすでに が導入済み 面倒な手続きなく利用可能 導入コスト、学習コスト→低い パイプライン( )設定も ( )で管理できる だけで済むなら嬉しい
背景 原則 マニフェストは 化して管理(チームとしての方針) 本番環境で直接 の実行はできるだけ避けたい(オペミス防止) で漏れなくマニフェストが できる しなければ で即再稼働可能
プラグインでサブコマンド追加、機能拡張可能
紆余曲折試行錯誤の末
- 最適化 - 最適化 - 簡易カナリアリリース できました! CircleCI + GHE
+ Shell Scripts で統合
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入
前に でマニフェストの差分を確認(要 ) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入
前に でマニフェストの差分を確認(要 ) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 画像引用元: Introduction to GitLab Flow
- https://docs.gitlab.com/ee/workflow/gitlab_flow.html 各ブランチが各環境の状態を現す 各サービスの を追加
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 各ブランチが各環境の状態を現す( を除く) ↓ 『クラスタをゼロ状態から復旧できる』
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入
前に でマニフェストの差分を確認(要 ) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
で使われるファイル ※ ファイル名の先頭を にしているのは なファイルと ファイルを区別しやすくする目的 最適化 のデプロイ方法(設定 )を宣言的に記述する で
環境によって異なる設定値を注入 前に でマニフェストの差分を確認(要 )
--- app: deployment: replicaCount: 1 appImageTag: latest envoyImageTag: v1.10.0 containers:
app: resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi envoy: resources: limits: cpu: 100m memory: 128Mi ... --- environments: ## 環境ごとの設定、helmfileコマンド実行時に指定 dev: values: - _dev.yaml stg: values: - _stg.yaml prd: values: - _prd.yaml helmDefaults: ## 環境に応じて kubeContext を切り替える tillerNamespace: helm {{if eq .Environment.Name "dev"}} kubeContext: dev-cluster {{else if eq .Environment.Name "stg"}} kubeContext: stg-cluster {{else if eq .Environment.Name "prd"}} kubeContext: prd-cluster {{end}} releases: ## helm設定 - name: stargate-resolver namespace: stargate chart: . values: - _values.yaml.gotmpl ## これに environments の環境設定が注入され values.yaml としてhelmに渡される ... 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入 前に でマニフェストの差分を確認(要 ) helmfile.yaml _dev.yaml
--- app: deployment: replicaCount: 1 appImageTag: latest envoyImageTag: v1.10.0 containers:
app: resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi ... --- app: config: path: config mountPath: /etc/config filename: app_envoy.yaml service: grpc: port: 8000 http: port: 8080 deployment: replicaCount: {{ .Environment.Values | getOrNil "app.deployment.replicaCount" | default 1 }} appImageTag: {{ .Environment.Values | getOrNil "app.deployment.appImageTag" | default "stable" }} envoyImageTag: {{ .Environment.Values | getOrNil "app.deployment.envoyImageTag" | default "stable" }} containers: app: image: ... 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入 前に でマニフェストの差分を確認(要 ) _values.yaml.gotmpl _dev.yaml
--- app: config: path: config mountPath: /etc/config filename: app_envoy.yaml service:
grpc: port: 8000 http: port: 8080 deployment: replicaCount: 1 appImageTag: latest envoyImageTag: v1.10.0 containers: app: image: ... 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入 前に でマニフェストの差分を確認(要 ) _values.yaml.gotmpl レンダリング結果 tmp/xxxx.yaml
最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入 前に でマニフェストの差分を確認(要 )
最適化 な 用リポジトリを用意 ( )ベースでのデプロイ管理 最適化 のデプロイ方法(設定 )を宣言的に記述する で 環境によって異なる設定値を注入
前に でマニフェストの差分を確認(要 ) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
helm_apply_with_rollout_canary: steps: ... - run: name: ensure canariability # deploymentのlabelをチェック
command: ./scripts/circleci.sh ensure-canariability ${TARGET_ENV} # TARGET_ENV=prd - run: name: pause rollout-canary-enabled deployments # kubectl rollout pause command: ./scripts/circleci.sh rollout pause ${TARGET_ENV} - run: name: helm apply # helmfile apply no_output_timeout: 30m command: ./scripts/helm.sh apply ${TARGET_ENV} - run: name: rollout canary # kubectl rollout resume && kubectl rollout pause(一瞬だけresumeすることでpodを1台だけ立ち上げる) command: ./scripts/circleci.sh canary ${TARGET_ENV} ... # Slackへ通知 && CircleCIがパイプラインをpauseし、approval(承認ボタン)が押されるのをを待つ (この間にカナリア動作確認) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
感想
感想 ひとまず要件を満たすものはできた 導入も検討していきたい 相当のことを でする必要がありそう(?)だとすると辛い… 当初、 と同じコンセプトのものを独自実装し、ほぼ完成していた 情報収集の難しさを感じた (読み方がわかる) コミュニティ
事例に関する情報は本当に少ない( の情報が役立つことが多い)
ありがとうございました