k8s環境にOSSをインストールするのに、最近ではKubernetesパッケージ管理ツールであるHelmを使うことがデファクトになっている。
ただ、Helmは基本的にCLIで使うものであり、CLIのHelmの使い方なんて覚えたくないという人も多いだろう。そもそもCLIという時点で拒絶反応を起こす人もいるとかいないとか。
ここではHelmをCLIを使わずWebUIからインストール・管理する機能を提供するOSS、kubeappを簡単に紹介する。
Kubeapsとは
kubeappはHelmやTanzu PackageといったKubernetesのパッケージ管理ソフトウェアと連携して、WebUI上からパッケージの管理をするソフトウェアである。
以下のような感じでHelm Chartがカタログとして表示され、マウス操作でデプロイできてしまう。
特徴としては以下が公式ページに記載されている。
- Kubernetesパッケージの管理とデプロイ(ロールバックやアップグレードも含む)
- Namespaceや複数クラスタ対応
- RBAC、OAuth2、OIDCへの対応
前提条件
'23/4/25時点では以下が前提条件となっている。
- Kubernetes Cluster v1.21以上
- Helm v3.2.0以上(設定やインストール用)
- kubectl (設定やインストール用)
またオフィシャルで動作が確認されているのはAKS、GKE、kind、minikube、Docker for Desktopとのこと。
以前EKSで動かしたことがあるので、今回はあえて書いていないEKSで進める。
インストール
簡単に動かしたい人はGetting Startedを参照するとよい。
ここではIngressを使ってサービス公開する。
一旦HelmのRepositoryを追加し、values.yamlを抜き出す。
helm repo add bitnami https://charts.bitnami.com/bitnami
kubectl create namespace kubeapps
helm inspect values bitnami/kubeapps > ./kubeapps-helm-values.yaml
values.yamlを修正する。最初にingressを有効化しホスト名を設定する。
ingress:
enabled: true
hostname: kubeapps.app.hogeeee.info
EKSでALB ingressコントローラを使う場合、pathに*
を含む必要があるため、pathを修正する。
ingress:
path: /*
annotationにACMのARNを追加する。必要であれば許可IPなども書いておく。
ingress:
annotations:
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:xxxxxx:certificate/ec88392c-0cda-477c-a232-8799d284c288
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/inbound-cidrs: 239.116.130.41/32
TLSを有効化する。extraTlsの項目が必須のようなので、こちらもあわせて設定する。
ingress:
tls: true
extraTls:
- hosts:
- kubeapps.app.hogeeee.info
IngressClassを設定する。分からない人はkubectl get ingressclass
で確認すること。
ingress:
ingressClassName: "alb"
またALB ingressコントローラはService
のtypeでNodePort
を指定する必要があるため、Service
の該当箇所を書き換える(ClusterIP
で検索するとよい)
frontend:
service:
type: NodePort
なお、現時点でサポートされているパッケージは
- Helm
- Carvel (Tanzu Package)
- Flux
の3種類であり、packaging:
の箇所で有効化するかどうか選択できる。デフォルトではHelmのみとなっているため、他のパッケージ管理ソフトウェアを使いたい人は設定変更が必要となる。
今回は一旦Helmのみ確認するため、変更しない。
設定が終わったので、values.yamlを使ってインストールする。
helm install -f ./kubeapps-helm-values.yaml kubeapps -n kubeapps bitnami/kubeapps
インストール後、IngressのアドレスをDNSに追加する(ExternalDNS導入済みなら不要)。
動作確認
Ingressに設定したURLにアクセスすると、以下の画面が表示される。
ここのTokenはServiceAccountのTokenを入力する。
アクセス用Tokenを取得するために、ServiceAccountを作成する。
kubectl create sa kubeapps-operator -n default
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
Kubernetes v1.24以降の人はServiceAccontを作っても自動でTokenが生成されなくなっているので、Tokenを手動で作成する。
kubectl create token -n default kubeapps-operator
v1.23以前の人はSecretからTokenを取得する。
kubectl get -n default secret kubeapps-operator-token -o jsonpath={.data.token} | base64 -d
取得したTokenでログインする。
ログイン直後の画面は以下のようになる。
試しにWordPressをデプロイしてみる。右上のDEPLOY
をクリックし、WordPressを選択する。
WordPressの説明画面が出てくる。スクロールするとHelmのvaluesの説明も表示される。
更にDEPLOY
ボタンを押すと、設定画面が表示される。
Nameのところは必須であり、任意の名前を入力する。
パラメータに関しては修正不要のHelm Chartであれば特にいじらずデプロイ出来る。
今回は試しにwordpressBlogName
だけMy kubeapps test
と変更してみた。
画面の下にあるDEPLOY 16.0.0
をクリックする。
しばらくすると画面が遷移し、以下のようにデプロイが始まったことが確認できる。
デプロイ完了後、アクセスしてみるとそれっぽいものが表示される。設定変更したところも確認できた。
リポジトリの追加
リポジトリの追加もWebUIから可能。右上の四角をクリックすると、Package Repositoriesと表示される。
これをクリックし、右上のADD PACKAGE REPOSITORY
を選択し、試しにGitLab(https://charts.gitlab.io/)を追加してみる。
Nameは分かりやすいものを、DescriptionはUI上のインフォのアイコンで表示される説明文となる。
INSTALL REPOSITORY
で追加すると、CatalogのPackageRepositoryにgitlab
が追加される。
まとめ
ということで、kubeappsを使うとCLI操作なくHelmのパッケージをデプロイ出来ることが確認できた。
これでもうCLIが苦手な人も自由にパッケージがインストールできるだろう。多分。
おまけ
VMwareのTanzu Mission Controlという製品にはkubeappsに似た機能が備わっている。
商用サポートが欲しい場合はそちらを確認するとよい。