こんにちは。Red Hat で、ソリューションアーキテクトをしています花田です。
OpenShift Advanced Cluster Management for Kubernetes (ACM) と AWS 環境への OpenShift の超簡単新規構築!!で、岡野さんが既にご紹介してくれている ACM (Advanced Cluster Management)
という製品の新バージョンが11月にリリースされ、晴れて ACM
2.1となりました。
今回は、この製品が生まれた背景と、製品の概要についてもう少し深掘りしてみたいと思います。
ACM という製品が生まれた背景
一般的には「そろそろキャズムを超えた?」言われている Kubernetes
ですが、一方では、Kubernetes
や、Red Hat
版のKubernetes
である OpenShift
を使って複数のクラスターをデプロイして管理するようなヘビーユーザーも現れ始めました。
開発、ステージング、プロダクション毎に Kubernetes
クラスターを用意する場合もありますし、本番クラスターを多数運用しているケースもでてきてます。
Kubernetes で言う所のクラスター
とは、Master Node
と呼ばれる管理ノードと、それらが管理するWorker Node
というユーザーアプリケーション(コンテナ)が稼働する Node
群をひとまとめにした概念です。
さらに、最近では、5Gの普及を見据えて「ユーザーに近い Edgeで何か処理を行う事で、新しいサービスが開始できるのでは?」という期待も生まれてきています。
Edge 環境にアプリケーションを配布するには、フットプリントの小さいコンテナの使用が期待されており、そうなると当然、全国津々浦々の Edge 環境にコンテナを動かすためのインフラであるKubernetes
のクラスターを設置したい。という話がでてきます。(リモート環境に、Kubernetes
クラスターを配置するのではなく、コンテナを動かす Worker Node
だけを遠隔の Edge に配置するというアイディアもありますが、その話はまたどこかの機会に…)
そう言った背景もあり、Kubernetes
のクラスターをたくさん管理しなければいけない時代というのが、一部では始まっている or 始まりつつある状況になっています。
このような状況の中で顕在化してきた問題が、多数のKuberentes
クラスターをどのように効率的に管理するか。という問題です。例えば、数個の Kuberentes
クラスターであれば、一つ一つの手作業でも運用可能と言えるでしょう。
しかし Kuberentes
クラスターの数が多ければ、その運用管理に目眩がしてくる事が予想されます。
終電で帰る事を目標にしていたら、いつのまにか始発で帰る事に目標がすり替わって、幾つもの夜を越える事になるかも知れません。
こうした状況の中で生まれてきたのが、今回ご紹介するRed Hat Advanced Cluster Management for Kubernetres
、通称 ACM
です。
ACM
ができる事は、大まかに4つあります。
1.管理対象のクラスターの可視化
管理対象のクラスターのモニタリング機能や、管理しているリソースの検索機能等を提供しています。
Kubernetes
の世界では Observability(可観測性)
という単語がよく出てきますが、ここではシンプルに「可視化」と呼んでも良いでしょう。
2.クラスターのライフサイクル管理
ここで言うライフルサイクルは、クラスタの作成・削除・アップグレードを指します。OpenShift
クラスターをパブリック・クラウド・プロバイダーなどの環境に簡単にデプロイする事が可能です。
3.クラスターをまたがったアプリケーションのデプロイ
指定したクラスター、namespace
等にアプリケーションを配布する事が可能です。
4.クラスターに対する統一したポリシーの適用
これは各クラスターに管理用のnamespace
を必ず作成したい、セキュリティのポリシー
があってそれを適用したい。等の要件があった時に、ポリシーを作成して対象としたい クラスター
やnamespace
にデプロイしてポリシー
違反を検知・修正する事ができるようになります。
どんな環境をサポートするか?
ACM
は、Hub クラスター
と呼ばれるクラスターから管理対象となる Kubernetes
クラスターを管理します。管理対象のクラスターを Managed クラスター
と呼びます。管理されるクラスターなので、受動態になって Managedクラスターです。
ACM
の Hub クラスター
(管理対象をまとめる「親」)のインストール先として、サポートされるのは、 Red Hat
OpenShift
だけになります。
ACM
自身は、 Pod
の集合体ですので、他のユーザー・アプリケーションとも同居できますが、それなりにリソースを要求するため、運用も考えて、基本的には、ACM
専用の Hub クラスター
を作成する事をおすすめしています。
一方で管理対象の Managed クラスター
としては、OpenShift
の他に、AKS
、EKS
、GKE
等の Kubernetes
もサポートしています。
これは、ACM
Hub クラスター
から見ると、管理は Kubernetes
の APIサーバー
を通したものになるものになるため、Certify された Kubernetes
であれば、共通のプロトコルで話す事ができるからです。
原理的には、Kuberntes
であれば、管理対象に追加できるはずですが、ACM
は商用サポートを提供する製品ですので、テストが行われた正確なサポート対象というものが定義されています。
また、クラスターの作成・削除等の Kubernetes
より下のインフラーレイヤーが関わる作業は、インフラを部分を提供するベンダー(パブリック・クラウド・プロバイダー/仮想化環境ベンダー/物理環境のベンダー) のAPIやサービス依存の部分があったり、クラスターの更新は Kuberntes
を提供するベンダーのサービスによって独自のコンポーネントを含むものとなるため、環境によって必要な作業は異なってきます。
ACM
のサポート範囲は、環境に異なる部分があるため、詳細をお知りになりたい方は、以下のリンクをご参照ください。
Red Hat Advanced Cluster Management for Kubernetes 2.1 Support Matrix
管理対象クラスターの可視化
ACM
から作成されたクラスター、ACM
にインポートされたクラスターはダッシュボードから一元的に確認する事ができます。
このダッシュボードでは、環境内でデプロイされているクラスターの接続状態や、Nodeの数、Pod の数、コンプライアンスの状態 etc…等が表示されています。
また、Kuberntes
は、リソース
というオブジェクトの集合体です。namespace
や、ConfigMap
、Pod
、Node
、Role
…と様々なリソース
から構成されています。
ACM
では、環境で起きた問題や現在の設定を確認するために、これらのリソース
を検索して見つけ出すDynamic Search
機能を提供しています。
例えば、多数のクラスターがある環境でも、特定の cluster
のある namespace
に所属するPod
の一覧を検索条件で指定して表示するような事がDynamic Search
機能で可能になっています。
クラスターのライフサイクル管理
2つめの大きな柱の機能として「クラスターのライフサイクル管理」があります。
これは、ACM
の Hub クラスター
から、OpenShift
クラスターを「作成」「削除」「更新」する事のできる機能です。
各クラウド・プロバイダーや仮想化環境等を操作するためのクレデンシャル情報等を事前に作成しておく必要はありますが、それができていれば、コンソール画面から Worker Node
等の本数やスペックを選択して、新規の OpenShift
クラスターを簡単にデプロイする事ができます。
また、ACM
2.1 からは、vSphere
環境、Baremetal
環境への OpenShift
クラスターのデプロイもサポート対象に加わりました。
これらの機能は、内部的には、OpeShift
4.6 からサポートされた vSphere
環境、Baremetal
環境への IPI(Installer-Provisioned Infrastructuer)
を使用しています。IPI
とはある一定の条件が整っている環境 (DNS
に事前に必要なベースドメインが登録されている等。対象とする環境によって条件が異なる) であれば、OpenShift
の Node
OSのインストールから、その上の OpenShift
ソフトウェアのインストールまでを自動化してくれるインストール方式です。
ただし、AKS
、EKS
、GKS
と言ったクラウド・プロバイダー独自のKubernetes
サービスについては、クラスターの作成等の機能はサポートされていません。これらのクラウド・プロバイダー独自の Kubernetes
サービスについては、既に作成されているクラスターをインポート
して、管理対象に加える事が可能です。インポート
する事で「アプリケーショ
のデプロイ」や「ポリシー
のデプロイ」を使用した管理を行う事ができるようになります。
アプリケーションのデプロイ
3つ目の大きな柱の機能として「アプリケーション
のデプロイ」があります。
これはアプリケーション
を定義しておき、ラベル
を使用して、ラベル
の条件が一致するクラスターに対してアプリケーション
をデプロイする機能です。
「アプリケーション
のデプロイ」では、ラベル
を使用する事で、特定の namespace
にだけアプリケーション
をデプロイすることや、dev
ラベルが付いている環境にだけアプリケーション
をデプロイする。等のように細かくアプリケーション
のデプロイ先を指定する事ができます。
これらのアプリケーション
は、YAMLで定義されます。アプリケーション
のパッケージングの具体的な情報(deplyment
、PVC
、Service
等のリソース定義)は、GitHub
等のレポジトリに置かれているものをアプリケーション
の定義から参照する形になります。
尚、ACM
2.0を触った事がある方、向けの話になりますが、ACM
2.0では、一つのアプリケーション
を作成するのに、それに紐付く「チャネル」「サブスクリプション」「デプロイメント」などのカスタム・リソース
をそれぞれ作成しないといけませんでしたが、ACM
2.1ではそれらのカスタム・リソース
を意識しなくても GUIの設定のみでアプリケーション
を作成できるように改善されました。
ACM
は、アプリケーションのチャネル
(YouTube のチャネルと同じイメージです。デプロイ対象のアプリケーションのレポジトリを表します。) を常に監視しており、変更があった場合、自動的に更新されたアプリケーション
のデプロイを開始します。
例えば、GitHub
上で開発用のdevelopment
ブランチと、本番用のproduction
ブランチを作成していたとします。
ACM
を使用すると、devlopment
ブランチに更新があった場合、development
ブランチのアプリケーションをdevクラスター
にデプロイさせるように構成する事ができます。また、GitHub
上で、そのコードが production
ブランチにマージされたタイミングで、prodクラスター
にproduction
ブランチのアプリケーションをデプロイするという事も可能です。
その他にもアプリケーション
をデプロイしたくない時間帯を指定したり、反対にアプリケーション
をデプロイしたい時間帯を指定する事が可能になっています。
ポリシーによるガバナンスとリスク管理
4つ目の大きな柱は、ポリシー
による環境のコンプライアンス管理です。
管理者がポリシーを YAML で作成して、クラスターに配布して、ポリシー
に適合している設定が行われているか確認する事ができます。
ポリシー
違反や現在のポリシー
の遵守情報は、ACM
のダッシュボード画面に表示されます。
このポリシー
の配布も、アプリケーションの配布と同じように、ラベル
によってポリシーの配布対象を特定のクラスターだったり、特定のnamespace
に限定する事が可能です。
またポリシー
の内容にもよりますが、修正できる内容であれば、ポリシー
違反があった場合に自動でポリシー
に適合するように修正を行うように指定する事も可能です。
ポリシー
はある程度 GUIで書くことが可能ですが、現実的には YAML でゴリゴリとポリシー
を作成して行く事になると思います。
とは言え、そう言った作業を楽にするためのサンプルのポリシー
が提供されており、GitHub
で公開されています。これらのポリシー
の一部のワードを自分の環境用に書き替える事で、簡単にポリシー
の作り方を学ぶ事ができます。
ポリシー
については、製品としてバンドルされているものと、コミニティ版が存在していて、どちらもGitHub
で公開されています。
実際にポリシー
を使用してどのような事ができるかは、これらのサンプルを見るのが一番わかりやすいと思います。
製品にバンドルされているポリシー
コミニティ作成のポリシー
ACM の今後
ACM
は、現状では OpenShift
と同じで、3ヶ月毎のリリースが予定されています。
今回は、ACM
の基本的な機能部分の概略だけを解説しましたが、ACM
2.1 では、Red Hat
の自動化ツールであるAnsible
との連携のTech Preview
が開始されたり、統合モニタリング機能としてPrometheus
で収集したデータをHubクラスター
で見るためのダッシュボード、ポリシー
管理の方法としてGatekeeper
への対応などが盛り込まれました。
これらについては追々解説して行きたいと思います。