一文学会Kubenetes可视化工具部署
❤️ 摘要:KubeDashboard和Kuboard是两种常见的Kubernetes可视化管理工具,它们帮助用户更直观地管理和监控Kubernetes集群。本文将介绍这两种工具的功能和组件,并对比它们的优势与适用场景,接着带着读者一步一步完成Kuboard的搭建和简单应用。本文适合希望深入了解并部署 Kubernetes可视化的开发者或者系统管理员阅读。
目录
1. 概念
1.1 KubeDashboard
KubeDashboard是Kubernetes官方提供的可视化界面,主要用于管理集群的资源和应用。它可以简化系统管理员的操作并能直观管理Kubernetes集群,例如创建、监控Pod、Service、deployment等资源,查看日志、管理命名空间等任务。
主要功能:
- 查看集群资源(如Pod、Deployment、DaemonSet等)。
- 管理工作负载:创建、更新和删除工作负载资源。
- 查看应用程序的运行状态、日志和事件。
- 管理Kubernetes凭证,例如ConfigMap和Secret。
1.2 Kuboard简介
Kuboard是一款国产的基于Kubernetes的用户友好型可视化管理工具,尤其适合初学者和中小型团队。它支持丰富的集群监控、资源管理以及滚动更新、蓝绿部署等功能,并且具备相对简单的安装过程和优秀的用户体验。
主要功能:
- 支持丰富的可视化集群监控。
- 管理多集群、多租户。
- 提供详细的Pod调度、服务发现等可视化。
- 支持CI/CD集成,提供流水线执行可视化。
- 提供了更为复杂的部署操作,如蓝绿部署、滚动更新。
1.3 KubeDashboard与Kuboard对比
对比项 | KubeDashboard | Kuboard |
---|---|---|
提供商 | Kubernetes官方 | 国内优秀项目,针对企业需求优化 |
用户体验 | 简洁,功能有限,适合基础操作 | 界面更加友好,功能丰富,适合复杂场景 |
登录方式 | 只能通过 Bearer Token 或 kubeconfig 文件登录 | 支持账密登录、LDAP集中认证、Github/Gitlab单点登录等多种方式 |
部署复杂度 | 简单,目前仅支持基于 Helm 的安装 | 简单,支持docker、Kubernetes等多种方式部署 |
功能深度 | 提供基础的集群管理和监控功能 | 支持多集群、多租户及更复杂的部署方式 |
CI/CD支持 | 无CI/CD功能 | 支持CI/CD集成,适合DevOps场景 |
适用场景 | 适合初学者,快速了解K8s资源情况 | 适合企业级应用,支持更复杂的K8s运维管理 |
2. Kuboard部署实践
❔ 说明:Kuboard官方强烈建议您使用
docker run
或者static-pod
的方式安装 kuboard,我默认认为我的读者都是有一定的Linux和Kubernetes基础的, 所以以下演示案例会将Kuboard部署在Kubernetes集群中。
2.1 使用 hostPath 为Kuboard提供持久化
2.1.1 安装Kuboard
下载yaml部署文件
curl -o kuboard-v3.yaml https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
修改kuboard-v3.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: kuboard-v3-config
namespace: kuboard
data:
# [common]
# 修改Kuboard的启动端口
KUBOARD_SERVER_NODE_PORT: '30088'
---
apiVersion: v1
kind: Service
metadata:
annotations: {
}
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
ports:
- name: web
# 修改Kuboard的暴露端口
nodePort: 30088
- 镜像替换成私有仓库地址
---
containers:
- env:
- name: HOSTNAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: HOSTIP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
# 修改私有仓库地址
image: 'harbor.zx/hcie/etcd-host:3.4.16-2'
# 修改镜像拉取策略
imagePullPolicy: IfNotPresent
---
containers:
- env:
- name: HOSTIP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
- name: HOSTNAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
envFrom:
- configMapRef:
name: kuboard-v3-config
# 修改私有仓库地址
image: 'harbor.zx/hcie/kuboard:v3'
# 修改镜像拉取策略
imagePullPolicy: IfNotPresent
部署节点亲和性
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
weight: 100
- preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
weight: 100
❔ 说明:kuboard会部署在有
node-role.kubernetes.io/master
、node-role.kubernetes.io/control-plane
这两个标签的节点上。关于节点亲和度,后面文章会详细说明,敬请期待。
查看节点的label:
[root@k8s-master1 ~]# kubectl get node --show-labels |grep node-role
- 发现master节点并没有这两个标签,可能是二进制部署k8s环境默认没有这两个label
为master节点添加label,执行以下命令:
kubectl label node k8s-master${i} node-role.kubernetes.io/master=
kubectl label node k8s-master${i} node-role.kubernetes.io/control-plane=
如果您的Kubernetes集群有多个master节点,可以执行for循环添加label到全部节点:
for i in {
1..3};do kubectl label node k8s-master${i} node-role.kubernetes.io/master=;done
for i in {
1..3};do kubectl label node k8s-master${i} node-role.kubernetes.io/control-plane=;done
部署kuboard-v3
kubectl apply -f kuboard-v3.yaml
查看部署情况
[root@k8s-master1 ~]# kubectl -n kuboard get pod
NAME READY STATUS RESTARTS AGE
kuboard-etcd-54hsl 1/1 Running 0 3m
kuboard-etcd-tndsc 1