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
520
オンプレミスKubernetesへのサービス移行
https://conference.pixiv.co.jp/2024/dev-meetup
lyluck
October 16, 2024
Tweet
Share
Featured
See All Featured
RailsConf 2023
tenderlove
29
940
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Why Our Code Smells
bkeepers
PRO
335
57k
A better future with KSS
kneath
238
17k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
A Philosophy of Restraint
colly
203
16k
Designing Experiences People Love
moore
138
23k
Typedesign – Prime Four
hannesfritz
40
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Thoughts on Productivity
jonyablonski
67
4.4k
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運用を始めた • 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効