クラスターを分割するという運用の現実解
~ Pod を VM のように使い始めたら見えてきた世界 ~
1
© 2023 CASAREAL,Inc.
株式会社カサレアル
野中 翔太
PROFILE
2
© 2023 CASAREAL,Inc.
野中 翔太 / casa_snona
株式会社カサレアル
プロフェッショナルソリューション技術部
・クラウドインフラ関連のお仕事をしています。
・今年、第一子(娘)が生まれました!
Favorite💖
株式会社カサレアル
設立 :1999年7月2日
従業員数:84名(2023年9月現在)
株主構成:テクマトリックス株式会社
所在地 :東京都港区港南1-2-70
品川シーズンテラス 24 階
3
© 2023 CASAREAL,Inc.
事業紹介
4
© 2023 CASAREAL,Inc.
ラーニングサービス
• 研修事業
• オープン研修
• カスタムメイド研修
• 新入社員研修
• 技術支援/内製化支援
クラウドネイティブ
推進支援サービス
• プロフェッショナルサービス
• クラウドネイティブ推進支援
• DevSecOps 環境構築支援
• 開発プロセス/テスト自動化支援
• クラウドネイティブ道場
ビジネス
ソリューション
• 受託開発/SES
• システム構築サービス
• 開発支援サービス
• パッケージサービス
AGENDA
• 運用改善プロジェクトは突然に
• VM から Kubernetes へ
• クラスター分割
• まとめ
5
© 2023 CASAREAL,Inc.
運用改善プロジェクトは突然に
6
© 2023 CASAREAL,Inc.
運用改善プロジェクトは突然に
7
© 2023 CASAREAL,Inc.
上 野
うちに来てくれてる協力会
社さんいるじゃない?
彼らの開発環境なんだけど、
ブラウザ経由でデスクトッ
プにアクセスしてもらって
るんだよね。
はい、いますね。
たしか、ブラウザさえあれ
ばどこでも開発環境にアク
セスできるんですよね。
運用改善プロジェクトは突然に
8
© 2023 CASAREAL,Inc.
上 野
そうそう。
実はあれ、VM を1人1台
構築してあげてるんだよね。
しかも担当者が手動で構築
してインストールとかやっ
てるから結構時間がかかっ
てるんだよ。
そうなんですねぇ。
大変そうですね。
運用改善プロジェクトは突然に
9
© 2023 CASAREAL,Inc.
上 野
かわいそうだと思うよね~
てなわけで助けてあげてほ
しんだよね、お得意なクラ
ウドネイティブで!
あっ、はい…
運用改善プロジェクトは突然に
運用改善チームを結成
10
© 2023 CASAREAL,Inc.
上
運用改善プロジェクトは突然に
課題
• VM の手動構築に時間がかかる
• 協力会社さんの増員後、すぐに開発環境を用意できない
• 手動構築なので設定もれなどがたまにある
11
© 2023 CASAREAL,Inc.
まだ
かな?
運用改善プロジェクトは突然に
改善方針
• 開発環境をコンテナ化
• 複数のコンテナをすぐに起動できる
• コンテナイメージとしてパッケージングすることで再現性の担保
• オーケストレーションするために Kubernetes を導入
12
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
13
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
VM 時代はこんな感じでした
14
© 2023 CASAREAL,Inc.
AWS Cloud
手順書通りに構築
増員分の環境準備
お願いします。
これ終わったら
着手します。
別の案件と掛け持ちしながら...
AWS の UI
変わった?
できあがり!
増員分の EC2 構築
開発ツールインストール
数時間後...
VM から Kubernetes へ
VM で運用していたものを Kubernetes へ
15
© 2023 CASAREAL,Inc.
開発チーム別に構築された EC2 インスタンス
×
開発者数
CI/CD パイプライン
コントローラー×1
エージェント×5
VM から Kubernetes へ
まずは開発環境をコンテナ化
16
© 2023 CASAREAL,Inc.
Kasm が提供する
デスクトップ環境のコンテナイメージを
ベースイメージとしてコンテナ化
VM から Kubernetes へ
(images) とは
• Kasm Workspaces(The Container Streaming Platform®)を開発している企
業が、OSS として公開している Docker イメージ
• デスクトップ環境(VNC)が構築済みのイメージ
• Dockerfile を自由にカスタマイズすることが可能
• カサレアルでは開発環境毎(Java、Python、Node.js etc...)にカスタマイズした
Dockerfile を Git 管理している
17
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
こんな感じの開発環境が出来上がる
18
© 2023 CASAREAL,Inc.
IntelliJ IDEA をインストール
するようにカスタマイズ
ブラウザで開発環境へアクセス
IntelliJ IDEA で簡単な Java
コードを実行
VM から Kubernetes へ
CI/CD 環境をコンテナ化
• Jenkins 自体のコンテナ化は不要
19
© 2023 CASAREAL,Inc.
コントローラーは
Helm Chart でインストール
エージェントは
Jenkins の Kubernetes Plugin
によって動的に作成される
It’s スケーラブル!
VM から Kubernetes へ
Kubernetes Plugin って?
• Kubernetes クラスターで動的エージェントを実行するための Jenkins Plugin
20
© 2023 CASAREAL,Inc.
Kubernetes クラスター
ジョブ実行!
ユーザ コントローラー エージェント
Pod が起動して
ジョブを実行する
ジョブが終了したら
Pod が消滅
VM から Kubernetes へ
Kubernetes へデプロイ
21
© 2023 CASAREAL,Inc.
Kubernetes クラスター
Java 開発チーム Python 開発チーム1
Python 開発チーム2
Front End 開発チーム
CI/CD
VM から Kubernetes へ
Kubernetes で構築プロセスはどうなった?
22
© 2023 CASAREAL,Inc.
構築が簡単に✨
増員分の環境準備
お願いします。
これ終わったら
着手します。
別の案件と掛け持ちしながら...
マニフェストを
アプライ!
できあがり!
Kubernetes クラスター
開発環境
増員!
VM から Kubernetes へ
Kubernetes へ移行してよかったこと①
• 構築作業の簡素化
• 構築にかかる時間を約 80% 削減
• 人的エラーを解消し、再現性を向上
23
© 2023 CASAREAL,Inc.
✨
VM から Kubernetes へ
Kubernetes へ移行してよかったこと②
• 責任分界点の偏りを解消
• クラスターとネットワーク管理は運用チームが責任を持つ
• 環境構築用の Dockerfile は各開発チームが責任を持つ
24
© 2023 CASAREAL,Inc.
アプリ
OS/開発ツール
基盤
ネットワーク
開発チーム
運用チーム
VM
開発チーム
運用チーム
K8s
VM から Kubernetes へ
Kubernetes へ移行してよかったこと③
• AWS 利用料の削減
• 月額の利用料を約 15% 削減
25
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
VM の構築に時間がかかっていた課題は解決
26
© 2023 CASAREAL,Inc.
上
VM から Kubernetes へ
いいことばかりではなく...
27
© 2023 CASAREAL,Inc.
開発環境の動作が全体的に
モッサリしてる!
Jenkins のジョブが
なかなか始まらない...
遅くて仕事にならない!
VM から Kubernetes へ
何が起きたのか?
28
© 2023 CASAREAL,Inc.
Kubernetes クラスター
Java 開発チーム Python 開発チーム1
Python 開発チーム2
Front End 開発チーム
CI/CD
VM から Kubernetes へ
何が起きていたかというと...
29
© 2023 CASAREAL,Inc.
Kubernetes クラスター
Java 開発チーム
リソース全然
足りないぜ🤯
エージェントの Pod
が起動できない💦
VSCode は軽量なはずなのに
なんか重い😥
VM から Kubernetes へ
とりあえずワークアラウンド的解決
• ワーカーノードのノード数増加
• ワーカーノードのスペック向上
これはあるべき姿なのか🤔
30
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
新たな課題
• 特定の高負荷 Pod がクラスター全体の安定性に影響を与えてしまう
• K8s のバージョンアップが行いづらい
• 各チームへのお伺いが必要
• 全てのチームの足並みをそろえざるを得ない
• 納期が近いからもう少し待ってほしい etc...
どこかで聞いたような課題だなぁ🤔
31
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
なんかモノリスっぽいぞ😗
32
© 2023 CASAREAL,Inc.
VM から Kubernetes へ
モダンなプラットフォーム(K8s)であっても
運用がモノリスになりがち
クラスターの責務を分散できないか?
33
© 2023 CASAREAL,Inc.
クラスター分割
34
© 2023 CASAREAL,Inc.
クラスター分割
一般的な複数クラスターの構成パターン
35
© 2023 CASAREAL,Inc.
同じインフラで
複数クラスターを扱う
マルチクラウドで
複数クラスターを扱う
ハイブリットクラウドで
複数クラスターを扱う
今回はこのパターン
クラスター分割
分割単位
• 開発チーム単位と共有リソースで分割
36
© 2023 CASAREAL,Inc.
Kubernetes クラスター
…共有リソース
…開発チームA
…開発チームB
…開発チームC
開発チームA 開発チームB
開発チームC CI/CD
分割前のモノリスクラスター 分割されたクラスター
クラスター分割
複数のクラスターを管理するのは大変じゃないか🤔
37
© 2023 CASAREAL,Inc.
クラスター管理は任せて!
クラスター分割
とは
• Kubernetes 管理プラットフォームの OSS
• ハイブリットやマルチクラウドで KaaS(K8s as a Service) を実現する
• カタログ(Helm Chart)によるアプリの GUI 管理
• アプリ無停止で K8s をバージョンアップ
• グループ化したクラスターへの共通的なリソース作成
38
© 2023 CASAREAL,Inc.
クラスター分割
クラスター分割後の構成
39
© 2023 CASAREAL,Inc.
開発チームA 開発チームB 開発チームC CI/CD
管理クラスター
ブラウザで
操作
ネットワーク経由で
監視・制御
クラスター分割
Rancher を導入してよかったこと①
• 開発環境毎のカタログを GUI で管理できる
40
© 2023 CASAREAL,Inc.
1.カタログを選択
2.「Install」クリック
3.Values 設定
4.「Install」クリック
クラスター分割
Rancher を導入してよかったこと②
• K8s のバージョンアップが容易
• クラスターのコンフィグ変更(GUI)でバージョンアップが可能
• 稼働中の開発環境を無停止でバージョンアップできる
41
© 2023 CASAREAL,Inc.
クラスター分割
Rancher を導入してよかったこと③
• 共通的なリソースの自動作成が容易
• 例)Java 開発環境のクラスターは想定以上のリソースを
利用しないようにリソースクォータを設定
42
© 2023 CASAREAL,Inc.
Java 開発チーム1 Java 開発チーム2
Java 開発グループ
管理クラスター
リソースクォータの
カタログ
まとめ
• VM の開発環境をコンテナ化して K8s へ
• 構築時間を大幅に削減した
• クラスターをチーム単位で分割
• 特定の高負荷 Pod による影響を限定的にした
• K8s のバージョンアップを行いやすくした
• Rancher の導入
• 複数クラスターの管理をしやすくした
43
© 2023 CASAREAL,Inc.
まとめ
数々の課題を解決して無事にミッション達成
44
© 2023 CASAREAL,Inc.
上
まとめ
現状の最適がこの先も最適とは限らない
最高傑作のアーキテクチャに拘らず
柔軟なアーキテクチャを目指すべき
45
© 2023 CASAREAL,Inc.

クラスターを分割するという運用の現実解