https://www.kuboard.cn/install/v3/install.html#kuboard-v3-x-%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
如果您希望继续安装 Kuboard v2.0.x,请继续阅读本文后面的内容。
安装 Kuboard 时,假设您已经有一个 Kubernetes 集群,以下任何形式安装的集群都可以:
如果没有 Kubernetes 集群:
Kubernetes 版本 | Kuboard 版本 | 兼容性 | 说明 |
---|---|---|---|
v1.20 | v2.0.x | 已验证 | |
v1.19 | v2.0.x | 已验证 | |
v1.18 | v1.0.x, v2.0.x | 已验证 | |
v1.17 | v1.0.x, v2.0.x | 已验证 | |
v1.16 | v1.0.x, v2.0.x | 已验证 | |
v1.15 | v1.0.x, v2.0.x | 已验证 | |
v1.14 | v1.0.x, v2.0.x | 已验证 | |
v1.13 | v1.0.x, v2.0.x | 已验证 | |
v1.12 | v1.0.x, v2.0.x | Kubernetes Api v1.12 不支持 dryRun, Kuboard 不支持 Kubernetes v1.12 | |
v1.11 | v1.0.x, v2.0.x | Kuboard 不支持 Kubernetes v1.11 |
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
NAME READY STATUS RESTARTS AGE
kuboard-54c9c4f6cb-6lf88 1/1 Running 0 45s
您可以获得管理员用户、只读用户的Token。
执行命令
# 如果您参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
输出
取输出信息中 token 字段
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w
拥有的权限
view 可查看名称空间的内容
system:node 可查看节点信息
system:persistent-volume-provisioner 可查看存储类和存储卷声明的信息
适用场景
只读用户不能对集群的配置执行修改操作,非常适用于将开发环境中的 Kuboard 只读权限分发给开发者,以便开发者可以便捷地诊断问题
执行命令
执行如下命令可以获得 只读用户 的 Token
# 如果您参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
输出
取输出信息中 token 字段
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w
您可以通过NodePort、port-forward 两种方式当中的任意一种访问 Kuboard
Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;您可以按如下方式访问 Kuboard。
http://任意一个Worker节点的IP地址:32567/
在您的客户端电脑中执行如下命令
kubectl port-forward service/kuboard 8080:80 -n kube-system
在浏览器打开链接 (请使用 kubectl 所在机器的IP地址)
http://localhost:8080
许多公司处于安全的考虑,需要将 Kuboard 离线安装到内网环境。本文描述了如何完成 Kuboard 的离线安装。请确保您已经熟悉了 安装Kuboard,本文只描述离线安装时,与正常安装的过程的差异部分
docker pull eipwork/kuboard:latest
docker images | grep kuboard
输出结果如下所示:
eipwork/kuboard latest 0146965e6475 3 weeks ago 133MB
将 Kuboard 镜像导出到文件
docker save 86eaead8421e > kuboard.tar
ImageID
请使用上一个步骤中查询到的 image ID
docker load < kuboard.tar
docker tag 0146965e6475 eipwork/kuboard:latest
安装Kuboard的yaml文件如下,将其保存到 kuboard-offline.yaml
- 修改该文件中第 26 行的节点名称为上一个步骤中,已经加载了 kuboard 镜像的节点,参考 [将容器组调度到指定节点](https://www.kuboard.cn/learning/k8s-intermediate/config/assign-pod-node.html)
- 与在线安装不同,此处 `ImagePullPolicy=IfNotPresent` (第30行),参考 [容器镜像](https://www.kuboard.cn/learning/k8s-intermediate/container/images.html#更新镜像)
apiVersion: apps/v1
kind: Deployment
metadata:
name: kuboard
namespace: kube-system
annotations:
k8s.kuboard.cn/displayName: kuboard
k8s.kuboard.cn/ingress: "true"
k8s.kuboard.cn/service: NodePort
k8s.kuboard.cn/workload: kuboard
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
spec:
replicas: 1
selector:
matchLabels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
template:
metadata:
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
spec:
nodeName: your-node-name
containers:
- name: kuboard
image: eipwork/kuboard:latest
imagePullPolicy: IfNotPresent
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
---
apiVersion: v1
kind: Service
metadata:
name: kuboard
namespace: kube-system
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 32567
selector:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kuboard-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kuboard-user
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kuboard-viewer
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: kuboard-viewer
namespace: kube-system
# ---
# apiVersion: extensions/v1beta1
# kind: Ingress
# metadata:
# name: kuboard
# namespace: kube-system
# annotations:
# k8s.kuboard.cn/displayName: kuboard
# k8s.kuboard.cn/workload: kuboard
# nginx.org/websocket-services: "kuboard"
# nginx.com/sticky-cookie-services: "serviceName=kuboard srv_id expires=1h path=/"
# spec:
# rules:
# - host: kuboard.yourdomain.com
# http:
# paths:
# - path: /
# backend:
# serviceName: kuboard
# servicePort: http
kubectl apply -f kuboard-offline.yaml
由于咱们是v2版本操作单节点的集群,
Kuboard v3.x 支持 Kubernetes 多集群管理。如果您从 Kuboard v1.0.x 或者 Kuboard v2.0.x 升级到 Kuboard,请注意:
Kubernetes 版本 | Kuboard 版本 | 兼容性 | 说明 |
---|---|---|---|
v1.23 | v3.x | 已验证 | |
v1.22 | v3.x | 已验证 | |
v1.21 | v3.x | 已验证 | |
v1.20 | v3.x | 已验证 | |
v1.19 | v3.x | 已验证 | |
v1.18 | v3.x | 已验证 | |
v1.17 | v3.x | 已验证 | |
v1.16 | v3.x | 已验证 | |
v1.15 | v3.x | 已验证 | |
v1.14 | v3.x | 已验证 | |
v1.13 | v3.x | 已验证 | |
v1.12 | v3.x | Kubernetes Api v1.12 不支持 dryRun, Kuboard 不支持 Kubernetes v1.12 | |
v1.11 | v3.x | Kuboard 不支持 Kubernetes v1.11 |
基于如下原因,建议您以 docker run 的方式运行 Kuboard:
在正式安装 kuboard v3 之前,需做好一个简单的部署计划的设计,在本例中,各组件之间的连接方式,如下图所示:
内网IP
访问 Kuboard 的 Web 服务端口 80 和 Kuboard Agent Server 端口 10081。安装 Kuboard 之前,假设:
安装 Kuboard v3.x 版本的指令如下:
sudo docker run -d \
--restart=unless-stopped \
--name=kuboard \
-p 80:80/tcp \
-p 10081:10081/tcp \
-e KUBOARD_ENDPOINT="http://192.168.2.216:80" \
-e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
-v /root/kuboard-data:/data \
eipwork/kuboard:v3
# 也可以使用镜像 swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 ,可以更快地完成镜像下载。
# 请不要使用 127.0.0.1 或者 localhost 作为内网 IP \
# Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server \
采用 192.168.2.2.16机器安装
WARNING
KUBOARD_ENDPOINT 参数的作用是,让部署到 Kubernetes 中的 kuboard-agent 知道如何访问 Kuboard Server;
KUBOARD_ENDPOINT 中也可以使用外网 IP;
Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server;
建议在 KUBOARD_ENDPOINT 中使用域名;
如果使用域名,必须能够通过 DNS 正确解析到该域名,如果直接在宿主机配置 /etc/hosts 文件,将不能正常运行;
参数解释
参数解释
建议将此命令保存为一个 shell 脚本,例如 start-kuboard.sh,后续升级 Kuboard 或恢复 Kuboard 时,需要通过此命令了解到最初安装 Kuboard 时所使用的参数;
第 4 行,将 Kuboard Web 端口 80 映射到宿主机的 80 端口(您可以根据自己的情况选择宿主机的其他端口);
第 5 行,将 Kuboard Agent Server 的端口 10081/tcp 映射到宿主机的 10081 端口(您可以根据自己的情况选择宿主机的其他端口);
第 6 行,指定 KUBOARD_ENDPOINT 为 http://内网IP,如果后续修改此参数,需要将已导入的 Kubernetes 集群从 Kuboard 中删除,再重新导入;
第 7 行,指定 KUBOARD_AGENT_SERVER 的端口为 10081,此参数与第 5 行中的宿主机端口应保持一致,修改此参数不会改变容器内监听的端口 10081,例如,如果第 5 行为 -p 30081:10081/tcp 则第 7 行应该修改为 -e KUBOARD_AGENT_SERVER_TCP_PORT="30081";
第 8 行,将持久化数据 /data 目录映射到宿主机的 /root/kuboard-data 路径,请根据您自己的情况调整宿主机路径;
在启动命令行中增加环境变量 `KUBOARD_ADMIN_DERAULT_PASSWORD`,可以设置 `admin` 用户的初始默认密码。
在浏览器输入 http://your-host-ip:80
即可访问 Kuboard v3.x 的界面,登录方式:
admin
Kuboard123
cat ~/.kube/config
当您配置 Kuboard 与 gitlab / github / ldap 实现单点登录以后,Kuboard 并不管理用户基本信息、用户组信息、用户与用户组之间的映射信息,这些信息需要您在 gitlab / github/ ldap 中管理和配置。
默认情况下,只有 KUBOARD_ROOT_USER
参数指定的用户可以执行 Kuboard 中的所有操作,其他用户通过单点登录进入 Kuboard 系统后,除了退出系统,几乎什么事情也做不了。为了让单点登录的用户获得合适的权限,您需要在 Kuboard 中为对应的用户/用户组授权。下面描述了为指定用户授权的操作步骤:
如下图所示,导航到 用户 列表菜单,点击 为用户添加角色绑定 按钮
在图中的弹出对话框输入单点登录用户系统中的用户名,点击确定。
Kuboard 名称空间界面中,以微服务分层架构的形式对工作负载进行分类展示,默认布局模式如下图所示:
自 Kuboard v1.0.7-beta.5 开始,允许用户自定义名称空间的布局。本章节描述了如何配置自定义布局的参数。
在 Kuboard 界面中,导航到 kube-system
名称空间;
创建 ConfigMap
点击名称空间左侧 配置 标题后面的 创建 按钮,可以创建 ConfigMap。
在名称空间 kube-system
中创建一个名为 kuboard-namespace-layout
的 ConfigMap,并在其中添加一个 Key 为 kuboard-namespace-layout.yaml
,Value 为如下 yaml 内容的配置数据条目,如图所示:
yaml 文件内容为:
version: "0.1"
layers:
frontend:
name: 前端
color: "blue"
backend:
name: 后端
color: "rgba(0,120,246)"
db:
name: 数据库
color: "#3EAF7C"
midware:
name: 中间件
color: "#003366"
direction: vertical-right
width: 180
yaml 文件中,各字段的描述如下
Layer ID
layers 下每一个字段代表一个分层的 id。例如,此配置文件中定义了 4 个分层:frontend、backend、db、midware。对于每个分层,可以配置的参数见下表:
字段名 | 字段类型 | 必填 | 字段描述 |
---|---|---|---|
name | String | 是 | 分层的名称,显示在界面上 |
color | String | 是 | 分层中工作负载对象的主题色,可以使用 rgba 编码、颜色名称颜色编码等 html 支持的形式; |
direction | String | 否 | 如果不填写,则该分层按 yaml 中出现的顺序自上而下显示在中间。如果填写,必须从下面两个取值当中选择:vertical-right :垂直显示在右侧vertical-left : 垂直显示在左侧 |
width | Number | 条件 | 如果填写了 direction 字段,则此字段为必填; 该字段标识了垂直显示时,该区块的宽度,单位为像素 px 。 |
在 kube-system
名称空间中,导航到 kuboard
工作负载页面;
在 kuboard
工作负载页面,点击 编辑 按钮,进入工作负载编辑页面;
在工作负载编辑页面,增加数据卷
为 kuboard
增加一个数据卷,字段描述及截图如下
字段名称 | 字段取值 | 字段描述 |
---|---|---|
数据卷名称 | kuboard-namespace-layout-volume | 数据卷名称,在该工作负载内可用 |
数据卷类型 | configMap | 选择 configMap 类型的数据卷 |
ConfigMap名称 | kuboard-namespace-layout | 选择前一个步骤中创建的 kuboard-namespace-layout 这个 ConfigMap |
在工作负载编辑页面,挂载配置文件到 kuboard
容器
仍然在工作负载编辑页面,将 ConfigMap 中的配置内容挂载到 kuboard
容器,字段描述及截图如下
字段名称 | 字段取值 | 字段描述 |
---|---|---|
镜像 | eipwork/kuboard:v1.0.7-beta.5 | Kuboard 版本不能低于 v1.0.7-beta.5 |
挂载点:容器内路径 | /usr/share/nginx/html/kuboard-namespace-layout.yaml | 替换容器中该路径中的配置文件 |
挂载点:数据卷名称 | kuboard-namespace-layout-volume | 选择前一个步骤中添加的数据卷 |
挂载点:数据卷内子路径 | kuboard-namespace-layout.yaml | 此字段取值为 configMap 中,对应配置条目的名称 |
上述配置可以将 configMap 中 kuboard-namspace-layout.yaml
的内容映射为容器内路径为 /usr/share/nginx/html/kuboard-namespace-layout.yaml
的一个文件
kuboard
工作负载的修改刷新 Kuboard 界面
刷新 Kuboard 界面后,可以看到,名称空间的布局被调整为如下形式:
监控层
;前端
、后端
、数据库
;中间件
,但是标识已经从 cloud
调整为 midware
,所以原本在此处的 服务注册
工作负载现在显示在 默认
分层中。如果您在使用 Kuboard 之前,就已经创建了许多的工作负载,然后您安装了 Kuboard,此时,所有的工作负载都是显示在 默认
这个分层的。
Kuboard 通过工作负载(Deployment / StatefulSet / DaemonSet 等)的 k8s.eip.work/layer
这个标签来识别工作负载应该显示在哪个分层。
如果您想要将工作负载调整到对应的分层,可以按照如下步骤操作:
点击上图中 调整所在分层 按钮,将打开编辑标签的界面:
编辑 k8s.eip.work/layer
,并选择您想要的分层后,点击 确定 按钮。
保存对 kuboard
工作负载的修改
刷新 Kuboard 界面
刷新 Kuboard 界面后,可以看到,名称空间的布局被调整为如下形式:
监控层
;前端
、后端
、数据库
;中间件
,但是标识已经从 cloud
调整为 midware
,所以原本在此处的 服务注册
工作负载现在显示在 默认
分层中。[外链图片转存中…(img-Ig0RNtX2-1661768183089)]
如果您在使用 Kuboard 之前,就已经创建了许多的工作负载,然后您安装了 Kuboard,此时,所有的工作负载都是显示在 默认
这个分层的。
Kuboard 通过工作负载(Deployment / StatefulSet / DaemonSet 等)的 k8s.eip.work/layer
这个标签来识别工作负载应该显示在哪个分层。
如果您想要将工作负载调整到对应的分层,可以按照如下步骤操作:
[外链图片转存中…(img-sugZt8Du-1661768183089)]
点击上图中 调整所在分层 按钮,将打开编辑标签的界面:
编辑 k8s.eip.work/layer
,并选择您想要的分层后,点击 确定 按钮。
[外链图片转存中…(img-FDcxfxjw-1661768183089)]