Kubernetes GUIクライアントの紹介


当社 TORICO では、Webアプリのサーババックエンドに Kubernetes を使っています。

Kubernetes を使うには覚えなければいけないことが多く、最初はハードルが高いと感じると思います。とくに kubectl コマンドだけを使っていると、内部の階層構造が見えにくく理解が難しく感じます。

GUIクライアントを活用することで、内部の理解がしやすくなり、習得が早まります。

Rancher

https://www.rancher.com/

Web アプリとして動作する Kubernetes クライアントです。

Docker で起動できるので、当社では Kubernetes 上に Rancher を起動させ、各クラスタを操作するのが一般的です。

必要十分な機能があり、構築や操作もわかりやすいので初学におすすめです。
私も Rancher からの学びは多く、心の中では Rancher 先生と呼んでいます。

Helm チャートをブラウザで一覧して、クリックしていくだけでアプリを起動できるのは便利です。

Kubernetes 上で稼働させていると、たまにログが出てこなくなったりなどの不具合が発生することがありますが、再起動・アップグレードを行うことで改善する場合が多いです。

ただアップグレードの際に起動不能になり、何度か作り直したこともあります。
使う際は、作り直す時に焦らないよう手順書を残しておくと良いでしょう。

当社では、社内の Ubuntu サーバの中の microk8s で Rancher を起動しています。

使っている Kubernetes マニフェストを書いておきます。
Docker イメージのタグ (下記 v2.6-head の箇所)は適宜最新版に修正版に修正してください。

Rancher の Docker イメージのタグ

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: devserver-rancher-deployment
  namespace: torico
spec:
  replicas: 1
  selector:
    matchLabels:
      app: devserver-rancher
  template:
    metadata:
      labels:
        app: devserver-rancher
    spec:
# serviceAccountName: devserver-rancher # (追記・後述) containers: - name: devserver-rancher image: rancher/rancher:v2.6-head imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: data-rancher mountPath: /var/lib/rancher volumes: - name: data-rancher hostPath: path: /data/rancher

service.yml

apiVersion: v1
kind: Service
metadata:
  name: devserver-rancher-service
  namespace: torico
spec:
  type: NodePort
  ports:
    -  port: 80
       protocol: TCP
       targetPort: 80
       name: devserver-rancher-http
  selector:
    app: devserver-rancher

ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: devserver-rancher-ingress
  namespace: torico
spec:
  tls:
    - hosts:
        - devserver-rancher.torico-corp.com
      secretName: tls-certificate
  rules:
    - host: devserver-rancher.torico-corp.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: devserver-rancher-service
                port:
                  number: 80

追記: 上記のマニフェストだけでは Rancher のトップページで下記のようなエラーを見るかもしれません。

Failed to create local/local-fleet-local-owner management.cattle.io/v3, Kind=ClusterRoleTemplateBinding for cluster-create fleet-local/local: admission webhook "rancherauth.cattle.io" denied the request: user "system:serviceaccount:torico:default" (groups=["system:serviceaccounts" "system:serviceaccounts:torico" "system:authenticated"]) is attempting to grant RBAC permissions not currently held: {APIGroups:["*"], Resources:["*"], Verbs:["*"]} {APIGroups:["cluster.x-k8s.io"], Resources:["machines"], Verbs:["*"]} {APIGroups:["management.cattle.io"], Resources:["clusters"], Verbs:["own"]} {APIGroups:["provisioning.cattle.io"], Resources:["clusters"], Verbs:["*"]} {APIGroups:["rke-machine-config.cattle.io"], Resources:["*"], Verbs:["*"]} {APIGroups:["rke-machine.cattle.io"], Resources:["*"], Verbs:["*"]} {APIGroups:["rke.cattle.io"], Resources:["etcdsnapshots"], Verbs:["get" "list" "watch"]} {NonResourceURLs:["*"], Verbs:["*"]}

その場合はアカウントとロールを作ってください。

kind: ServiceAccount
apiVersion: v1
metadata:
  name: devserver-rancher
  namespace: torico
  labels:
    app: devserver-rancher

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
- nonResourceURLs: ["*"]
  verbs: ["*"]

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: devserver-rancher-cluster-role-binding
  labels:
    app: devserver-rancher
subjects:
- kind: ServiceAccount
  name: devserver-rancher
  namespace: torico
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

そして、 deployments の ServiceAccount をこのアカウントに設定してください。

apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
serviceAccountName: devserver-rancher # これ
containers:
...

OpenLens

https://github.com/MuhammedKalkan/OpenLens

Lens というオープンソースプロジェクトから派生した OpenLens という Kubernetes の GUI クライアントがあります。

PCにインストールして起動させるアプリで、 Electron で作られています。

使った感じは、例えば Cronjobから関係する Job や Pod に掘っていけなかったり、Deployments → Pod → コンテナ と掘っていった後に Pod に戻るUIが無いなど、Rancher と比べると使いにくい点があります。

ただ、「新しいクラスタにとりあえず繋いで調べる」点において非常に便利なので、EKS でクラスタを作った後に管理する時にはよく使います。

kubeconfig ファイルを PC 上で管理し、外部にコピーしたくない場合は良い選択です。

Lens の歴史

もともとは Lens というオープンソースプロジェクトがあり、2020年の3月にアプリがリリースされました。

Lens — A Year In Review. Just a year ago, in March 2020, we… | by Edward Ionel | k8slens | Medium

その後、2020年8月に Mirantis社が Lens プロジェクトを買収します。

Mirantis acquires popular Kubernetes IDE Lens | ZDNET

結果、Lens は Mirantis 社が提供するフリーミアムのプロジェクトとなりました。

https://k8slens.dev/

2023年時点では、Free 版 と Pro 版がリリースされています。

Free 版は、業務利用をする場合は年商 $10M (14億円程度) 以下の企業に限られるため、当社では使えませんでした。

Pro版は機能は豊富なものの $19.90/月 です。

Lens がプロプライエタリとなり、フリーミアムの製品となったことに対抗する形で、 OpenLens プロジェクトが立ち上がります。

https://github.com/MuhammedKalkan/OpenLens

もとものオープンソースである Lens の最新リポジトリのビルド成果が公開され、インストールが容易になったのは良かったのですが、v6.3以降は主要機能である「ログ」と「シェル」のボタンが表示されない問題が発生します。

https://github.com/lensapp/lens/issues/6823

実際にコード上からボタンは削除されており、おそらく Mirantis 社のマネタイズのための変更だと考えられ、オープンソースプロジェクトの姿勢についての話題となり上記Issueは荒れます。

その後、 @alebcay さんが OpenLens に「ログ」と「シェル」のボタンを表示するエクステンションを公開され、それを導入することで OpenLens は実用的な Kubernetes クライアントアプリとして使えます。

https://github.com/alebcay/openlens-node-pod-menu

このエクステンションを入れない限り、OpenLensはおすすめできません。

インストール方法

brew install --cask openlens

インストール直後は、Shell と Log のボタンが表示されないため、エクステンションを導入します。

  1. アプリを起動する
  2. メニューバーの OpenLens → Extensions ( Shift + Command + E)
  3. URL入力欄に @alebcay/openlens-node-pod-menu を入力
  4. Install をクリック

インストール直後は Status が Enabled と Disabled で点滅するなどして変な挙動になるかもしれませんが、一度アプリを再起動させ、Extensions ページからプラグインを Enabledにすることで有効になります。

k9s

ターミナル上で動作する TUI アプリです。

https://github.com/derailed/k9s

複数クラスタの管理機能は無く、起動時の環境変数 KUBECONFIG でクラスタを切り替えます。また -n でネームスペースを指定することもできます。 kubectl と同じような使い勝手です。

例えば

$ KUBECONFIG=${HOME}/.kube/confg-devserver k9s -n torico

といったコマンドで起動します。

複数クラスタを管理している場合は選択して起動できるようなメニューのスクリプトを作ると使いやすいと思います。

キーバインドは Vim でおなじみの j, k で上下移動で、Enter で掘り下げ、Esc で上階に戻ります。
ステータスを簡易的に確認する、ログを見る、シェルを起動する、程度であれば手軽に実現できます。

全てをキーボードで操作するため、慣れるとUIの軽快さもありかなりの速度で操作できます。複数ある Pod の標準出力を見て回るような操作を爆速でできます。

インストール方法

brew install k9s

Devtron

Kubernetes クライアントの範囲を超えて、CI など広い開発体験を提供するアプリです。

https://docs.devtron.ai/

( 同名で Electron 用のデバッガーアプリがあり、少し紛らわしいです)

Devtron がどんなものであるかは下記の記事に詳しく書いてあります。

Devtron: Open-Source Software Delivery Workflow for K8s

上記記事によると、Argo CD, コンテナスキャナ, メトリクスの可視化などがパッケージされたものが Devtron のようです。

Helm で Kubernetes にインストールできます。

インストール方法

https://docs.devtron.ai/install/install-devtron

上記の Helm チャートを Rancher 経由で microk8s にインストールしてみようとしましたが、私の環境では失敗しました。

そのため、Devtron はまだ試せていません。今後また再トライしてみたいと思います。

現在未評価

コメント

コメントを投稿
コメントするには TORICO-ID にログインしてください。
ログイン コメント利用規約