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
890
オンプレミスKubernetesへのサービス移行
https://conference.pixiv.co.jp/2024/dev-meetup
lyluck
October 16, 2024
Tweet
Share
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Building an army of robots
kneath
306
45k
How to Ace a Technical Interview
jacobian
279
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Docker and Python
trallard
45
3.5k
Making Projects Easy
brettharned
117
6.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
A Tale of Four Properties
chriscoyier
160
23k
Bash Introduction
62gerente
614
210k
For a Future-Friendly Web
brad_frost
179
9.9k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
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運用を始めた • 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効