1.1 Kuboard
-
Kuboard 是一个 Kubernetes 可视化管理平台,它提供了一种简单易用的方式来管理和监控 Kubernetes 集群。通过 Kuboard,用户可以轻松地部署、扩展和管理容器化应用程序,同时它还提供了一些高级功能,比如集群监控、日志管理、资源管理等。
-
官网:Kuboard_Kubernetes教程_K8S安装_管理界面
1.1.1 要求
Kubernetes 版本 | Kuboard 版本 | 兼容性 | 说明 |
---|---|---|---|
v1.28 | v3.5.2.x | 😄 | 已验证 |
v1.27 | v3.x | 😄 | 已验证 |
v1.26 | v3.x | 😄 | 已验证 |
v1.25 | v3.x | 😄 | 已验证 |
v1.24 | v3.x | 😄 | 已验证 |
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 作为多个集群的管理界面应该独立于任何集群之外,虽然安装在 Kubernetes 集群中的 Kuboard 也可以管理多个集群);
-
登录 Kuboard 时使用不同的认证方式;
-
问题排查更简单;
1.1.2 内建用户库部署kuboard V3
在正式安装 kuboard v3 之前,需做好一个简单的部署计划的设计,在本例中,各组件之间的连接方式,如下图所示:
-
假设用户通过 http://外网IP:80 访问 Kuboard v3;
-
安装在 Kubernetes 中的 Kuboard Agent 通过
内网IP
访问 Kuboard 的 Web 服务端口 80 和 Kuboard Agent Server 端口 10081。
安装 Kuboard 之前,假设:
-
您已经准备好了一个 Linux 服务器用于安装 Kuboard-V3,并且该机器上的 docker 版本不低于 19.03
-
用于安装 Kuboard v3.x 的机器已经安装了 docker,并且版本不低于 docker 19.03
-
您已经有自己的 Kubernetes 集群,并且版本不低于 Kubernetes v1.13
[root@k8s-master-01 ~]# mkdir kuboard-v3 [root@k8s-master-01 ~]# cd kuboard-v3/ [root@k8s-master-01 kuboard-v3]# docker run -d \ --restart=unless-stopped \ --name=kuboard \ -p 80:80/tcp \ -p 10081:10081/tcp \ -e KUBOARD_ENDPOINT="http://192.168.110.21: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 \ # 这里确保80端口没有监听,或者直接修改端口
1.1.3 WARNING
-
KUBOARD_ENDPOINT 参数的作用是,让部署到 Kubernetes 中的
kuboard-agent
知道如何访问 Kuboard Server; -
KUBOARD_ENDPOINT 中也可以使用外网 IP;
-
Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server;
-
建议在 KUBOARD_ENDPOINT 中使用域名;
-
如果使用域名,必须能够通过 DNS 正确解析到该域名,如果直接在宿主机配置
/etc/hosts
文件,将不能正常运行;
1.1.4 参数解释
-
建议将此命令保存为一个 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
路径,请根据您自己的情况调整宿主机路径;
1.1.5 访问 Kuboard v3.x
在浏览器输入 http://your-host-ip:80
即可访问 Kuboard v3.x 的界面,登录方式:
-
用户名:
admin
-
密 码:
Kuboard123
-
在启动命令行中增加环境变量
KUBOARD_ADMIN_DERAULT_PASSWORD
,可以设置admin
用户的初始默认密码。
1.1.6 添加集群
-
粘贴这些内容获取Token
[root@k8s-master-01 kuboard-v3]# cat << EOF > kuboard-create-token.yaml --- apiVersion: v1 kind: Namespace metadata: name: kuboard --- apiVersion: v1 kind: ServiceAccount metadata: name: kuboard-admin namespace: kuboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kuboard-admin-crb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kuboard-admin namespace: kuboard --- apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: annotations: kubernetes.io/service-account.name: kuboard-admin name: kuboard-admin-token namespace: kuboard EOF [root@k8s-master-01 kuboard-v3]# [root@k8s-master-01 kuboard-v3]# kubectl apply -f kuboard-create-token.yaml [root@k8s-master-01 kuboard-v3]# echo -e "\033[1;34m将下面这一行红色输出结果填入到 kuboard 界面的 Token 字段:\033[0m" 将下面这一行红色输出结果填入到 kuboard 界面的 Token 字段: [root@k8s-master-01 kuboard-v3]# echo -e "\033[31m$(kubectl -n kuboard get secret $(kubectl -n kuboard get secret kuboard-admin-token | grep kuboard-admin-token | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)\033[0m" eyJhbGciOiJSUzI1NiIsImtpZCI6IlpmcEhiNTFfcDBka3pYM2VCeUVwR1hIMFNBZHNnX25TY0FwMDhjazhRdUkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJvYXJkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1Ym9hcmQtYWRtaW4tdG9rZW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImZhZTg1Y2ExLTU0ZmItNGZlZS05OTAzLTU0OTVhN2RkMWIxYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJvYXJkOmt1Ym9hcmQtYWRtaW4ifQ.lQgXCznEGbNKVi8j7f5ZGbJreDHTAveIv-YftX-0P1LsmGKmpICnwmKAgv558GPxlOrtABdEvyUmGCHP_IkIwpAbBjiZubPaVDM-nFsUvpTsmXNJ-brkbFFhYY5LxE5d74XrDdc0z8WBXzzt-Ipb0Jy30GdGea33CH0qMvS_xBaGd6ObjJnUomlX8ZC6EeYMfquaOMoVBEv-R-88fxxj7-oWHQtYMYmHYrO-1vD2R7CFjbN6Dtx0wE-4hDsw8SelL1YS4k-fA2UG-MoUL-xXmBVFWzVTDDI96ctZK7LIfANmABo1I6O_rVR5Bc0z5BssIXflRn4InK6ryOmvoezZNQ
1.1.7 测试
-
创建NameSpace
[root@k8s-master-01 kuboard-v3]# kubectl get ns dev NAME STATUS AGE dev Active 27s
-
部署工作负载
[root@k8s-master-01 kuboard-v3]# kubectl get pod -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-pod-8959999b6-46ksq 1/1 Running 0 71s 10.244.154.198 k8s-node-01 <none> <none> nginx-pod-8959999b6-lzgfh 1/1 Running 0 71s 10.244.44.195 k8s-node-02 <none> <none> nginx-pod-8959999b6-qxlhk 1/1 Running 0 71s 10.244.44.196 k8s-node-02 <none> <none>
[root@k8s-master-01 ~]# kubectl get svc -n dev NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-pod NodePort 10.109.210.215 <none> 81/3008 20s