kubegems 是什麼?
KubeGems是一款以圍繞 Kubernetes 通過自研和內建雲原生項目而建構的通用性開源 PaaS 雲管理平台。經過我們内部近一年的持續疊代,目前 KubeGems 的核心功能已經初步具備多雲多租戶場景下的統一管理。并通過插件化的方式,在使用者界面中靈活控制包括 監控系統、日志系統、微服務治理 等衆多插件的啟用和關閉。
作為一個面向雲原生的通用型雲平台,KubeGems 從立項開始就把支援多叢集、多租戶場景下的資源隔離作為其主要實作設計目标。使用者可以對接入平台的 Kubernetes 叢集做 租戶級 的自定義資源規劃。除此之外,我們提供了比原生 Dashboard 功能更加豐富且人性化操作的 UI 界面,讓使用者/企業根據自身場景規劃平台中繼資料,而不用擔心自己的業務和資料出現錯亂。同時 KubeGems 也提供過了衆多豐富的功能子產品來為個人或企業使用者帶來更好的使用體驗,例如 通路控制、資源規劃、網絡隔離、租戶網關、存儲卷、可觀察性、使用者審計、證書管理、金絲雀釋出、istio治理 等功能。

準備工作
- 安裝 kubegems 需要具備叢集管理者權限,是以在部署前需要聯系您的叢集管理者,以保證有足夠的授權執行以下操作。
- kubernetes 1.21 及以上版本( 1.23+最佳 )所有節點的時間同步
- KubeGems通過與 bundle-controller 相同的方式進行安裝,通過下發 plugin 類型的 CR 來安裝對應的 helm/kustomize 包。
主要部分
名稱 | 描述 |
---|---|
kubegems-installer | kubegems 安裝程式,安裝 kubegems 元件及依賴元件 |
kubegems | kubegems 核心元件,包含 UI 界面及相關 API 服務 |
kubegems-local | kubegems 邊緣元件,安裝在托管叢集上,擷取叢集資訊和執行操作 |
擷取
确定部署版本,您可以前往 Kubegems Release 查詢到最新的版本号.
$ export KUBEGEMS_VERSION=<kubegems version> # 安裝 kubegems 的版本
部署 installer
installer 是用于安裝 kubegems 主要元件和插件的控制器。 其通過監聽類型為 plugins.plugins.kubegems.io 的 CR,并根據其定義來下載下傳和安裝相應的 helm chart 或者 kustomize 檔案。
$ kubectl create namespace kubegems-installer
$ kubectl apply -f https://github.com/kubegems/kubegems/raw/${KUBEGEMS_VERSION}/deploy/installer.yaml
等待幾分鐘安裝程式準備就緒。
$ kubectl -n kubegems-installer get po
NAME READY STATUS RESTARTS AGE
kubegems-installer-6fb7495c4d-8rqwn 0/1 Running 0 12s
(可選)安裝依賴
kubegems 需要持久化一些重要資料,需要叢集有可用的 CSI 插件
如果沒有 CSI 插件,可以安裝 # local-path-provisioner
$ kubectl create namespace local-path-storage
$ kubectl apply -f https://github.com/kubegems/kubegems/raw/${KUBEGEMS_VERSION}/deploy/addon-local-path-provisioner.yaml
部署 kubegems 核心元件
CAUTION
kubegems 預設使用名稱為 local-path 的 storageClass,如果您使用不同的 storageClass,您需要在 apply 前下載下傳并編輯 kubegems.yaml 檔案。
DockerHub 源
阿裡雲鏡像源(中國大陸地區推薦)
$ kubectl create namespace kubegems
$ export STORAGE_CLASS=local-path # 改為您使用的 storageClass
$ curl -sL https://github.com/kubegems/kubegems/raw/${KUBEGEMS_VERSION}/deploy/kubegems.yaml \
| sed -e "s/local-path/${STORAGE_CLASS}/g" \
> kubegems.yaml
$ kubectl apply -f kubegems.yaml
# kubegems CR 下發後,大約需要 5 分鐘才會一切正常,這取決于您的具體配置。
在啟動完成之前會有許多 Pod 的狀态為 CrashLoopBackOff,這是由于其依賴的服務(mysql、redis、gitea、argocd 等)還在啟動中,這是正常的,請耐心等待。
kubegems 所有服務部署并啟動完成後會有如下 pod:
$ kubectl -n kubegems get pod
NAME READY STATUS RESTARTS AGE
kubegems-api-6d45f656f8-lfk7j 1/1 Running 0 21h
kubegems-argo-cd-app-controller-5b849bfb49-ltvdz 1/1 Running 0 21h
kubegems-argo-cd-repo-server-7dddd8f57d-ldj5k 1/1 Running 0 21h
kubegems-argo-cd-server-76745cc657-v8dx9 1/1 Running 0 21h
kubegems-chartmuseum-6c546b4d-qxfjj 1/1 Running 0 21h
kubegems-charts-init-main-lmtwt 0/1 Completed 0 21h
kubegems-dashboard-6bcd7f65f-89gsk 1/1 Running 0 21h
kubegems-gitea-0 1/1 Running 0 21h
kubegems-init-main-vjxnq 0/1 Completed 3 21h
kubegems-msgbus-7c58548497-pqwht 1/1 Running 5 (21h ago) 21h
kubegems-mysql-0 1/1 Running 0 21h
kubegems-redis-master-0 1/1 Running 0 21h
kubegems-worker-7d67974f4c-cj65l 1/1 Running 5 (21h ago) 21h
通路 kubegems 儀表闆
通過端口轉發:
$ kubectl -n kubegems port-forward svc/kubegems-dashboard 8080:80
通過 NodePort:
你需要編輯 kubegems 插件,為 dashbnoard 元件開啟 nodeport
$ kubectl -n kubegems edit plugins.plugins.kubegems.io kubegems
示例:
apiVersion: plugins.kubegems.io/v1beta1
kind: Plugin
metadata:
spec:
kind: helm
url: https://charts.kubegems.io/kubegems
values:
dashboard:
service:
type: NodePort
global:
kubegemsVersion: v1.21.4
storageClass: local-path
ingress:
hostname: dashboard.kubegems.io
如果作為正式使用您可能需要使用 ingress 或其他方式通路。
kubegems 預設建立了 hostname 為 dashboard.kubegems.io 的 ingress, 同時預設綁定了 default-gateway的ingressClass。 如果您想更改為其他域名,或者綁定到其他網關可以編輯 kubegems 插件。
TIP
default-gateway是平台預設網關,要使用它,你需要啟用網關-gateway插件
kubectl -n kubegems edit plugins.plugins.kubegems.io kubegems
示例:
apiVersion: plugins.kubegems.io/v1beta1
kind: Plugin
metadata:
spec:
kind: helm
url: https://charts.kubegems.io/kubegems
values:
global:
kubegemsVersion: v1.21.4
storageClass: local-path
ingress:
hostname: dashboard.kubegems.io
ingressClassName: default-gateway
更多相關配置文檔: 請添加連結描述
您需要将該域名解析到 Kubernetes 叢集内任意節點或者 Ingress LoadBanlancer IP 後,才可通過該域名通路頁面。
擷取 ingress 通路位址:
$ PORT=$(kubectl -n kubegems-gateway get svc default-gateway -ojsonpath='{.spec.ports[0].nodePort}')
$ ADDRESS=$(kubectl -n kubegems get ingress kubegems -ojsonpath='{.spec.rules[*].host}')
$ echo http://$ADDRESS:$PORT
user: admin
password: demo!@#admin
線上體驗
user: admin
password: demo!@#admin