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
CI/CD Pipeline for Minimalist
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
pannpers
October 24, 2019
Programming
2.7k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CI/CD Pipeline for Minimalist
『Kubernetes Meetup Tokyo #24』でのLT。
https://k8sjp.connpass.com/event/149872/
pannpers
October 24, 2019
Other Decks in Programming
See All in Programming
ソフトウェアラスタライザ
fadis
1
450
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
220
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
Android CLI
fornewid
0
230
React本体のコードリーディング
high_g_engineer
1
150
Built Our Own Background Agent at LayerX
layerx
PRO
10
6k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
590
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
3
1.5k
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
230
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
330
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
720
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
580
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
Exploring anti-patterns in Rails
aemeredith
3
470
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Transcript
CI/CD Pipeline for Minimalist
hello! I am Yoshimasa Hamada I am Web Developer and
work for Zeals. You can find me at @panchan9 or @pannpers. 2
実際に、Kubernetes 導入してますか? (or 直近に導入予定) 3 1.
CD専用ツール使ってますか? 4 2. • Spinnaker • Jenkins X • Argo
CD • Flux by Weaveworks • Tekton • GoCD
Hard Way to introduce CD Tool in Initial Phase ✘
CDツールの選択肢が多過ぎる ✘ そして、どれも多機能なので比較検討のコストが高い ✘ というかKubernetesだけでも、導入コスト高い
とはいえ、 CD Pipelineを構築していないと・・・
Problems ✘ k8s Contextを間違って、意図した環境とは異なる Manifestsをデプロイしてしまう ✘ Gitでコード管理されていない変更が行われている (しかも意図が分からない) ✘ デプロイ作業が属人化してしまい、新規メンバーの学習
コストが高くなる
Don’t use kubectl by hand 8
どうすればよいか?
GitOps is current Best Practices https://www.weave.works/technologies/ci-cd-for-kubernetes/
GitOps is just Principles. How implement GitOps approach?
Summary of Problems ✘ k8s導入初期で最適なCD Pipeline構築は難しい ✘ 一方、マニュアルオペレーションはリスク大・・・ ✘ 理想はGitOps。あとはどう実現するか?
◦ できればラーニングコストが低く ◦ 複雑性をできるだけ排除した方法で
CI/CD Pipeline for Minimalist
まずは前提とゴールを整理 ✘ Git Branch Model どうする? ✘ Project Layout は?(GCPを例にします)
✘ いきなりGitOpsとかできるん?
GitHub Flow 1. Git Branch Model Master Feature PipelineのTriggerを変えれば、Git FlowやGitLab
Flowでも同じことができます
• zeals-dev • zeals-stg • zeals-prd • zeals-cr (container registry)
Docker Imageを一元管理するProject 2. GCP Project Layout
CI Ops like GitOps !! 3. Workflow For more details
about GitOps, Kubernetes anti-patterns: Let's do GitOps, not CIOps!
どういうことだってばよ!?
GitOpsが提唱する以下の原則には従う ✘ ApplicationやMiddlewareの設定は、Gitレポジトリで管 理しているものが絶対的な正であり、差異が発生しない ようにする (HPAによるPod数の際などは除く) ✘ kubectl を直接使用してデプロイを行わない
その一方で 『アンチパターン』とされている CI Opsを部分的に採用
具体的には・・・ ✘ デプロイに必要なCredentialsをCIツールに渡すことを許容 する ✘ GCPであれば、CIツール用に作成したService Accountの JSONファイル ✘ これにはKubernetesマスターのAPIへ命令を送ることがで
きる、とても強力な権限が付与されている
要するに GitOpsの恩恵を受けつつ 使い慣れたCIツールを使うことで (あと、デプロイ用のちょっとした Shell Script) ラーニングコストも最小限に!! 以下はCircleCIを例としています
それではここで Zealsの実際のCI/CD Pipelineを紹介
None
None
Point 1 ✘ PushされたFeatureブランチ専用のNamespaceを 作成し、デプロイする ✘ ローカルからport-forwardし、動作検証を行う ◦ cert-managerでTLS証明書を自動作成し、 外部からのエンドポイントも自動で用意したい
✘ CircleCIでは『ブランチの削除』をHookできないため、 毎回のジョブ実行時に存在するブランチと k8sのNamespaceを照合し、無ければ削除している
None
Point 2 ✘ masterブランチへのMergeコミットIDをDocker Imageのタ グとしてPushする e.g. zeals/hoge:98sie82 ✘ このへんはSkaffoldがやってくれるので、雑に
skaffold run -p ${ENV} と実行するだけでOK
None
Point 3 ✘ StagingのジョブでPushしたDocker ImageをPull ✘ masterブランチへのGitタグ(v0.1.2)を Docker Imageのタグに付与してPushする ◦
docker tag zeals/hoge:98sie82 zeals/hoge:v0.1.2 ◦ docker push zeals/hoge:v0.1.2 ✘ ImageのビルドはSkipするために、Skaffoldは run ではなく、 deploy コマンドを使う ◦ skaffold deploy -p ${ENV} --images=zeals/hoge:v0.1.2
これらを実行するための CircleCIのコンフィグや Shell Scriptは・・・
Tech Blogで公開します!! (Comming Soon) https://tech.zeals.co.jp
Conclusion ✘ k8s導入の初期フェーズは使い慣れたCIツールでも、 わりといい感じのCI/CD Pipelineを作れる ✘ ただ、本格運用に必要な機能は不足 ◦ カナリアリリース ◦
障害時のロールバック ◦ Git上のk8s Manifestと実際の値の変更検知 ✘ ある程度、k8s運用に慣れたタイミングで より高機能なCD専用ツールを導入しよう
thanks! Any questions? You can find me at @panchan9