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
オンプレミスKubernetesへのサービス移行
Search
lyluck
October 16, 2024
0
1k
オンプレミスKubernetesへのサービス移行
https://conference.pixiv.co.jp/2024/dev-meetup
lyluck
October 16, 2024
Tweet
Share
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
YesSQL, Process and Tooling at Scale
rocio
174
15k
Speed Design
sergeychernyshev
32
1.2k
Writing Fast Ruby
sferik
630
62k
The Cult of Friendly URLs
andyhume
79
6.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
910
Embracing the Ebb and Flow
colly
88
4.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Transcript
オンプレミス Kubernetesへの サービス移行 lyluck
• 2022年12月 ピクシブ中途入社 • 技術開発本部 インフラ部 ソリューションアーキテクト チーム • ピアノと音ゲーが趣味
lyluck
• なぜオンプレミスKubernetes? • クラスタ構築 • 良かった点と悪かった点 話すこと
なぜオンプレミス Kubernetes?
サーバーの準備には 時間がかかる!
サーバーの準備 1. 見積もり(1ヶ月) 2. 調達(半年) 3. セットアップ 4. テスト 5.
監視設定 6. アプリケーション が動く
Kubernetesの場合 1. コンテナを用意する 2. マニフェストファイルを書く 3. アプリケーションが動く
メンテナンスが大変
サーバーのメンテナンス • サーバーの入れ替え • スケールアウト・スケールイン
サーバーのメンテナンス • 開発チームとの調整が必要 • どのサーバーが対象? • デプロイ禁止の時間帯
Kubernetesの場合 • 調整不要 • アプリケーションを 自動で適切なノードへ割り当て
クラウドじゃダメ?
実例をみてみよう
オンプレKubernetes実例 • VRoid Hub • pixiv Sketch • FANBOXプリント •
Airflow (バッチ) • Rendertron (SEO)
クラウド(GKEなど)実例 • pixiv Ads (広告) • Sentry (監視) • IAP
(認証プロキシ) • GitLab Runner (CI/CD) • Rendertron (SEO)
オンプレ vs クラウド
オンプレ クラウド スケーラビリティ ✅ 管理工数 ✅ 費用 ✅ カスタマイズ ✅
クラウド連携 ✅ オンプレ通信コスト ✅
pixiv Ads (広告): クラウド • トラフィックの激しい増加がある • オンプレと通信しない
Airflow (バッチ): オンプレ • オンプレと通信する • セキュリティの観点でインターネットを 通したくない
Rendertron (SEO): ハイブリッド • 元々はクラウド • オンプレと通信しない • クラウドの料金を削減したい
オンプレKubernetesが 有効な場合もある!
VRoid Hub の移行事例
もともとの構成 • 手動スケール • スパイクがある • オンプレと通信する > オンプレK8s
移行後 • スケール対象をK8s化 • オートスケール • サーバー数が減った
クラスタ構築
使ったもの • kubespray • k0s, k0sctl • MetalLB
kubespray https://github.com/kubernetes-sigs/kubespray
kubespray使ってみた • Kubernetes SIGs管理 • 中身はAnsible • Ansibleは社内実績が多い
kubespray合わなかった • 実行に時間がかかる • Ansible二重管理が辛い ◦ pixivではホストセットアップにも Ansibleを使う
k0s https://github.com/k0sproject/k0s
k0sを採用 • バイナリひとつで大体動く • Kubernetes本体への変更がない • 起動がはやい
k0sctl • k0sを使ってクラスタのIaC • 簡単にk0sクラスタを構築できる
k0sctl.yaml – クラスタ設定ファイル
• kustomizeで複数クラスタを差分で管理 • GitLab CIからデプロイ k0sctl
MetalLB https://github.com/metallb/metallb
MetalLB • 外部ロードバランサーの実装 • サービスをクラスタ外部へ公開する • オンプレだと標準実装がない
クラスタ運用
product A product B product C Argo CD namespace A
namespace B namespace C
マルチテナント • プロダクトごとのnamespace • プロダクトごとのマニフェストrepo
権限管理: 権限分離 • 複数の部署が同一クラスタを使うので 権限を分割する • namespace単位で分離
権限管理: OneLogin • pixivではOneLoginを利用する ◦ SSO, ID管理 • OneLoginと連携して所属部署から 自動権限割り当て
アプリケーション管理: Argo CD • Kubernetesリソースの確認・操作 • アプリケーションログ
アプリケーション管理: Datadog • pixivでは監視をDatadogに統一している • CPU, メモリ, パフォーマンス
アプリケーション管理: kubectl • クラスタ管理者のみ
アップグレード • Kubernetes本体 • エコシステム ◦ Argo CD, Datadogなどいろいろ
アップグレード: Kubernetes • k0sctlがいい感じにやってくれる
アップグレード: Kubernetes 1. k0sctl.yamlを書き換える 2. k0sctl apply name: my-k0s-cluster spec:
k0s: - version: "v1.28.12+k0s.0" + version: "v1.29.7+k0s.0" hosts: - role: controller installFlags:
k0sctl applyで起きること • controlplaneのアップグレード • workerを1台ずつ drain > アップグレード >
uncordon
アップグレード: エコシステム • GitLab CIから定期的にRenovate • エコシステムのリリースを検知+MR作成 • 自動マージはしない
良かった点と悪かった点
良かった点
良かった点 • 開発側と無調整でメンテできる • 構成変更が簡単
開発側と無調整でメンテできる • クラスタのホストのメンテナンス • 開発側はインフラを気にせずデプロイ可
構成変更が簡単 • ほぼコミットのみで変更(IaC) • 適用が早い • ロールバックが簡単ですみやか
悪かった点
悪かった点 • わからないことが多い • アップグレードが大変
わからないことが多い • 問題が発生した時、だいたい初見 • K8sだけでも複雑だが オンプレとK8sの組み合わせで さらに難解
アップグレードが大変 • 回数が多い • EOLまでが短い • チェンジログは小さくない
まとめ
まとめ • オンプレミスKubernetes運用を始めた • 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効