Skip to main content

基于自建 k8s 安装


前置条件

  • 安装 kubegems 需要具备集群管理员权限,所以在部署前需要联系您的集群管理员,以保证有足够的授权执行以下操作。

  • kubernetes 1.21 及以上版本( 1.23+最佳 )

  • 所有节点的时间同步

KubeGems通过与 bundle-controller 相同的方式进行安装,通过下发 plugin 类型的 CR 来安装对应的 helm/kustomize 包。

tip

如果您想尝试我们正在开发的版本,可以参考这里进行部署。

主要部分

kubegems 包含以下主要部分:

名称描述
kubegems-installerkubegems 安装程序,安装 kubegems 组件及依赖组件
kubegemskubegems 核心组件,包含 UI 界面及相关 API 服务
kubegems-localkubegems 边缘组件,安装在托管集群上,获取集群信息和执行操作

部署 KubeGems

确定部署版本,您可以前往 Kubegems Release 查询到最新的版本号.

$ export KUBEGEMS_VERSION=<kubegems version> #  安装 kubegems 的版本

部署 installer

installer 是用于安装 kubegems 主要组件和插件的控制器。 其通过监听类型为 plugins.plugins.kubegems.io 的 CR,并根据其定义来下载和安装相应的 helm chart 或者 kustomize 文件。

详情参考:bundle-controller

$ 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 文件。

$ 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 分钟才会一切正常,这取决于您的具体配置。

info

在启动完成之前会有许多 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 仪表板

  1. 通过端口转发:
$ kubectl -n kubegems port-forward svc/kubegems-dashboard 8080:80
  1. 通过 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
  1. 如果作为正式使用您可能需要使用 ingress 或其他方式访问。

kubegems 默认创建了 hostname 为 dashboard.kubegems.io 的 ingress, 同时默认绑定了 default-gatewayingressClass。 如果您想更改为其他域名,或者绑定到其他网关可以编辑 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

下一步

请移步 快速入门 进行平台设置