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
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
430
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
460
What's new in Go 1.27?
ciarana
0
290
コーチングの奥義 何もしないテクニック
jinwatanabe
0
140
35分でわかるEffective Platform Engineering
nwiizo
5
570
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
130
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
5
760
ホームラボ紹介
y_sera15
0
220
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.4k
AIに狂うスタートアップが、あえて「人との協働」に全振りした新卒エンジニア研修 / New Graduate Engineer Training at a Startup Accelerating AI Adoption
ohnoeight
0
170
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
290
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
My Coaching Mixtape
mlcsv
0
260
Writing Fast Ruby
sferik
630
63k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
250
WCS-LA-2024
lcolladotor
0
800
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
370
BBQ
matthewcrist
89
10k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
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(承認ボタン)が押されるのをを待つ (この間にカナリア動作確認) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
感想
感想 ひとまず要件を満たすものはできた 導入も検討していきたい 相当のことを でする必要がありそう(?)だとすると辛い… 当初、 と同じコンセプトのものを独自実装し、ほぼ完成していた 情報収集の難しさを感じた (読み方がわかる) コミュニティ
事例に関する情報は本当に少ない( の情報が役立つことが多い)
ありがとうございました