1 资源信息
主机名 | OS | IP | CPU/MEMERY/DISK | 备注 |
---|---|---|---|---|
k8s-master | Rocky-8.10 | 172.16.1.30 | 2core/4GiB/100GiB | k8s-v1.28.0 |
k8s-node01 | Rocky-8.10 | 172.16.1.31 | 4core/8GiB/100GiB | k8s-v1.28.0 |
k8s-node02 | Rocky-8.10 | 172.16.1.32 | 4core/8GiB/100GiB | k8s-v1.28.0 |
k8s-dashboard | Rocky-8.10 | 172.16.1.23 | 2core/4GiB/100GiB | docker-v26.1.4、kuboard-v3.5.2.x |
注: k8s 使用 cri-dockerd 插件, k8s 使用 docker 作为容器运行时。
2 安装 Kuboard v3 - kubernetes
官方URL: https://kuboard.cn/install/v3/install-in-k8s.html
2.1 说明
在 K8S 中安装 Kuboard,主要考虑的问题是,如何提供 etcd 的持久化数据卷。
推荐使用 hostPath 提供持久化存储,将 kuboard 所依赖的 Etcd 部署到 Master 节点,并将 etcd 的数据目录映射到 Master 节点的本地目录。
2.2 在线安装
在 k8s-master 节点上进行操作。
1 查看 master 节点角色标签
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 35h v1.28.0
k8s-node01 Ready <none> 35h v1.28.0
k8s-node02 Ready <none> 35h v1.28.0
可以看到 k8s-master 节点的角色标签是 control-plane,需要再添加一个 master 标签。
2 添加 master 节点角色标签
[root@k8s-master ~]# kubectl label nodes k8s-master node-role.kubernetes.io/master=
node/k8s-master labeled
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 35h v1.28.0
k8s-node01 Ready <none> 35h v1.28.0
k8s-node02 Ready <none> 35h v1.28.0
# 也可以通过下面的命令查看指定节点的标签
kubectl get nodes k8s-master --show-labels
注: 当在阿里云、腾讯云(以及其他云)托管的 K8S 集群中以此方式安装 Kuboard 时,执行 kubectl get nodes 将看
不到 master 节点,或者当你删除了 master 节点的 node-role.kubernetes.io/master= 标签时,可以为一个
或者三个 worker 节点添加 k8s.kuboard.cn/role=etcd 的标签,来增加 kuboard-etcd 的实例数量。
etcd
(1) Kuboard V3 依赖于 etcd 提供数据的持久化服务,在当前的安装方式下,kuboard-etcd 的存储卷被映射到宿主机节点的
hostPath(/usr/share/kuboard/etcd)目录);
(2) 为了确保每次重启,etcd 能够加载到原来的数据,以 DaemonSet 的形式部署 kuboard-etcd,并且其容器组将始终被调度
到 master 节点,因此,您有多少个 master 节点,就会调度多少个 kuboard-etcd 的实例。
(3) 某些情况下,您的 master 节点只有一个或者两个,却仍然想要保证 kubuoard-etcd 的高可用,此时,您可以通过为一到
两个 worker 节点添加 k8s.kuboard.cn/role=etcd 的标签,来增加 kuboard-etcd 的实例数量。
(4) 如果您已经安装了 Kuboard V3,通过此方式调整 etcd 数量时,需要按照如下步骤执行,否则 etcd 将不能正常启动
1)执行 kubectl delete daemonset kuboard-etcd -n kuboard
2)为节点添加标签
3)执行 kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
4)建议 etcd 部署的数量为 奇数
总结: kuboard 采用 DaemonSet 的形式部署 kuboard-etcd,并且其容器组将始终被调度到存在
node-role.kubernetes.io/master= 标签的 master 节点或存在 k8s.kuboard.cn/role=etcd
标签的 worker 节点,kuboard-etcd 的存储卷被映射到宿主机节点的 hostPath(/usr/share/kuboard/etcd)
目录,确保了每次重启 etcd 能够加载到原来的数据。
3 使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
[root@k8s-master ~]# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
4 查看 kuboard 命名空间中的 pod 已就绪
[root@k8s-master ~]# kubectl get pod -n kuboard -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kuboard-agent-2-6c8965cd97-rqrdq 1/1 Running 0 8m56s 10.244.85.197 k8s-node01
kuboard-agent-66d5699bf9-5xprk 1/1 Running 0 8m56s 10.244.85.196 k8s-node01
kuboard-etcd-k8dn9 1/1 Running 0 10m 172.16.1.30 k8s-master
kuboard-v3-7979bc788f-fggsf 1/1 Running 0 10m 10.244.85.195 k8s-node01
[root@k8s-master ~]#
2.3 访问 Kuboard
在浏览器中打开链接 http://your-node-ip-address:30080
输入初始用户名和密码,并登录,用户名: admin
密码: Kuboard123
1 浏览器兼容性 (1) 请使用 Chrome / FireFox / Safari / Edge 等浏览器 (2) 不兼容 IE 以及以 IE 为内核的浏览器
2 添加新的集群
(1) Kuboard v3 是支持 Kubernetes 多集群管理的,在 Kuboard v3 的首页里,点击 添加集群
按钮,在向导的引导下可以完成集群的添加。
(2) 向 Kuboard v3 添加新的 Kubernetes 集群时,请确保您新添加集群可以访问到当前集群 Master 节点
内网IP
的 30080 TCP
、
30081 TCP
、30081 UDP
端口,这些端口是使用 NodePort 方式暴露的。
注意:
k8s service 使用 nodeport 暴露,在节点上使用 netstat -tunlp | grep <port> 效验,发现端口找不到,telnet 发现又可以访问,这是因为在
k8s 新版本中已经删除了 kube-proxy 打开端口套接字部分,但是会在 iptables 中进行转发,故不影响访问。在 k8s master、worker 任意一
个节点上都可以查看到 iptables nat 转发规则。
2.4 升级 kuboard
直接修改 kuboard
名称空间下名称为 kuboard-v3
的 Deployment 的镜像版本号为最新的版本号,然后等待片刻即可。
2.5 卸载 Kuboard
在 k8s-master 节点上操作
1 执行 Kuboard v3 的卸载
[root@k8s-master ~]# kubectl delete -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
2 清理遗留数据
在 master 节点以及带有 k8s.kuboard.cn/role=etcd
标签的节点上执行
[root@k8s-master ~]# rm -rf /usr/share/kuboard/
3 安装 Kuboard v3 - 内建用户库
官方URL: https://kuboard.cn/install/v3/install-built-in.html
3.1 说明
1 基于如下原因,建议您以 docker run
的方式运行 Kuboard
(1) 结构更清晰(Kuboard 作为多个集群的管理界面应该独立于任何集群之外,虽然安装在 Kubernetes 集群中的 Kuboard 也可以管理多
个集群)。
(2) 登录 Kuboard 时使用不同的认证方式。
(3) 问题排查更简单。
3.2 架构说明
1 用户通过 http://外网IP:80 访问 Kuboard v3 。
2 安装在 Kubernetes 中的 Kuboard Agent 通过 内网IP
访问 Kuboard 的 Web 服务端口 80 和 Kuboard Agent Server 端口 10081。
3.3 安装
在 k8s-dashboard 节点进行操作。
[root@k8s-dashboard ~]# docker run -d \
--restart=unless-stopped \
--name=kuboard \
-p 30080:80/tcp \
-p 30081:10081/udp \
-p 30081:10081/tcp \
-e KUBOARD_ENDPOINT="http://172.16.1.23:30080" \
-e KUBOARD_AGENT_SERVER_UDP_PORT="30081" \
-e KUBOARD_AGENT_SERVER_TCP_PORT="30081" \
-v /root/kuboard-data:/data \
swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
参数说明:
(1) 建议将此命令保存为一个 shell 脚本,例如 start-kuboard.sh,后续升级 Kuboard 或恢复 Kuboard 时,需要通过此命令了解到最初
安装 Kuboard 时所使用的参数。
(2) 第 4 行,将 Kuboard Web 端口 80 映射到宿主机的 30080 端口。
(3) 第 5、6 行,将 Kuboard Agent Server 的端口 10081/tcp 10081/udp 映射到宿主机的 30081 端口。
(4) 第 7 行,指定 KUBOARD_ENDPOINT 为 http://内网IP:30080,如果后续修改此参数,需要将已导入的 Kubernetes 集群从 Kuboard
中删除,再重新导入。
1) KUBOARD_ENDPOINT 参数的作用是让部署到 Kubernetes 中的 kuboard-agent 知道如何访问 Kuboard Server;
2) KUBOARD_ENDPOINT 中也可以使用外网 IP;
3) Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server;
4) 建议在 KUBOARD_ENDPOINT 中使用域名,如果使用域名,必须能够通过 DNS 正确解析到该域名,如果直接在宿主机配置 /etc/hosts 文件,
将不能正常运行。
(5) 第 8、9 行,指定 KUBOARD_AGENT_SERVER 的端口为 30081,此参数与第 5、6 行中的宿主机端口应保持一致,修改此参数不会改变容器内监听
的端口 10081。
(6) 第 10 行,将持久化数据 /data 目录映射到宿主机的 /root/kuboard-data 路径。
3.4 访问 Kuboard v3.x
在浏览器输入 http://172.16.1.23:30080
即可访问 Kuboard v3.x 的界面。登录方式为: 用户名: admin
密 码: Kuboard123
浏览器兼容性: 请使用 Chrome / FireFox / Safari 等浏览器,不兼容 IE 以及以 IE 为内核的浏览器。
3.5 导入 k8s 集群
1 添加集群
2 配置添加集群参数
3 在被需要导入的 k8s 集群上执行导入命令
4 选择访问集群所需要的身份
5 安装 metrics-scraper
6 同理再导入一个 k8s 集群
我这里将同一个 k8s 集群再次导入到 kuboard 中,在 kuboard 中名称不同,需要特别注意的是Agent 部署名称
要修改
一下。
可以看到 kuboard 中导入了 2 个 k8s 集群。
到 k8s-master 节点去查看部署的 agent 情况。
3.6 从 kuboard 中删除 k8s 集群
3.7 升级 kuboard
因为是通过 docker run 运行的 Kuboard,升级步骤如下: 1 停止已有的 kuboard 容器
[root@k8s-dashboard ~]# docker stop kuboard
2 使用新版本的镜像启动 kuboard
docker run 命令使用的还是 "3.3 安装" 章节中的。
请注意:
(1) 除了镜像标签之外,请确保命令行中所有其他参数与最初安装 Kuboard 时的参数一致。
(2) 如果您修改此处宿主机端口号,则需要您在 Kuboard 中删除已经导入了的 Kubernetes 集群,并重新导入。
(3) 请留意第 7、8、9 三行,是 v3.0.0.alpha.4 版本开始必须设置的新增参数。
4 简单使用
在 k8s-master 节点使用 kubectl 命令查看 kuboard 命名空间下 deployment/metrics-scraper 控制器的相关信息。
根据以上内容对比 kuboard 控制台。
pod 相关信息
元数据信息
service 相关信息
借助 Kuboard Proxy,登录 Kuboard 的用户可以直接访问 Service/Pod,而无需为 Service 做额外的 NodePort、Ingress 等配置。Kuboard Proxy 是 kubectl proxy
命令一种替代选项,与 kubectl proxy
相比,用户可以直接在 Kuboard 界面进行操作,而无需使用命令行。
5 用户管理
目标: 实现 liuchang
用户只能访问 k8s-1.28.0-002
集群且只有只读权限。
kuboard 内置角色如下:
5.1 创建用户
5.2 赋予权限
1 三个选项只选择其中一项,我这里选择 角色绑定(集群级别)
2 角色、k8s集群选择
3 补充:另一种实现方式
创建一个用户组
,在用户组
中实现角色绑定(集群级别)
,将 liuchang
用户加入到该用户组即可。
5.3 验证
使用 liuchang 账号登录 kuboard 成功后发现 Kubernetes 集群列表
下只有k8s-1.28.0-002
集群。
左侧选项中选择访问集群时所使用的身份
第一项已经不能选择,集群概要、集群导入信息
也无法点击。
进入 kuboard
命名空间下的 Deployment/metrics-scraper
控制器下,扩充副本失败,报 403
无权限。