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
Kazuhiro Kosaka
May 24, 2019
Technology
940
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
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
990
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.3k
SONiCの統計情報を取得したい
sonic
0
160
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
160
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
680
新しいVibe Codingと”自走”について
watany
6
320
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
160
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
190
LLMにもCAP定理があるという話
harukasakihara
0
360
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
170
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.2k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
YesSQL, Process and Tooling at Scale
rocio
174
15k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Raft: Consensus for Rubyists
vanstee
141
7.5k
GraphQLとの向き合い方2022年版
quramy
50
15k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
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(承認ボタン)が押されるのをを待つ (この間にカナリア動作確認) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
感想
感想 ひとまず要件を満たすものはできた 導入も検討していきたい 相当のことを でする必要がありそう(?)だとすると辛い… 当初、 と同じコンセプトのものを独自実装し、ほぼ完成していた 情報収集の難しさを感じた (読み方がわかる) コミュニティ
事例に関する情報は本当に少ない( の情報が役立つことが多い)
ありがとうございました