🛸

Rancher で複数の k8s クラスタを可視化する

2024/10/12に公開

はじめに

近年ではマルチクラスタやマルチクラウドを利用するケースも多くなってきており、複数の k8s クラスタをまとめて可視化・管理できるようなツールも増えてきています。ただ管理と言っても、単にクラスタの使用状況を可視化できれば充分というレベルから、ロギングやメトリクスレベルでの監視、複数クラスタへのデプロイやクラスタのアップグレードまで管理できる必要があるなど、どのレベルまでの管理を目的とするかによって最適なツールは異なってきます。
ここではローカルに複数の k8s クラスタが存在する状況を想定して、各クラスタの使用状況(cpu, メモリの使用状況など)が web UI から一括で確認できれば良いことを目的として以下のような条件を考えます。

  • OSS である。
  • Web UI からクラスタのリソースや使用状況を確認できる。
  • 複数クラスタへのデプロイやアップグレードまでの機能はなくても良い。

上記の条件が実現できそうな k8s クラスタ管理ツールを探してみると Rancher が良さそうだったので、実際に使って使用感について見てみます。

Rancher について

Rancher は k8s 用のコンテナ管理プラットフォームとなっています。

https://www.rancher.com/

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

コマンドについては以下に詳細が記載されています。
https://ranchermanager.docs.rancher.com/getting-started/installation-and-upgrade/resources/update-rancher-certificate

次に作成した 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 に使用されるパスワード。好きな値で良い。
values.yml
- 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.

sub2 というクラスタ名で登録
$ 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

ただ以下に記載する方法である程度は調査できるようになっています。

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.clustersclusterregisrationtokens の 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

https://kubesphere.io/

特徴

  • 複数クラスタの管理や 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

https://k8slens.dev/

特徴

  • デスクトップアプリで複数の k8s クラスタを管理可能。https://github.com/lensapp/lens の star も ~ 22.5 k でユーザー数は多い。
  • ドキュメント も充実している。
  • 機能的には充分だがデスクトップアプリしかなく web ベースの UI がない、一時期よりソースコードが非公開となったことが難点。
  • OSS ではなく、それなりの規模の環境で使用するには 有償サブスクリプション の購入が必要。

Meshery

https://meshery.io/

まとめ

Rancher では簡単な手順でマルチクラスタのリソース使用状況の可視化が可能です。ローカル環境で作成したクラスタの他に AWS, Azure, Google Cloud, k3s, RKE2 等にも対応しているためマルチクラウドのクラスタも一括で管理できます。
Monitoring / Alerting 関連のコンポーネントも Apps として事前に用意されており、webUI から簡単にインストールできます。複数のクラスタを一括で管理する機能は一通り揃っているので、マルチクラスタの使用状況を可視化することが目的の場合は rancher 一つで満たせそうです。
一方で、一般的なリソースのデプロイや証明書のローテーション、クラスタのアップデートといった操作はできないため (rancher から作成したクラスタの場合はできる機能もある)、そのあたりは別のツールと組み合わせて運用していく必要があります。

Discussion