Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
k8s ci/cd environment by circleci and helm
Search
Kazuhiro Kosaka
May 24, 2019
Technology
960
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
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
30
18k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
25
17k
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
480
The Knowledge Spine: A Machine-Executable Ontology for Governed Marketing Activation
vananth22
0
120
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
420
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
250
Genieを崇めよ
kameitomohiro
0
170
Minecraft JavaのMODをSwiftで作る
1mash0
0
190
時うどん〜Socket.getifaddrsで学ぶネットワーク編 / Tokiudon: The Socket.getifaddrs Edition
coe401_
4
210
AIエージェントの権限管理 3: Agentic RAG の Fine grained access control 編
ren8k
0
180
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
370
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.5k
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Git: the NoSQL Database
bkeepers
PRO
432
67k
For a Future-Friendly Web
brad_frost
183
10k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Practical Orchestrator
shlominoach
192
12k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
510
Faster Mobile Websites
deanohume
310
32k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
Exploring anti-patterns in Rails
aemeredith
4
510
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
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(承認ボタン)が押されるのをを待つ (この間にカナリア動作確認) 簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
簡易カナリアリリース を利用 特定のラベルがついた を対象(かつ 環境)
感想
感想 ひとまず要件を満たすものはできた 導入も検討していきたい 相当のことを でする必要がありそう(?)だとすると辛い… 当初、 と同じコンセプトのものを独自実装し、ほぼ完成していた 情報収集の難しさを感じた (読み方がわかる) コミュニティ
事例に関する情報は本当に少ない( の情報が役立つことが多い)
ありがとうございました