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
840
オンプレミスKubernetesへのサービス移行
https://conference.pixiv.co.jp/2024/dev-meetup
lyluck
October 16, 2024
Tweet
Share
Featured
See All Featured
Docker and Python
trallard
44
3.5k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Writing Fast Ruby
sferik
628
62k
Making Projects Easy
brettharned
116
6.3k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Being A Developer After 40
akosma
90
590k
RailsConf 2023
tenderlove
30
1.1k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
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運用を始めた • 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効