Dashboard是什么
Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment、Job、DaemonSet 等等)。
例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息。
部署 Dashboard
1.下载recommended.yaml文件
[root@k8smaster dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
--2023-04-10 18:40:14-- https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:7621 (7.4K) [text/plain]
正在保存至: “recommended.yaml”
100%[====================================================>] 7,621 9.25KB/s 用时 0.8s
2023-04-10 18:40:16 (9.25 KB/s) - 已保存 “recommended.yaml” [7621/7621])
[root@k8smaster dashboard]# ls
recommended.yaml
2.创建
[root@k8smaster dashboard]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
3.查看
[root@k8smaster dashboard]# kubectl get ns
NAME STATUS AGE
default Active 18d
kube-node-lease Active 18d
kube-public Active 18d
kube-system Active 18d
kubernetes-dashboard Active 117s
# kubernetes-dashboard 是dashboard自己的命名空间
[root@k8smaster dashboard]# kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5b8896d7fc-bs4pt 1/1 Running 0 2m59s
kubernetes-dashboard-cb988587b-67jxm 1/1 Running 0 2m59s
4.查看dashboard对应的服务
因为发布服务的类型是ClusterIP ,外面的机器不能访问,不便于我们通过浏览器访问,因此需要改成NodePort。
[root@k8smaster dashboard]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.96.129.7 <none> 8000/TCP 3m25s
kubernetes-dashboard ClusterIP 10.102.176.114 <none> 443/TCP 3m26s
5.删除已经创建的dashboard 服务
[root@k8smaster dashboard]# kubectl delete svc kubernetes-dashboard -n kubernetes-dashboard
service "kubernetes-dashboard" deleted
[root@k8smaster dashboard]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.96.129.7 <none> 8000/TCP 4m38s
6.创建nodeport的service
[root@k8smaster dashboard]# vim dashboard-svc.yaml
[root@k8smaster dashboard]# cat dashboard-svc.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
[root@k8smaster dashboard]# kubectl apply -f dashboard-svc.yaml
service/kubernetes-dashboard created
[root@k8smaster dashboard]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.102.190.252 <none> 8000/TCP 11m
kubernetes-dashboard NodePort 10.103.158.222 <none> 443:32369/TCP 9m54s
7.访问dashboard服务
要有访问权限,创建kubernetes-dashboard管理员角色。
[root@k8smaster dashboard]# vim dashboard-svc-account.yaml
[root@k8smaster dashboard]# cat dashboard-svc-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
[root@k8smaster dashboard]# kubectl apply -f dashboard-svc-account.yaml
serviceaccount/dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
8.获取dashboard的secret对象的名字
[root@k8smaster dashboard]# kubectl get secret -n kube-system|grep admin|awk '{print $1}'
dashboard-admin-token-45bz6
[root@k8smaster dashboard]# kubectl describe secret dashboard-admin-token-45bz6 -n kube-system
Name: dashboard-admin-token-45bz6
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: dff25ada-2f6b-4e5b-9244-fbff1148eeae
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Img3cmkxLWxvWTVPUDIxNVhVYkFqdTBSRzY2RjJtS0pWbnRVN1BuUDdheUEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNDViejYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZGZmMjVhZGEtMmY2Yi00ZTViLTkyNDQtZmJmZjExNDhlZWFlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.HolgAuximoLBNfm6gDlWzNxOAV4AetYqMsC374GXGWYEw4W7_p29tiZOrw6wr9T5jwAI3DCx7IjFD9lehScEQuKJ35iNY-NaAYvrj2ABMsXSZ9SN0RWcDALv1XfUqWsAhqE2e6uX11r8Z_LnW1p26goQ-vOJvNUJ84hVOzEOPJQ_VqgIPZsYSlR9jHrAv0t1Wqct3WQhsnVWiP_-mFO8ZHvGVUu6bYASkYbO1doz8UCES7Dq8IQOv1ZgBn_34XvpvnxlpoTGVs8-C3_Q7wU1j24df3OY6bA_d31QRZB25PS11sbUsYEP2QZCo7KfaBtaK3V5F2eqtRQlvCG0XWWocg
9.获得secret里的token的内容
token理解为认证的密码
[root@k8smaster dashboard]# kubectl describe secret dashboard-admin-token-45bz6 -n kube-system|awk '/^token/ {print $2}'
eyJhbGciOiJSUzI1NiIsImtpZCI6Img3cmkxLWxvWTVPUDIxNVhVYkFqdTBSRzY2RjJtS0pWbnRVN1BuUDdheUEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNDViejYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZGZmMjVhZGEtMmY2Yi00ZTViLTkyNDQtZmJmZjExNDhlZWFlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.HolgAuximoLBNfm6gDlWzNxOAV4AetYqMsC374GXGWYEw4W7_p29tiZOrw6wr9T5jwAI3DCx7IjFD9lehScEQuKJ35iNY-NaAYvrj2ABMsXSZ9SN0RWcDALv1XfUqWsAhqE2e6uX11r8Z_LnW1p26goQ-vOJvNUJ84hVOzEOPJQ_VqgIPZsYSlR9jHrAv0t1Wqct3WQhsnVWiP_-mFO8ZHvGVUu6bYASkYbO1doz8UCES7Dq8IQOv1ZgBn_34XvpvnxlpoTGVs8-C3_Q7wU1j24df3OY6bA_d31QRZB25PS11sbUsYEP2QZCo7KfaBtaK3V5F2eqtRQlvCG0XWWocg
10.浏览器里访问
[root@k8smaster dashboard]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.102.190.252 <none> 8000/TCP 11m
kubernetes-dashboard NodePort 10.103.158.222 <none> 443:32369/TCP 9m54s
访问宿主机的ip+端口
https://192.168.102.138:32369/#/login
11.登录
输入上面获得的token