Rancher で複数の k8s クラスタを可視化する
はじめに
近年ではマルチクラスタやマルチクラウドを利用するケースも多くなってきており、複数の k8s クラスタをまとめて可視化・管理できるようなツールも増えてきています。ただ管理と言っても、単にクラスタの使用状況を可視化できれば充分というレベルから、ロギングやメトリクスレベルでの監視、複数クラスタへのデプロイやクラスタのアップグレードまで管理できる必要があるなど、どのレベルまでの管理を目的とするかによって最適なツールは異なってきます。
ここではローカルに複数の k8s クラスタが存在する状況を想定して、各クラスタの使用状況(cpu, メモリの使用状況など)が web UI から一括で確認できれば良いことを目的として以下のような条件を考えます。
- OSS である。
- Web UI からクラスタのリソースや使用状況を確認できる。
- 複数クラスタへのデプロイやアップグレードまでの機能はなくても良い。
上記の条件が実現できそうな k8s クラスタ管理ツールを探してみると Rancher が良さそうだったので、実際に使って使用感について見てみます。
Rancher について
Rancher は k8s 用のコンテナ管理プラットフォームとなっています。
Rancher では web UI を通じて DevOps エンジニアや IT 管理者がアプリケーションに必要なインフラストラクチャ(k8s ノードやクラスタ)を用意したり、クラスタの管理・アップデート・モニタリング、アクセスコントロールやポリシーの監視等々、アプリケーションの継続的な開発・運用に必要な操作を一元的に管理することをコンセプトにしています。
組織における Rancher の役割。DevOps エンジニアがアプリケーションの展開、IT 管理者がインフラの管理を rancher で管理することをコンセプトにしている。Overview より引用
そのため複数クラスタを管理する以外にも様々な機能がありますが、ここでは外部で作成された k8s クラスタを一括で管理する部分に焦点を絞って見ていきます。
Rancher インストール
インストール方法 に記載の通りいくつかの環境にインストールできますが、ここでは既存の k8s クラスタに helm を利用してインストールします。helm でのインストール方法の詳細は こちらを参照。
まずは helm repo を登録。
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
リソース展開用の namespace を作成。
kubectl create namespace cattle-system
rancher ではサーバーとの通信に TLS が必要で、以下 3 つのオプションがあります。
- Rancher が自動で生成する TLS 証明書を使用する。
- cert-manager (Let's Encrypt) の証明書を使用する。
- 独自に作成した証明書を使用する。
ここでは事前に準備した独自の CA 証明書とサーバ証明書を利用します。作成自体は割愛。
まずは CA 証明書を secret に保存します。内部的な処理で cacerts.pem
を検索するようなので CA 証明書のファイル名は cacerts.pem
に合わせる必要があります。
kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem
次に rancher 用のサーバー証明書と秘密鍵のファイル名をそれぞれ tls.crt
, tls.key
として secret に保存。これは rancher svc にアクセスする際の ingress で使用されます。
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
コマンドについては以下に詳細が記載されています。
次に作成した secret やサーバーの設定を適用するために helm chart の values.yml
を書き換えます。helm show values rancher-latest/rancher > values.yml
で values.yml をファイルに書き出して以下のように編集。
-
hostname
: rancher の FQDN。好きなドメイン名で良い。 -
ingress.ingressClassName
: クラスタ内で使っている ingress controller に合わせて設定 -
ingress.tls.source
: 独自の証明書を使用するので secret に設定 -
privateCA
: 独自の CA 証明書を使用するので true に設定 -
bootstrapPassword
: rancher bootstrap に使用されるパスワード。好きな値で良い。
- hostname: rancher.my.org
+ hostname: rancher.ops.com
ingress:
- ingressClassName: ""
+ ingressClassName: "nginx"
tls:
- source: rancher
+ source: secret
- privateCA: false
+ privateCA: true
- bootstrapPassword: ""
+ bootstrapPassword: admin
準備ができたらインストールを実行。
helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--values values.yml
インストールが完了してしばらく待つと rancher pod, svc, ingress やその他必要なリソースが作成されます。
$ k get pod,svc,ingress
NAME READY STATUS RESTARTS AGE
pod/rancher-5859b986b5-4m5qw 1/1 Running 0 24h
pod/rancher-5859b986b5-hbbqd 1/1 Running 0 24h
pod/rancher-5859b986b5-v7btl 1/1 Running 0 24h
pod/rancher-webhook-77b49b9ff9-fxbrn 1/1 Running 0 24h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rancher ClusterIP 10.101.188.8 <none> 80/TCP,443/TCP 24h
service/rancher-webhook ClusterIP 10.104.107.181 <none> 443/TCP 24h
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/rancher nginx rancher.ops.com 80, 443 24h
ブラウザから ingress のホスト名 (ここでは rancher.ops.com) を入れることで rancher のダッシュボードにアクセスできます。初回アクセス時は admin user のパスワード設定などを行います。
- bootstrap Password:
value.yml
内で指定したパスワードを入力 - Server URL: rancher サーバーの URL を決める(後から変更できる)。指定した URL が manifest をダウンロードする際の url に指定されるので外部からアクセス可能なドメイン名に設定するのが良い。
-
By checking the box, you accept the End User License Agreement & Terms & Conditions
にチェックを入れる。 -
Allow collection of anonymous statistics to help us improve rancher
のチェックは任意
continue を押すと web UI のトップ画面が表示されます。次回以降のログインは user: admin, password: 上記で設定した値
でログインできます。
セットアップ時には helm を実行した k8s クラスタが local
という名前ですでに登録されています。
登録済みのクラスタでは pod, node, リソース数や cpu, memory 使用状況、kubernetes のバージョンといった基本的な情報や、k8s events, などが一覧で確認できます。
登録したクラスタから確認できる情報
ダッシュボードから確認できる情報についてざっと見ていきます。
Cluster
cluster では namespace, node の詳細などが確認できます。
ノードの詳細ではリソース使用量やその node 上で起動している pod の詳細、node 上にあるコンテナイメージ等が見れます。基本的に kubectl describe node
で取得できる情報は取れてそう。
デフォルト設定では(たぶん)ノードの CPU/memory 使用率のメトリクスが取得できず、metrcis-server を別途手動でインストールする必要があります。
Apps からMonitoring App をインストールすることで、クラスタレベルやノードレベルのメトリクスの時間変化をダッシュボードから確認できるようになります。
内部的には Monitoring App のインストールにより kube-prometheus-stack をベースにした helm chart がデプロイされ、その中の prometheus が収集したメトリクスを表示しているようです。画面内の Grafana
リンクをクリックすると grafana 側のダッシュボードも確認できます。
モニタリングの仕組みは How Monitoring Works を参照。
Apps
rancher では用途に合わせたアプリケーションを UI から helm chart としてインストールできるようになっており、これを App と呼んでいます。apps のページでは事前に用意されている App のリストやインストール済み app が表示されます。また、rancher 外でクラスタにインストールされた helm release も確認できます。
workload
workload では pod, job など cpu/memory を使用するリソースの一覧が表示されます。
pod の詳細ではマニフェストの内容や pod 内のコンテナ、関連づいているリソースなどが確認できます。
Service Discovery
service Discovery では svc や ingress などネットワーク関連のリソースが表示されます。
Storage
storage では pv, pvc, configmap, secret などが見れます。
secret の詳細では encode された値が表示されますが、右上の目マークを切り替えることで decode した生データを確認することもできます。
Policy
policy は Limit Ranges, Network Policies, Pod Disruption Budgets, Resource Quotas など制限に関するリソースが表示されます。
More Resources
more resources では上記以外のリソースやカスタムリソースが表示されます。ただリソースの種類によってはマニフェストしか確認できないなど、参照できる情報はリソースによってまちまち。
クラスタの追加
rancher で管理する k8s クラスタは rancher から作成したクラスタの他、rancher 外で作成した既存の k8s クラスタを登録(インポート)して管理することもできます。ただし k8s クラスタの種類によって利用できる機能に一部制限があります。Management Capabilities for Registered Clusters によると、登録するクラスタの種類は以下の 3 つに分類されています。
- RKE2, k3s クラスタ
- K3S か RKE2 で作成したクラスタが該当。
- EKS, AKS, GKE クラスタ
- aws, azure, google cloud の各マネージド k8s サービスで作成されたクラスタが該当。
- その他のクラスタ
- オンプレで kubeadm を使って作成したクラスタなど上記以外の方法で作成されたクラスタが該当。
ローカルに構築した k8s クラスタは 3 つめの その他のクラスタ
になるので、こちらを元に登録作業を実行します。
まず UI 左下の Cluster Management
を選択し、右上にある Import Existing
をクリック。
Import では下の import any kubernetes clsuter
を選択。
Cluster Name
で追加するクラスタの表示名を決める。これはあくまで rancher UI 上での表示名なので kubeconfig の cluster 等と一致させる必要はない。
その他はデフォルトのままで ok。できたら右下の Create
をクリック。
するとクラスタの登録状態は Pending
となり、登録用のマニフェストを適用するためのコマンドがいくつか表示されます。
コマンドはいずれも rancher サーバーからマニフェストを取得して kubectl apply
で適用するだけなので、追加するクラスタで直接実行しても良いし、別の場所で一旦ダウンロードしてから対象クラスタに適用する形でも良いです。
ちなみにマニフェストの中身は rancher と通信するための agent deployment や必要なリソースを作成するためのものになっています。
マニフェストの中身の一例
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: proxy-clusterrole-kubeapiserver
rules:
- apiGroups: [""]
resources:
- nodes/metrics
- nodes/proxy
- nodes/stats
- nodes/log
- nodes/spec
verbs: ["get", "list", "watch", "create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: proxy-role-binding-kubernetes-master
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: proxy-clusterrole-kubeapiserver
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: kube-apiserver
---
apiVersion: v1
kind: Namespace
metadata:
name: cattle-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: cattle
namespace: cattle-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cattle-admin-binding
namespace: cattle-system
labels:
cattle.io/creator: "norman"
subjects:
- kind: ServiceAccount
name: cattle
namespace: cattle-system
roleRef:
kind: ClusterRole
name: cattle-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
name: cattle-credentials-f9fd3bb
namespace: cattle-system
type: Opaque
data:
url: xxx
token: xxx
namespace: ""
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cattle-admin
labels:
cattle.io/creator: "norman"
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cattle-cluster-agent
namespace: cattle-system
annotations:
management.cattle.io/scale-available: "2"
spec:
selector:
matchLabels:
app: cattle-cluster-agent
template:
metadata:
labels:
app: cattle-cluster-agent
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: node-role.kubernetes.io/controlplane
operator: In
values:
- "true"
weight: 100
- preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: In
values:
- "true"
weight: 100
- preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: In
values:
- "true"
weight: 100
- preference:
matchExpressions:
- key: cattle.io/cluster-agent
operator: In
values:
- "true"
weight: 1
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/os
operator: NotIn
values:
- windows
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- cattle-cluster-agent
topologyKey: kubernetes.io/hostname
weight: 100
serviceAccountName: cattle
tolerations:
# No taints or no controlplane nodes found, added defaults
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
value: "true"
- effect: NoSchedule
key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
- effect: NoSchedule
key: "node-role.kubernetes.io/master"
operator: "Exists"
containers:
- name: cluster-register
imagePullPolicy: IfNotPresent
env:
- name: CATTLE_IS_RKE
value: "false"
- name: CATTLE_SERVER
value: "https://rancher.ops.com:32324"
- name: CATTLE_CA_CHECKSUM
value: "9d4c6352e0520aa9d596af5fbf6d58f71948307a096275460f955d8b15266272"
- name: CATTLE_CLUSTER
value: "true"
- name: CATTLE_K8S_MANAGED
value: "true"
- name: CATTLE_CLUSTER_REGISTRY
value: ""
- name: CATTLE_SERVER_VERSION
value: v2.9.2
- name: CATTLE_INSTALL_UUID
value: 1dce8224-8328-4fa5-9dd9-2e45575220e7
- name: CATTLE_INGRESS_IP_DOMAIN
value: sslip.io
- name: STRICT_VERIFY
value: "true"
image: rancher/rancher-agent:v2.9.2
volumeMounts:
- name: cattle-credentials
mountPath: /cattle-credentials
readOnly: true
volumes:
- name: cattle-credentials
secret:
secretName: cattle-credentials-f9fd3bb
defaultMode: 320
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
---
apiVersion: v1
kind: Service
metadata:
name: cattle-cluster-agent
namespace: cattle-system
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 444
protocol: TCP
name: https-internal
selector:
app: cattle-cluster-agent
登録対象のクラスタ上で kubectl apply
を実行してリソースを作成。 これにより agent pod が作成され、対象クラスタから rancher クラスタへの登録が行われます。
登録が正常に完了しない場合は agent pod にエラーが表示されている場合が多いので、kubectl log
等でエラーを確認して適宜修正します。
NAME READY STATUS RESTARTS AGE
cattle-cluster-agent-74f6f87bc9-bclwj 1/1 Running 0 108m
cattle-cluster-agent-74f6f87bc9-j29wj 1/1 Running 0 109m
rancher-webhook-5db6f87b7f-trd95 1/1 Running 0 108m
登録が完了するとクラスタのステータスが Active
になり、クラスタ内のノードが表示されるようになります。
登録したクラスタは UI 左側にアイコンが追加され、クリックすることで表示するクラスタを切り替えられるようになります。
さらに別のクラスタを登録する場合も同様の手順で追加できます。
API で追加する
WebUI からクラスタを追加する方法では UI の操作が必要になりますが、API を使うことで手動操作が不要になるのでクラスタ登録の作業を自動化できます。
API を使用する際は認証が必要になるので、始めに Creating an API Key に従って API Key を作成します。作成した key には Access key などが含まれますが、そのうちの Bearer Token
を使って認証します。例えば curl では -H "Authorization: Bearer [token の値]
を指定すると認証が通り各種 API が実行できるようになります。
key を作成したら rancher サーバーに以下のようなリクエストを送信してクラスタの登録を行います。リクエストパラメータのうち登録するクラスタ名の表示名を --data-raw
内の metadata.name
に指定します。その他のパラメータはそのままで ok.
$ curl 'https://[ドメイン名]/v1/provisioning.cattle.io.clusters' \
-H 'accept: application/json' \
-H "Authorization: Bearer [token の値]" \
-H 'content-type: application/json' \
-H 'referer: https://[ドメイン名]/dashboard/c/_/manager/provisioning.cattle.io.cluster/create?mode=import&type=import&rkeType=rke2' \
--data-raw '{"type":"provisioning.cattle.io.cluster","metadata":{"namespace":"fleet-default","name":"sub2"},"spec":{}}'
上記のリクエストが成功するとクラスタが登録され、ステータスは Pending
になります。
ステータスを Active
にするには対象クラスタに Agent をデプロイして rancher サーバーとの通信を行う必要がありますが、マニフェストを取得するための URL がわからないのでこちらも API を利用して取得します。その前に上記で登録したクラスタの ID が必要になるので /v3/cluster
を実行してクラスタ一覧から ID を探します。
レスポンスでは data
以下に登録済みのクラスタが list 形式で入っており、クラスタ名は cluster
, id は id
フィールドに入っているので、yq
では以下のようなクエリで取得できます。
id は基本的に c-m-[ランダムな値]
という値で、以下では c-m-dtvxtsbc
となります。
$ curl -Ss \
-H "Authorization: Bearer [token]" \
https://rancher.ops.com:32324/v3/cluster | yq -P -r '.data[] | select ( .name == "sub2") | .id'
c-m-dtvxtsbc
登録用のマニフェストは内部的に Registration token
と呼ばれ /v3/clusterregistrationtokens
で参照できます。token はクラスタ id と結びついているため以下のクエリで取得できます。
$ curl -Ss \
-H "Authorization: Bearer [token]" \
https://rancher.ops.com:32324/v3/clusterregistrationtokens | yq -P -r '.data[] | select ( .clusterId == "c-m-dtvxtsbc") | .command'
kubectl apply -f https://rancher.ops.com:32324/v3/import/qnkbzhkpx5mctvkjb88d77nctg749plfcxjflnbzb754hg8tnfvd47_c-m-dtvxtsbc.yaml
上記の URL は webUI から登録を実行した際に表示される URL に対応するので、これを登録したいクラスタ上で実行すると web UI のときと同様に agent 等がデプロイされます。
その他
API について
Rancher では 2 種類の API があり、rancher v2.8.0 以前のバージョンでは v3 API が使用されていましたが、v2.8.0 以降では Rancher Kubernetes API (RK-API) が導入されています。
v3 API はエンドポイントが /v3
から始まる API で基本的に /v3/[resource type]/
で各 resource の API を実行できるようになっています。以前は v3 API 用の API reference もありましたが現在では削除されているようです。ただ v2.8.0 以降でも引き続き v3 API は使用できます。
RK-API は一部の API に関しては RK-API Quick Start Guide のように apiVersion: management.cattle.io/v3
としたリソースを kubectl で実行できるようになっています。エンドポイントは /apis/management.cattle.io/
なので curl 等でも実行できます。RK-API は API Reference に reference が記載されていますが、現時点では一部の API しか記載されていません(むしろ記載されていない API のほうが多そう)。
上記のように現時点では v3 API, RK-API いずれも網羅的に記載されたドキュメントがないため、API を使って操作を自動化するのが難しい状態になっています。
関連 Issue
- https://github.com/rancher/rancher/issues/20772
- https://github.com/rancher/rancher/issues/41558
- https://github.com/rancher/rancher-docs/issues/583
ただ以下に記載する方法である程度は調査できるようになっています。
UI から API を確認する
Enable View in API を有効にするとリソースの内容を webUI から確認できるようになります。
ダッシュボード右上のユーザーのアイコンから preference
を選択すると、設定項目の中の Advance Features
の中に Enable View in API
があるのでチェックを入れます。
これを有効化すると、ダッシュボード内の各リソースに View in API
という項目が追加されます。例えばクラスタに関しては、Cluster Management から任意のクラスタの縦 3 つのボタンをクリックすると View in API
が追加されていることがわかります。
選択すると以下のようにクラスタリソースに対応するメタデータやプロパティが確認できます。
また、これにより v3 API の内容も web 上で確認できます。例えばクラスタ一覧を取得する v3 API のエンドポイント /v3/clusters
をブラウザの URL に入力すると、実行結果がブラウザ上で確認できます。
RK-API の結果と比較すると、links の関連 API がいずれも v3 API になっている、フィールドに若干の差分があるなどの差異が確認できます。
API リクエストを capture する
Capturing v3 API Calls では実際に rancher に対して v3 API リクエストを送信した際の内容をキャプチャすることで必要なパラメータを確認する方法について記載されています。これに沿ってクラスタ作成に関する v3 API を特定する方法をメモしておきます。
まず UI の cluster management から新規に既存のクラスタをインポートする画面まで進めます。クラスタの表示名は適当なものをつけておき、ブラウザの開発者ツールで Network タブ
を選択し、Fetch/XHR
を選びます。
この状態で UI の create を押すとクラスタが登録され、同時に rancher サーバーに対して実行された API が開発者ツールに記録されます。クラスタ登録時には provisioning.cattle.io.clusters
と clusterregisrationtokens
の 2 つが記録されますが、1 つめが登録の際に使用する API となっているので、右クリックして copy > copy as cURL
を選択、別の場所に貼り付けます。
コピペした内容は以下(適宜マスクしてます)。
curl 'https://rancher.ops.com:32324/v1/provisioning.cattle.io.clusters' \
-H 'accept: application/json' \
-H 'accept-language: ja,en-US;q=0.9,en;q=0.8' \
-H 'content-type: application/json' \
-H 'cookie: R_PCS=dark; R_LOCALE=en-us; R_USERNAME=admin; R_REDIRECTED=true; CSRF=xxx; R_SESS=xxxx' \
-H 'origin: https://rancher.ops.com:32324' \
-H 'priority: u=1, i' \
-H 'referer: https://rancher.ops.com:32324/dashboard/c/_/manager/provisioning.cattle.io.cluster/create?mode=import&type=import&rkeType=rke2' \
-H 'sec-ch-ua: "Chromium";v="128", "Not;A=Brand";v="24", "Google Chrome";v="128"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: same-origin' \
-H 'user-agent: Mozilla/5.0 ...' \
-H 'x-api-csrf: xxxx' \
--data-raw '{"type":"provisioning.cattle.io.cluster","metadata":{"namespace":"fleet-default","name":"test1"},"spec":{}}'
いろいろ余計な情報が含まれていますが、/v1/provisioning.cattle.io.clusters
がエンドポイント、リクエストパラメータは --data-raw
内のデータを指定すれば良いことが上記の結果からわかります。あとは上記の内容を元に適宜検証を行うことで、API を通じてクラスタを作成する際にどのようなエンドポイントやパラメータを指定すればよいか特定することが可能です。
他の複数クラスタ監視ツール
rancher の他にも複数の k8s クラスタを監視できるツールは多くあるので、参考までに特徴・所感を合わせていくつかメモしておきます。
Kubesphere
特徴
- 複数クラスタの管理や DevOps, Service mesh などの機能を一元管理するための分散型プラットフォーム。
- 管理用の k8s クラスタにインストールして他の管理対象のクラスタと接続する 中央集権型 の構成。
- 現在の最新バージョン 4.1 では対応している k8s バージョンが 1.28 までと古い。
- helm chart がなく install / uninstall に独自スクリプトを利用するのでやや手順や管理が面倒。
- CNCF の Certified Kubernetes Distribution のひとつ。https://www.cncf.io/training/certification/software-conformance/#logos
- 中国系のプロジェクトであるため End User Community は中国系の企業が多い
- web UI で複数クラスタの管理が可能。確認できる方法はクラスタのリソース、ノード、ワークロードなど rancher とだいたい同じ。UI のレイアウトに関しては好みの問題か。
Lens
特徴
- デスクトップアプリで複数の k8s クラスタを管理可能。https://github.com/lensapp/lens の star も ~ 22.5 k でユーザー数は多い。
- ドキュメント も充実している。
- 機能的には充分だがデスクトップアプリしかなく web ベースの UI がない、一時期よりソースコードが非公開となったことが難点。
- OSS ではなく、それなりの規模の環境で使用するには 有償サブスクリプション の購入が必要。
Meshery
- meshery は k8s クラスタの管理やアプリの展開などを中央集権的に管理するためのプラットフォーム。クラスタ管理のアプリケーションというよりはプラットフォームとなっており、イメージ的には Backstage に近い感じ。
- CNCF の sandbox プロジェクトとなっている。
- UI はモダンな感じで良さそう。
- アダプターなどを使って各アプリと meshery を接続することで機能を拡張する方式。 architecture に説明があるが独自概念が多く学習コストは高め。
- 以下のあたりを読むと複数クラスタの管理もできそうだがドキュメントを見てもやり方がわからない。
まとめ
Rancher では簡単な手順でマルチクラスタのリソース使用状況の可視化が可能です。ローカル環境で作成したクラスタの他に AWS, Azure, Google Cloud, k3s, RKE2 等にも対応しているためマルチクラウドのクラスタも一括で管理できます。
Monitoring / Alerting 関連のコンポーネントも Apps として事前に用意されており、webUI から簡単にインストールできます。複数のクラスタを一括で管理する機能は一通り揃っているので、マルチクラスタの使用状況を可視化することが目的の場合は rancher 一つで満たせそうです。
一方で、一般的なリソースのデプロイや証明書のローテーション、クラスタのアップデートといった操作はできないため (rancher から作成したクラスタの場合はできる機能もある)、そのあたりは別のツールと組み合わせて運用していく必要があります。
Discussion