kubegems 是什么?

KubeGems是一款以围绕 Kubernetes 通过自研和集成云原生项目而构建的通用性开源 PaaS 云管理平台。经过我们内部近一年的持续迭代,当前 KubeGems 的核心功能已经初步具备多云多租户场景下的统一管理。并通过插件化的方式,在用户界面中灵活控制包括 监控系统、日志系统、微服务治理 等众多插件的启用和关闭。

作为一个面向云原生的通用型云平台,KubeGems 从立项开始就把支持多集群、多租户场景下的资源隔离作为其主要实现设计目标。用户可以对接入平台的 Kubernetes 集群做 租户级 的自定义资源规划。除此之外,我们提供了比原生 Dashboard 功能更加丰富且人性化操作的 UI 界面,让用户/企业根据自身场景规划平台元数据,而不用担心自己的业务和数据出现错乱。同时 KubeGems 也提供过了众多丰富的功能模块来为个人或企业用户带来更好的使用体验,例如 访问控制、资源规划、网络隔离、租户网关、存储卷、可观察性、用户审计、证书管理、金丝雀发布、istio治理 等功能。 9e785aeee4e3046b4d18ba16d12c193b_kubegems-a5a39a0e4aca80e1d8adeb03c9513069.jpg

准备工作

  • 安装 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

image.png 您可以通过如下用户名与密码登录控制台:

user: admin
password: demo!@#admin

在线体验

https://demo.kubegems.io/

user: admin
password: demo!@#admin

image.png