オンプレミスKubernetesへのサービス移行
by
lyluck
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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運用を始めた ● 管理工数は大きいが費用削減や オンプレミスと通信する場合、有効