上一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)
*️⃣主目录:温故知新专栏
下一集:在Kubernetes集群中部署 DolphinScheduler 服务
在前面完成了k8s集群部署,除了知道现在节点状态都是ready,其他一无所知,到底怎么用呢?需要各种命令以及编辑各种配置文件,这么看来也不简单,难道没有可视化管理工具来方便大家操作?答案当然是有了!
[kubernetes@renxiaozhao01 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4d17h v1.28.1
k8s-node01 Ready <none> 3d20h v1.28.1
k8s-node02 Ready <none> 3d19h v1.28.1
[kubernetes@renxiaozhao01 ~]$
找到两款Dashboard
和Kuboard
:
Kuboard
是一个基于Kubernetes的开源仪表盘工具,它提供了丰富的功能,可以帮助用户管理和监控Kubernetes集群
Kuboard
提供了多种功能,包括集群监控、资源管理、日志查看、应用部署等,可以满足用户大部分的需求。Kuboard
提供了直观的可视化界面,用户可以通过图表和图形化展示来了解集群的状态和性能。Kuboard
提供了简单易用的操作界面,用户可以通过简单的操作完成复杂的任务。Kuboard
是一个相对复杂的工具,用户需要花费一些时间来学习和理解其使用方法和原理。Kuboard
是基于Kubernetes
的,对于没有使用Kubernetes
的用户来说,可能无法充分发挥其功能。Dashboard
是Kubernetes官方提供的仪表盘工具,
Dashboard
可以通过简单的命令安装,并提供了直观的操作界面,用户可以通过简单的操作完成集群管理和监控任务。Kuboard
,Dashboard
的功能相对简单一些,主要提供了集群状态监控、资源查看等基本功能。Kubernetes
官方提供的工具,Dashboard
有很好的社区支持,用户可以在社区中获取到丰富的文档和教程。Kuboard
,Dashboard
的功能相对有限,对于一些高级的需求可能无法满足。Dashboard
的可视化界面相对简陋一些,没有Kuboard
提供的丰富的图表和图形化展示。对于Kubernetes用户来说,如果需要一个功能丰富、可视化界面友好的仪表盘工具,可以考虑使用Kuboard
;如果只需要基本的集群管理和监控功能,或者不希望投入太多学习成本,可以选择使用Dashboard
,博主这里选择的是Kuboard
。
部署Kuboard
可视化管理界面,希望能够近距离观察集群,快速了解k8s使用
参照Kuboard官网完成部署使用等操作
官网安装地址,不会不支持k8s v1.28
吧(里面还提供了k8s
和Dashboard
安装步骤,有兴趣的可以试试,通过界面安装,听着比较简单Kuboard-Spray
- 是一款可以在图形界面引导下完成 Kubernetes 高可用集群离线安装的工具)
节点打上etcd标签,否则看不到agent服务,并且无法访问登录页面(目前观察到现象如此,具体不详)
[kubernetes@renxiaozhao01 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4d20h v1.28.1
k8s-node01 Ready <none> 3d23h v1.28.1
k8s-node02 Ready <none> 3d22h v1.28.1
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl label nodes k8s-master k8s.kuboard.cn/role=etcd
node/k8s-master labeled
[kubernetes@renxiaozhao01 ~]$ kubectl label nodes k8s-node01 k8s.kuboard.cn/role=etcd
node/k8s-node01 labeled
[kubernetes@renxiaozhao01 ~]$ kubectl label nodes k8s-node02 k8s.kuboard.cn/role=etcd
node/k8s-node02 labeled
[kubernetes@renxiaozhao01 ~]$
执行安装命令
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
[kubernetes@renxiaozhao01 ~]$ kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
namespace/kuboard created
configmap/kuboard-v3-config created
serviceaccount/kuboard-boostrap created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-boostrap-crb created
daemonset.apps/kuboard-etcd created
deployment.apps/kuboard-v3 created
service/kuboard-v3 created
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl get pods -n kuboard
NAME READY STATUS RESTARTS AGE
kuboard-agent-2-99bcb9d7c-2g89d 1/1 Running 0 4m58s
kuboard-agent-54b6d87bcf-mjw98 1/1 Running 0 4m58s
kuboard-etcd-9g2zl 1/1 Running 0 5m43s
kuboard-etcd-hvzbt 1/1 Running 0 5m43s
kuboard-etcd-l86jz 1/1 Running 0 5m43s
kuboard-v3-7979bc788f-gt8fr 1/1 Running 0 5m43s
[kubernetes@renxiaozhao01 ~]$
http://192.168.17.17:30080
(192.168.17.17安装Kuboard的地址,也是master节点IP)admin
密码: Kuboard123
kubeadm
init
: master节点执行,初始化集群sudo kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.17.17 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
kubeadm token create --print-join-command
join
:node节点上面执行,加入mastersudo kubeadm join 192.168.17.17:6443 --token 4ydg4t.7cjjm52hd4p86gmk --discovery-token-ca-cert-hash sha256:ee2c3ae1c2d702b77a0b52f9dafe734aa7e25f33c44cf7fa469c1adc8c176be1 --cri-socket=unix:///var/run/cri-dockerd.sock
kubectl
查看节点状态:kubectl get nodes
[kubernetes@renxiaozhao01 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4d21h v1.28.1
k8s-node01 Ready <none> 4d v1.28.1
k8s-node02 Ready <none> 4d v1.28.1
查看容器状态:-n 指定空间名 -A 查看所有 -owide 详细信息
[kubernetes@renxiaozhao01 ~]$ kubectl get pods -n kuboard
NAME READY STATUS RESTARTS AGE
kuboard-agent-2-99bcb9d7c-2g89d 1/1 Running 0 74m
kuboard-agent-54b6d87bcf-mjw98 1/1 Running 0 74m
kuboard-etcd-9g2zl 1/1 Running 0 75m
kuboard-etcd-hvzbt 1/1 Running 0 75m
kuboard-etcd-l86jz 1/1 Running 0 75m
kuboard-v3-7979bc788f-gt8fr 1/1 Running 0 75m
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-d96z9 1/1 Running 0 4d
kube-flannel kube-flannel-ds-gt6v2 1/1 Running 0 4d7h
kube-flannel kube-flannel-ds-rc8vq 1/1 Running 2 (3d21h ago) 4d
kube-system coredns-66f779496c-6l8gn 1/1 Running 0 4d21h
kube-system coredns-66f779496c-f5nnv 1/1 Running 0 4d21h
kube-system etcd-k8s-master 1/1 Running 3 (4d5h ago) 4d21h
kube-system kube-apiserver-k8s-master 1/1 Running 3 (4d5h ago) 4d21h
kube-system kube-controller-manager-k8s-master 1/1 Running 3 (4d5h ago) 4d21h
kube-system kube-proxy-8t9mp 1/1 Running 3 (3d21h ago) 4d
kube-system kube-proxy-flqbf 1/1 Running 0 4d
kube-system kube-proxy-sqckd 1/1 Running 3 (4d5h ago) 4d21h
kube-system kube-scheduler-k8s-master 1/1 Running 3 (4d5h ago) 4d21h
kuboard kuboard-agent-2-99bcb9d7c-2g89d 1/1 Running 0 74m
kuboard kuboard-agent-54b6d87bcf-mjw98 1/1 Running 0 74m
kuboard kuboard-etcd-9g2zl 1/1 Running 0 75m
kuboard kuboard-etcd-hvzbt 1/1 Running 0 75m
kuboard kuboard-etcd-l86jz 1/1 Running 0 75m
kuboard kuboard-v3-7979bc788f-gt8fr 1/1 Running 0 75m
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl get pod -n kube-flannel -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel-ds-d96z9 1/1 Running 0 4d 192.168.17.18 k8s-node01 <none> <none>
kube-flannel-ds-gt6v2 1/1 Running 0 4d7h 192.168.17.17 k8s-master <none> <none>
kube-flannel-ds-rc8vq 1/1 Running 2 (3d21h ago) 4d 192.168.17.19 k8s-node02 <none> <none>
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl get pod
No resources found in default namespace.
[kubernetes@renxiaozhao01 ~]$ kubectl get pods
No resources found in default namespace.
[kubernetes@renxiaozhao01 ~]$
服务日志查看:
sudo journalctl -u kubelet
sudo journalctl -xeu kubelet
--follow
将会一次性显示所有已有的日志内容,并且不会持续更新。这可能会导致终端缓冲区溢出或无法完全显示所有的日志内容)。sudo journalctl -u kubelet --no-pager --follow
其他命令
[kubernetes@renxiaozhao01 ~]$ # 查看CoreDNS和kube-apiserver服务
[kubernetes@renxiaozhao01 ~]$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.17.17:6443
CoreDNS is running at https://192.168.17.17:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ # 查看集群组件状态
[kubernetes@renxiaozhao01 ~]$ kubectl get componentstatus
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy ok
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl version
Client Version: v1.28.1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.1
[kubernetes@renxiaozhao01 ~]$
主要整理了这几天用到的命令,其他命令等用到了,以后再补充吧
k8s.kuboard.cn/role=etcd
master
也要指定)[kubernetes@renxiaozhao01 ~]$ kubectl label nodes k8s-node01 k8s.kuboard.cn/role=etcd
node/k8s-node01 labeled
[kubernetes@renxiaozhao01 ~]$ kubectl label nodes k8s-node02 k8s.kuboard.cn/role=etcd
node/k8s-node02 labeled
[kubernetes@renxiaozhao01 ~]$
apply
:kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
kuboard
容器状态:kubectl get pods -n kuboard
kuboard
,然后再apply
[kubernetes@renxiaozhao01 ~]$
[kubernetes@renxiaozhao01 ~]$ kubectl delete -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
namespace "kuboard" deleted
configmap "kuboard-v3-config" deleted
serviceaccount "kuboard-boostrap" deleted
clusterrolebinding.rbac.authorization.k8s.io "kuboard-boostrap-crb" deleted
daemonset.apps "kuboard-etcd" deleted
deployment.apps "kuboard-v3" deleted
service "kuboard-v3" deleted
[kubernetes@renxiaozhao01 ~]$ ll /usr/share/kuboard
总用量 0
drwxr-xr-x 3 root root 20 9月 3 14:45 etcd
[kubernetes@renxiaozhao01 ~]$ sudo rm -rf /usr/share/kuboard
[kubernetes@renxiaozhao01 ~]$
agent
容器没有部署时,无法访问Kuboard
agent
容器是Kuboard的核心组件之一,负责收集和展示集群的状态和信息。当agent
容器没有部署时,Kuboard无法正常工作,因此无法通过http://your-node-ip-address:30080
访问。k8s.kuboard.cn/role=etcd
并部署了agent
容器后,Kuboard
开始正常工作agent
容器负责与Kubernetes集群交互,收集集群的状态和信息,并将其展示在Kuboard的Web界面上。agent
容器部署成功后,您可以通过http://your-node-ip-address:30080
访问Kuboard的登录界面。总之,agent
容器的部署与Kuboard的正常功能和访问有直接关系。只有在agent
容器成功部署并运行后,Kuboard才能提供可访问的Web界面。
agent
容器才会被部署?在kuboard-v3.yaml
文件中定义了agent
容器的部署策略,并且要求特定的标签k8s.kuboard.cn/role=etcd
存在于节点上。这意味着只有带有该标签的节点才会部署agent
容器(可以看到kuboard-v3-swr.yaml
中有类似nodeSelector
或tolerations
的字段,这些字段可以限制容器的部署条件)。
源文件内容:
---
apiVersion: v1
kind: Namespace
metadata:
name: kuboard
---
apiVersion: v1
kind: ConfigMap
metadata:
name: kuboard-v3-config
namespace: kuboard
data:
# 关于如下参数的解释,请参考文档 https://kuboard.cn/install/v3/install-built-in.html
# [common]
KUBOARD_SERVER_NODE_PORT: '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
KUBOARD_AGENT_IMAG: swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-agent
KUBOARD_QUESTDB_IMAGE: swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/questdb:6.0.4
KUBOARD_DISABLE_AUDIT: 'false' # 如果要禁用 Kuboard 审计功能,将此参数的值设置为 'true',必须带引号。
# 关于如下参数的解释,请参考文档 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: v1
kind: ServiceAccount
metadata:
name: kuboard-boostrap
namespace: kuboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-boostrap-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kuboard-boostrap
namespace: kuboard
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
k8s.kuboard.cn/name: kuboard-etcd
name: kuboard-etcd
namespace: kuboard
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.kuboard.cn/name: kuboard-etcd
template:
metadata:
labels:
k8s.kuboard.cn/name: kuboard-etcd
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
- matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
- matchExpressions:
- key: k8s.kuboard.cn/role
operator: In
values:
- etcd
containers:
- env:
- name: HOSTNAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: HOSTIP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
image: 'swr.cn-east-2.myhuaweicloud.com/kuboard/etcd-host:3.4.16-2'
imagePullPolicy: Always
name: etcd
ports:
- containerPort: 2381
hostPort: 2381
name: server
protocol: TCP
- containerPort: 2382
hostPort: 2382
name: peer
protocol: TCP
livenessProbe:
failureThreshold: 3
httpGet:
path: /health
port: 2381
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
volumeMounts:
- mountPath: /data
name: data
dnsPolicy: ClusterFirst
hostNetwork: true
restartPolicy: Always
serviceAccount: kuboard-boostrap
serviceAccountName: kuboard-boostrap
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
- key: node-role.kubernetes.io/control-plane
operator: Exists
volumes:
- hostPath:
path: /usr/share/kuboard/etcd
name: data
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations: {}
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.kuboard.cn/name: kuboard-v3
template:
metadata:
labels:
k8s.kuboard.cn/name: kuboard-v3
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
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: 'swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3'
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /kuboard-resources/version.json
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: kuboard
ports:
- containerPort: 80
name: web
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
- containerPort: 10081
name: peer
protocol: TCP
- containerPort: 10081
name: peer-u
protocol: UDP
readinessProbe:
failureThreshold: 3
httpGet:
path: /kuboard-resources/version.json
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
# startupProbe:
# failureThreshold: 20
# httpGet:
# path: /kuboard-resources/version.json
# port: 80
# scheme: HTTP
# initialDelaySeconds: 5
# periodSeconds: 10
# successThreshold: 1
# timeoutSeconds: 1
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccount: kuboard-boostrap
serviceAccountName: kuboard-boostrap
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels:
k8s.kuboard.cn/name: kuboard-v3
name: kuboard-v3
namespace: kuboard
spec:
ports:
- name: web
nodePort: 30080
port: 80
protocol: TCP
targetPort: 80
- name: tcp
nodePort: 30081
port: 10081
protocol: TCP
targetPort: 10081
- name: udp
nodePort: 30081
port: 10081
protocol: UDP
targetPort: 10081
selector:
k8s.kuboard.cn/name: kuboard-v3
sessionAffinity: None
type: NodePort