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
ウォンテッドリーのマイクロサービス運用・開発を加速する kube
Search
Ken Kato
February 25, 2025
Technology
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ウォンテッドリーのマイクロサービス運用・開発を加速する kube
Ken Kato
February 25, 2025
More Decks by Ken Kato
See All by Ken Kato
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
1
330
Datadog RUMを導入するまで
kkato1
0
160
初めてのPostgreSQLメジャーバージョンアップ
kkato1
0
2.3k
PostgreSQLのVACUUMとは
kkato1
3
3.5k
論理レプリケーションを使ったDB統合
kkato1
0
1.3k
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
360
DNSルックアップの回数制限でハマった話
kkato1
1
790
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
910
Other Decks in Technology
See All in Technology
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
470
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
2
680
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
700
ほんとうの信頼性はヒーローが死んでからはじまる / True reliability begins after the hero dies
vtryo
0
110
Goodbye ShellScript, Hello File-based App
shunsock
0
830
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
150
Antigravity SDK for the Java Developer
glaforge
0
180
Von-Neumann Machines, Dreams & The Futures of IT
ufried
0
120
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
540
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
180
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
5M
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
520
Believing is Seeing
oripsolob
1
220
The SEO Collaboration Effect
kristinabergwall1
1
570
Design in an AI World
tapps
1
330
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
420
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
550
WCS-LA-2024
lcolladotor
0
830
How to Talk to Developers About Accessibility
jct
2
550
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
460
Transcript
© 2024 Wantedly, Inc. ウォンテッドリーのマイクロサービス運用・開発を加速する kube Wantedly Tech Night #8
Feb. 25 2025 - Ken Kato
© 2024 Wantedly, Inc. 自己紹介 加藤 健 Infra Squad 2024年1月
中途入社 AWS上のKubernetes、PostgreSQLを運用 X: @kkato25
© 2024 Wantedly, Inc. ウォンテッドリーの開発環境 多数のマイクロサービスを全てk8sで管理している
© 2024 Wantedly, Inc. kubeの概要 ウォンテッドリーではkubeという CLI ツールを内製している kube =
kubectl + 開発用機能 • kubectlの各種設定隠蔽 • 開発を効率化するための機能
© 2024 Wantedly, Inc. kubeの概要 ウォンテッドリーではkubeという CLI ツールを内製している kube =
kubectl + 開発用機能 • kubectlの各種設定隠蔽 • 開発を効率化するための機能
© 2024 Wantedly, Inc. kubeの設計思想 ウォンテッドリーにおけるPlatform Engineeringを実現するツール • 開発者体験の向上 ◦
以前ウォンテッドリーはHerokuを使っており、開発者がコマンド一発でデプロイしていた ◦ 現在k8s上でもkubeを使うことで、開発者がコマンド一発でデプロイできる体験を提供し ている • セルフサービス化 ◦ インフラがボトルネックにならず、リリースを高速に行えるようにしたい ◦ 開発者自身で開発に必要なものを用意できるようにする
© 2024 Wantedly, Inc. k8s上で開発・デプロイするための手順 1. GitHubリポジトリを用意する 2. GitHubリポジトリにアプリケーションコードをプッシュする 3.
Dockerfileを作成する 4. k8sマニフェストを作成する: kube generate 5. ArgoCDにアプリケーションを登録する 6. コンテナイメージをビルドする: kube ci-build 7. アプリケーションをデプロイする: kube deploy
© 2024 Wantedly, Inc. kubeの機能① kube generate k8sマニフェストを自動生成してくれるコマンド • k8sマニフェストを手動作成する場合、作成に時間がかかる、設定ミスが起こりや
すい、フォーマットが統一されていない • kubeの場合、作成が短時間で完了する、設定ミスが起こりにくい、フォーマットが 統一されている
© 2024 Wantedly, Inc. kubeの機能① kube generate % cat kube-generate.yaml
generates: - namespace: clusters: - sandbox % kube generate --update Generate manifests by using /Users/kenkato/ghq/github.com/wantedly/test-deploy-app/kube-generate.yaml generated "/Users/kenkato/ghq/github.com/wantedly/test-deploy-app/kubernetes/sandbox/namespace.yaml" % cat kubernetes/sandbox/namespace.yaml --- apiVersion: v1 kind: Namespace metadata: labels: istio-injection: "enabled" name: test-deploy-app
© 2024 Wantedly, Inc. kubeの機能② kube ci-build コンテナイメージをビルドし、レジストリにプッシュするためのコマンド GitHub ActionsなどのCI上で実行される
• dockerコマンドの場合、時間がかかる、設定ミスが起こりやすい • kubeの場合、短時間で設定でき、設定ミスが起こりにくい docker build -t <repo>:$GITHUB_SHA . docker tag <repo>:$GITHUB_SHA <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/<repo>:$GITHUB_SHA docker push <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/<repo>:$GITHUB_SHA kube ci-build
© 2024 Wantedly, Inc. kubeの機能③ kube <env> deploy k8sにアプリケーションをデプロイするためのコマンド •
ローカル環境とCI環境で動作する • kubectl の場合、環境の切り替えが必要、設定ミスが起こりやすい • kubeの場合、環境の切り替えは不要、手順ミスが起こりにくい kubectl config user-context <env> kubectl set image deployment/<deployment> <container>=<image>:$GITHUB_SHA kubectl rollout restart deployment/<deployment> kube <env> deploy $GITHUB_SHA
© 2024 Wantedly, Inc. kubectlの設定隠蔽 素のkubectlを設定するのは、開発者にとって大変 kubeが各種設定を隠蔽するため、開発者自身で設定する必要はない kube = kubectl
+ 開発用機能 • kubectlの各種設定隠蔽 • 開発を効率化するための機能
© 2024 Wantedly, Inc. kubectl の各種設定隠蔽① クラスタの切り替え ウォンテッドリーには、sandbox、qa、prodという3つの環境が存在する • kubectlの場合、開発者自身でkubeconfigを設定、手動でクラスタを切り替える
必要がある • kubeの場合、kubeconfigは自動で設定、環境を指定して直接コマンドを実行で きる kubectl config use-context <env> kube get pods kube <env> get pods
© 2024 Wantedly, Inc. kubectl の各種設定隠蔽② 認証情報の設定 ウォンテッドリーでは、OIDC認証している • kubectlの場合、OIDCプロバイダーからトークンを取得し、それをkubeconfigに
設定する必要がある • kubeの場合、↑を自動で実施しており、手動で設定する必要がない
© 2024 Wantedly, Inc. その他機能 kube vault 独自管理しているvaultから秘匿情報を参照、更新、削除するためのコマンド kube <env>
argocd-utils ArgoCDを使って、特定のブランチの k8sマニフェストを反映するためのコマ ンド kube <env> lock 特定の開発者以外のデプロイを禁止するためのコマンド kube <env> status ロック状態を確認するためのコマンド kube <env> canary カナリアリリースを実現するためのコマンド (この後の発表で詳細説明 ) kube <env> sh 任意のコンテナイメージの Podをデプロイする kube <env> bash デバッグに役立つコマンドを内包したコンテナイメージの Podをデプロイする kube <env> history デプロイ履歴を確認するためのコマンド kube <env> fork kubeforkを使用するためのコマンド (この後の発表で詳細説明 )
© 2024 Wantedly, Inc. kubeの内部構造 kubeはGo (+ Cobra) を使って実装している •
Goを使っている理由 ◦ k8sと相性が良い ▪ k8sを操作するためのライブラリが充実している ◦ ツールとして配布しやすい ▪ 環境依存がない ▪ マルチプラットフォーム対応 • 実装上の工夫 ◦ 既存のCLIツールを内包している ▪ 実装コストを抑えるため、既存ツールの知識を再利用するため、client-go などで再実装するのではなく、kubectlをwrapしている
© 2024 Wantedly, Inc. kubeの内部構造 kubeではテストをしやすいように設計している • DIの利用 ◦ Googleが提供しているwireというライブラリを活用している
◦ wireが自動で依存関係を構築してくれる • スナップショットテストの導入 ◦ cupaloyというライブラリを活用している ◦ cupaloyを使うと簡単にスナップショットテストを導入できる ◦ https://speakerdeck.com/izumin5210/techniques-that-support -building-cli-tools-2019-spring
© 2024 Wantedly, Inc. まとめ 「kube = kubectl + 開発用機能」これを開発者に配布することで、ウォンテッドリーに
おけるプラットフォームエンジニアリングを実現している • 開発者体験の向上 ◦ k8sの細かい設定を意識せず、開発できる ◦ kube deployを使えば、Herokuのようにコマンド一発でデプロイ可能 • セルフサービス化 ◦ 開発者がCI/CDを自分で回せる環境を提供 ◦ インフラチームに頼らず、開発者自身でk8sマニフェストを用意できる