オンプレミスKubernetesへのサービス移行
by
lyluck
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
オンプレミス Kubernetesへの サービス移行 lyluck
Slide 2
Slide 2 text
● 2022年12月 ピクシブ中途入社 ● 技術開発本部 インフラ部 ソリューションアーキテクト チーム ● ピアノと音ゲーが趣味 lyluck
Slide 3
Slide 3 text
● なぜオンプレミスKubernetes? ● クラスタ構築 ● 良かった点と悪かった点 話すこと
Slide 4
Slide 4 text
なぜオンプレミス Kubernetes?
Slide 5
Slide 5 text
サーバーの準備には 時間がかかる!
Slide 6
Slide 6 text
サーバーの準備 1. 見積もり(1ヶ月) 2. 調達(半年) 3. セットアップ 4. テスト 5. 監視設定 6. アプリケーション が動く
Slide 7
Slide 7 text
Kubernetesの場合 1. コンテナを用意する 2. マニフェストファイルを書く 3. アプリケーションが動く
Slide 8
Slide 8 text
メンテナンスが大変
Slide 9
Slide 9 text
サーバーのメンテナンス ● サーバーの入れ替え ● スケールアウト・スケールイン
Slide 10
Slide 10 text
サーバーのメンテナンス ● 開発チームとの調整が必要 ● どのサーバーが対象? ● デプロイ禁止の時間帯
Slide 11
Slide 11 text
Kubernetesの場合 ● 調整不要 ● アプリケーションを 自動で適切なノードへ割り当て
Slide 12
Slide 12 text
クラウドじゃダメ?
Slide 13
Slide 13 text
実例をみてみよう
Slide 14
Slide 14 text
オンプレKubernetes実例 ● VRoid Hub ● pixiv Sketch ● FANBOXプリント ● Airflow (バッチ) ● Rendertron (SEO)
Slide 15
Slide 15 text
クラウド(GKEなど)実例 ● pixiv Ads (広告) ● Sentry (監視) ● IAP (認証プロキシ) ● GitLab Runner (CI/CD) ● Rendertron (SEO)
Slide 16
Slide 16 text
オンプレ vs クラウド
Slide 17
Slide 17 text
オンプレ クラウド スケーラビリティ ✅ 管理工数 ✅ 費用 ✅ カスタマイズ ✅ クラウド連携 ✅ オンプレ通信コスト ✅
Slide 18
Slide 18 text
pixiv Ads (広告): クラウド ● トラフィックの激しい増加がある ● オンプレと通信しない
Slide 19
Slide 19 text
Airflow (バッチ): オンプレ ● オンプレと通信する ● セキュリティの観点でインターネットを 通したくない
Slide 20
Slide 20 text
Rendertron (SEO): ハイブリッド ● 元々はクラウド ● オンプレと通信しない ● クラウドの料金を削減したい
Slide 21
Slide 21 text
オンプレKubernetesが 有効な場合もある!
Slide 22
Slide 22 text
VRoid Hub の移行事例
Slide 23
Slide 23 text
もともとの構成 ● 手動スケール ● スパイクがある ● オンプレと通信する > オンプレK8s
Slide 24
Slide 24 text
移行後 ● スケール対象をK8s化 ● オートスケール ● サーバー数が減った
Slide 25
Slide 25 text
クラスタ構築
Slide 26
Slide 26 text
使ったもの ● kubespray ● k0s, k0sctl ● MetalLB
Slide 27
Slide 27 text
kubespray https://github.com/kubernetes-sigs/kubespray
Slide 28
Slide 28 text
kubespray使ってみた ● Kubernetes SIGs管理 ● 中身はAnsible ● Ansibleは社内実績が多い
Slide 29
Slide 29 text
kubespray合わなかった ● 実行に時間がかかる ● Ansible二重管理が辛い ○ pixivではホストセットアップにも Ansibleを使う
Slide 30
Slide 30 text
k0s https://github.com/k0sproject/k0s
Slide 31
Slide 31 text
k0sを採用 ● バイナリひとつで大体動く ● Kubernetes本体への変更がない ● 起動がはやい
Slide 32
Slide 32 text
k0sctl ● k0sを使ってクラスタのIaC ● 簡単にk0sクラスタを構築できる
Slide 33
Slide 33 text
k0sctl.yaml – クラスタ設定ファイル
Slide 34
Slide 34 text
● kustomizeで複数クラスタを差分で管理 ● GitLab CIからデプロイ k0sctl
Slide 35
Slide 35 text
MetalLB https://github.com/metallb/metallb
Slide 36
Slide 36 text
MetalLB ● 外部ロードバランサーの実装 ● サービスをクラスタ外部へ公開する ● オンプレだと標準実装がない
Slide 37
Slide 37 text
クラスタ運用
Slide 38
Slide 38 text
product A product B product C Argo CD namespace A namespace B namespace C
Slide 39
Slide 39 text
マルチテナント ● プロダクトごとのnamespace ● プロダクトごとのマニフェストrepo
Slide 40
Slide 40 text
権限管理: 権限分離 ● 複数の部署が同一クラスタを使うので 権限を分割する ● namespace単位で分離
Slide 41
Slide 41 text
権限管理: OneLogin ● pixivではOneLoginを利用する ○ SSO, ID管理 ● OneLoginと連携して所属部署から 自動権限割り当て
Slide 42
Slide 42 text
アプリケーション管理: Argo CD ● Kubernetesリソースの確認・操作 ● アプリケーションログ
Slide 43
Slide 43 text
アプリケーション管理: Datadog ● pixivでは監視をDatadogに統一している ● CPU, メモリ, パフォーマンス
Slide 44
Slide 44 text
アプリケーション管理: kubectl ● クラスタ管理者のみ
Slide 45
Slide 45 text
アップグレード ● Kubernetes本体 ● エコシステム ○ Argo CD, Datadogなどいろいろ
Slide 46
Slide 46 text
アップグレード: Kubernetes ● k0sctlがいい感じにやってくれる
Slide 47
Slide 47 text
アップグレード: 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:
Slide 48
Slide 48 text
k0sctl applyで起きること ● controlplaneのアップグレード ● workerを1台ずつ drain > アップグレード > uncordon
Slide 49
Slide 49 text
アップグレード: エコシステム ● GitLab CIから定期的にRenovate ● エコシステムのリリースを検知+MR作成 ● 自動マージはしない
Slide 50
Slide 50 text
良かった点と悪かった点
Slide 51
Slide 51 text
良かった点
Slide 52
Slide 52 text
良かった点 ● 開発側と無調整でメンテできる ● 構成変更が簡単
Slide 53
Slide 53 text
開発側と無調整でメンテできる ● クラスタのホストのメンテナンス ● 開発側はインフラを気にせずデプロイ可
Slide 54
Slide 54 text
構成変更が簡単 ● ほぼコミットのみで変更(IaC) ● 適用が早い ● ロールバックが簡単ですみやか
Slide 55
Slide 55 text
悪かった点
Slide 56
Slide 56 text
悪かった点 ● わからないことが多い ● アップグレードが大変
Slide 57
Slide 57 text
わからないことが多い ● 問題が発生した時、だいたい初見 ● K8sだけでも複雑だが オンプレとK8sの組み合わせで さらに難解
Slide 58
Slide 58 text
アップグレードが大変 ● 回数が多い ● EOLまでが短い ● チェンジログは小さくない
Slide 59
Slide 59 text
まとめ
Slide 60
Slide 60 text
まとめ ● オンプレミスKubernetes運用を始めた ● 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効