欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > (二十一)、Docker 部署 Minikube 使用可视化管理工具 Kuboard

(二十一)、Docker 部署 Minikube 使用可视化管理工具 Kuboard

2024/10/28 7:02:36 来源:https://blog.csdn.net/bestcxx/article/details/143197397  浏览:    关键词:(二十一)、Docker 部署 Minikube 使用可视化管理工具 Kuboard

文章目录

    • 1、介绍
      • docker 运行 minikube 集群节点(kube-apiserver )无法被直接访问的问题
      • Kuboard 需要访问到 k8s 集群的kube-apiserver
    • 2、安装 Kuboard
      • 2.1、k8s 集群节点可以被外部直接访问的情况
        • 2.1.1、下载镜像
        • 2.1.2、运行 deployment.yml
        • 2.1.3、访问 Kuboard
      • 2.2、k8s 集群节点无法被外部直接访问的情况
        • 2.2.1.、细节
        • 2.2.2、 修改完后的文档
        • 2.2.3、 执行 yaml,部署 Kuboard 的Pod和NodePort
        • 2.2.4、确定Pod运行状态
        • 2.2.5、访问 Kuboard
    • 3、Kuboard 添加集群
    • 4、Kuboard 查看k8s 集群内容
    • 5、体验自动/手动伸缩功能

1、介绍

访问 Kuboard 官网

docker 运行 minikube 集群节点(kube-apiserver )无法被直接访问的问题

对于本系列,系统环境是 mac(OS 14.3.1) ,此版本的OS 系统暂不支持以 Virtual Box 方式运行 minikube 。
使用 docker 部署 minikube 会有一个问题,就是minikube 的内部地址没有办法直接被宿主机访问。
对于docker 运行 minikube ,在k8s 中部署的服务,可以通过 NodePort 方式暴露服务,然后通过隧道端口被宿主机直接访问。
但是对于集群节点,这种方式行不通,即无法为表示集群节点的 kube-apiserver 提供一个可以直接被宿主机访问的端口映射。

Kuboard 需要访问到 k8s 集群的kube-apiserver

Kuboard 通过代理地址和 k8s 集群进行交互,如果 k8s 服务不可访达,那么交互就无从谈起。

2、安装 Kuboard

2.1、k8s 集群节点可以被外部直接访问的情况

比如使用 Virtual Box 安装minikube 的模式,或者 docket dasktop 自带 k8s 的模式。
直接使用 docker 安装 Kuboard 即可。
这里使用 本机 Docker 安装独立的 Kuboard V3 版本
在这里插入图片描述

2.1.1、下载镜像
docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
2.1.2、运行 deployment.yml

这里具体采取的配置为 8081 为宿主机访问Kuboard的端口,30081 为Kuboard访问 k8s 集群的代理端口
192.168.58.2 为

docker volume create kuboard-data
docker run -d \--restart=unless-stopped \--name=kuboard \-p 80:80/tcp \-p 10081:10081/tcp \-e KUBOARD_ENDPOINT="https://192.168.58.2:8443" \-e KUBOARD_AGENT_SERVER_TCP_PORT=30081 \-v kuboard-data:/data/kuboard \swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
2.1.3、访问 Kuboard

http://127.0.0.1:8081/
默认登陆名和密码是

admin/Kuboard123

2.2、k8s 集群节点无法被外部直接访问的情况

比如本系列中,使用 docker 部署 minikube ,此时k8s 集群节点无法被外部直接访问,我们直接在 K8s 内部署 Kuboard,利用k8s 集群内可以自由通信的特性,再把 Kuboard 以NodePort 的形式暴露出来。

2.2.1.、细节
  • 确认 node 节点ip

192.168.49.2

➜  ~ kubectl get nodes -o wide
NAME       STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
minikube   Ready    control-plane   25m   v1.31.0   192.168.49.2   <none>        Ubuntu 22.04.4 LTS   5.15.49-linuxkit   docker://27.2.0
  • 确认 storageclass,比如下面查询到叫 standard

standard

➜  ~ kubectl get storageclass
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
standard (default)   k8s.io/minikube-hostpath   Delete          Immediate           false                  21m
  • 下载 kuboard-v3.yaml,对其中的内容进行修改

官方链接

第一把 KUBOARD_ENDPOINT: ‘http://your-node-ip-address:30080’ 中 your-node-ip-address 修改为 kubectl get nodes -o wide 查询获得的ip (我这里是 192.168.49.2 )
第二是把 storageClassName: please-provide-a-valid-StorageClass-name-here 中please-provide-a-valid-StorageClass-name-here修改为 kubectl get storageclass 查询得到的name (我这里是 standard)
第三,对 PVC 部分修改为下面内容-增加了一行 storageClassName: standard
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kuboard-data-pvc
namespace: kuboard
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi # 根据需要调整大小
storageClassName: standard # 确保与您的 PV 的存储类匹配
在这里插入图片描述

2.2.2、 修改完后的文档
---
apiVersion: v1
kind: Namespace
metadata:name: kuboard---
apiVersion: v1
kind: ConfigMap
metadata:name: kuboard-v3-confignamespace: kuboard
data:# 关于如下参数的解释,请参考文档 https://kuboard.cn/install/v3/install-built-in.html# [common]KUBOARD_ENDPOINT: 'http://192.168.49.2:30080'KUBOARD_AGENT_SERVER_UDP_PORT: '30081'KUBOARD_AGENT_SERVER_TCP_PORT: '30081'KUBOARD_SERVER_LOGRUS_LEVEL: info  # error / debug / trace# KUBOARD_AGENT_KEY 是 Agent 与 Kuboard 通信时的密钥,请修改为一个任意的包含字母、数字的32位字符串,此密钥变更后,需要删除 Kuboard Agent 重新导入。KUBOARD_AGENT_KEY: 32b7d6572c6255211b4eec9009e4a816  # 关于如下参数的解释,请参考文档 https://kuboard.cn/install/v3/install-gitlab.html# [gitlab login]# KUBOARD_LOGIN_TYPE: "gitlab"# KUBOARD_ROOT_USER: "your-user-name-in-gitlab"# GITLAB_BASE_URL: "http://gitlab.mycompany.com"# GITLAB_APPLICATION_ID: "7c10882aa46810a0402d17c66103894ac5e43d6130b81c17f7f2d8ae182040b5"# GITLAB_CLIENT_SECRET: "77c149bd3a4b6870bffa1a1afaf37cba28a1817f4cf518699065f5a8fe958889"# 关于如下参数的解释,请参考文档 https://kuboard.cn/install/v3/install-github.html# [github login]# KUBOARD_LOGIN_TYPE: "github"# KUBOARD_ROOT_USER: "your-user-name-in-github"# GITHUB_CLIENT_ID: "17577d45e4de7dad88e0"# GITHUB_CLIENT_SECRET: "ff738553a8c7e9ad39569c8d02c1d85ec19115a7"# 关于如下参数的解释,请参考文档 https://kuboard.cn/install/v3/install-ldap.html# [ldap login]# KUBOARD_LOGIN_TYPE: "ldap"# KUBOARD_ROOT_USER: "your-user-name-in-ldap"# LDAP_HOST: "ldap-ip-address:389"# LDAP_BIND_DN: "cn=admin,dc=example,dc=org"# LDAP_BIND_PASSWORD: "admin"# LDAP_BASE_DN: "dc=example,dc=org"# LDAP_FILTER: "(objectClass=posixAccount)"# LDAP_ID_ATTRIBUTE: "uid"# LDAP_USER_NAME_ATTRIBUTE: "uid"# LDAP_EMAIL_ATTRIBUTE: "mail"# LDAP_DISPLAY_NAME_ATTRIBUTE: "cn"# LDAP_GROUP_SEARCH_BASE_DN: "dc=example,dc=org"# LDAP_GROUP_SEARCH_FILTER: "(objectClass=posixGroup)"# LDAP_USER_MACHER_USER_ATTRIBUTE: "gidNumber"# LDAP_USER_MACHER_GROUP_ATTRIBUTE: "gidNumber"# LDAP_GROUP_NAME_ATTRIBUTE: "cn"---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: kuboard-etcdnamespace: kuboardlabels:app: kuboard-etcd
spec:serviceName: kuboard-etcdreplicas: 3selector:matchLabels:app: kuboard-etcdtemplate:metadata:name: kuboard-etcdlabels:app: kuboard-etcdspec:containers:- name: kuboard-etcdimage: swr.cn-east-2.myhuaweicloud.com/kuboard/etcd:v3.4.14ports:- containerPort: 2379name: client- containerPort: 2380name: peerenv:- name: KUBOARD_ETCD_ENDPOINTSvalue: >-kuboard-etcd-0.kuboard-etcd:2379,kuboard-etcd-1.kuboard-etcd:2379,kuboard-etcd-2.kuboard-etcd:2379volumeMounts:- name: datamountPath: /datacommand:- /bin/sh- -c- |PEERS="kuboard-etcd-0=http://kuboard-etcd-0.kuboard-etcd:2380,kuboard-etcd-1=http://kuboard-etcd-1.kuboard-etcd:2380,kuboard-etcd-2=http://kuboard-etcd-2.kuboard-etcd:2380"exec etcd --name ${HOSTNAME} \--listen-peer-urls http://0.0.0.0:2380 \--listen-client-urls http://0.0.0.0:2379 \--advertise-client-urls http://${HOSTNAME}.kuboard-etcd:2379 \--initial-advertise-peer-urls http://${HOSTNAME}:2380 \--initial-cluster-token kuboard-etcd-cluster-1 \--initial-cluster ${PEERS} \--initial-cluster-state new \--data-dir /data/kuboard.etcdvolumeClaimTemplates:- metadata:name: dataspec:# 请填写一个有效的 StorageClass namestorageClassName: standardaccessModes: [ "ReadWriteMany" ]resources:requests:storage: 5Gi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: kuboard-data-pvcnamespace: kuboard
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10Gi  # 根据需要调整大小storageClassName: standard  # 确保与您的 PV 的存储类匹配---
apiVersion: v1
kind: Service
metadata:name: kuboard-etcdnamespace: kuboard
spec:type: ClusterIPports:- port: 2379name: client- port: 2380name: peerselector:app: kuboard-etcd---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: '9'k8s.kuboard.cn/ingress: 'false'k8s.kuboard.cn/service: NodePortk8s.kuboard.cn/workload: kuboard-v3labels:k8s.kuboard.cn/name: kuboard-v3name: kuboard-v3namespace: kuboard
spec:replicas: 1selector:matchLabels:k8s.kuboard.cn/name: kuboard-v3template:metadata:labels:k8s.kuboard.cn/name: kuboard-v3spec:containers:- env:- name: KUBOARD_ETCD_ENDPOINTSvalue: >-kuboard-etcd-0.kuboard-etcd:2379,kuboard-etcd-1.kuboard-etcd:2379,kuboard-etcd-2.kuboard-etcd:2379envFrom:- configMapRef:name: kuboard-v3-configimage: 'swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3'imagePullPolicy: Alwaysname: kuboardvolumeMounts:- mountPath: "/data"name: kuboard-datavolumes:- name: kuboard-datapersistentVolumeClaim:claimName: kuboard-data-pvc---
apiVersion: v1
kind: Service
metadata:annotations:k8s.kuboard.cn/workload: kuboard-v3labels:k8s.kuboard.cn/name: kuboard-v3name: kuboard-v3namespace: kuboard
spec:ports:- name: webuinodePort: 30080port: 80protocol: TCPtargetPort: 80- name: agentservertcpnodePort: 30081port: 10081protocol: TCPtargetPort: 10081- name: agentserverudpnodePort: 30081port: 10081protocol: UDPtargetPort: 10081selector:k8s.kuboard.cn/name: kuboard-v3sessionAffinity: Nonetype: NodePort
2.2.3、 执行 yaml,部署 Kuboard 的Pod和NodePort

kubectl apply -f kuboard-v3.yaml

➜  kubectl apply -f kuboard-v3.yaml      

正常会打印


namespace/kuboard created
configmap/kuboard-v3-config created
statefulset.apps/kuboard-etcd created
persistentvolumeclaim/kuboard-data-pvc created
service/kuboard-etcd created
deployment.apps/kuboard-v3 created
service/kuboard-v3 created
2.2.4、确定Pod运行状态
➜  ~ kubectl get pods -n kuboard

可能会遇到报错

NAME
kuboard-etcd-0                0/1     ImagePullBackOff   0          2m49s
kuboard-v3-69bd874899-pjj2m   0/1     ErrImagePull       0          2m35s

此时,把对应的Pod删除.会有自动充实机制

kubectl delete pod kuboard-etcd-0 -n kuboard
kubectl delete pod kuboard-v3-69bd874899-pjj2m -n kuboard

启动成功会展示

➜  ~ kubectl get pods -n kuboard
NAME                          READY   STATUS    RESTARTS      AGE
kuboard-etcd-0                1/1     Running   2 (24s ago)   91s
kuboard-etcd-1                1/1     Running   2 (21s ago)   85s
kuboard-etcd-2                1/1     Running   2 (19s ago)   82s
kuboard-v3-69bd874899-zx5cj   1/1     Running   0             30s
2.2.5、访问 Kuboard

因为是在 docker 运行 minikube,访问 Kuboard 的NodePort 服务,需要构造一个隧道端口
参考 从宿主机访问 k8s(minikube) 发布的 redis 服务

特殊之处在于,Kuboard 需要在特定的命名空间中

  • 查看命名空间
# 查看命名空间
➜  ~ kubectl get svc -n kuboard
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                        AGE
kuboard-etcd   ClusterIP   10.97.148.215   <none>        2379/TCP,2380/TCP                              30m
kuboard-v3     NodePort    10.104.126.78   <none>        80:30080/TCP,10081:30081/TCP,10081:30081/UDP   30m
  • 为 kuboard-v3 提供隧道服务

minikube service kuboard-v3 -n kuboard

# 为 提供隧道服务
➜  ~ minikube service kuboard-v3 -n kuboard
W1024 01:11:56.611451   15452 main.go:291] Unable to resolve the current Docker CLI context "default": context "default": context not found: open /Users/wujie/.docker/contexts/meta/37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f/meta.json: no such file or directory
|-----------|------------|----------------------|---------------------------|
| NAMESPACE |    NAME    |     TARGET PORT      |            URL            |
|-----------|------------|----------------------|---------------------------|
| kuboard   | kuboard-v3 | webui/80             | http://192.168.49.2:30080 |
|           |            | agentservertcp/10081 | http://192.168.49.2:30081 |
|           |            | agentserverudp/10081 | http://192.168.49.2:30081 |
|-----------|------------|----------------------|---------------------------|
🏃  为服务 kuboard-v3 启动隧道。
|-----------|------------|-------------|------------------------|
| NAMESPACE |    NAME    | TARGET PORT |          URL           |
|-----------|------------|-------------|------------------------|
| kuboard   | kuboard-v3 |             | http://127.0.0.1:57428 |
|           |            |             | http://127.0.0.1:57429 |
|           |            |             | http://127.0.0.1:57430 |
|-----------|------------|-------------|------------------------|
[kuboard kuboard-v3  http://127.0.0.1:57428
http://127.0.0.1:57429
http://127.0.0.1:57430]
❗  因为你正在使用 darwin 上的 Docker 驱动程序,所以需要打开终端才能运行它。

访问 http://127.0.0.1:57428
http://127.0.0.1:57429
http://127.0.0.1:57430 任意一个
在这里插入图片描述
默认用户名和密码是

admin/Kuboard123

在这里插入图片描述

3、Kuboard 添加集群

这里就以 Docker 运行 minikube,然后在 k8s 中部署 Kuboard 为例了

选择第一种方式,获取 token

在这里插入图片描述
ApiServer 地址 写 kubectl get nodes -o wide 获取的地址(我这里是 192.168.49.2),端口固定为 8443,需要以 https:// 开头
即 https://192.168.49.2:8443

在这里插入图片描述

4、Kuboard 查看k8s 集群内容

需要先选择访问集群的身份
在这里插入图片描述

5、体验自动/手动伸缩功能

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com