1. 程式人生 > 實用技巧 >Kubernetes 部署 Kubernetes-Dashboard v2.0.0

Kubernetes 部署 Kubernetes-Dashboard v2.0.0

部署檔案 Github 地址:https://github.com/my-dlq/blog-example/tree/master/kubernetes/kubernetes-dashboard2.0.0-deploy

系統環境:

  • Kubernetes 版本:1.18.1
  • kubernetes-dashboard 版本:v2.0.0

一、簡介

Kubernetes Dashboard 是 Kubernetes 叢集的基於 Web 的通用 UI。它允許使用者管理在群集中執行的應用程式並對其進行故障排除,以及管理群集本身。這個專案在 Github 已經有半年多不更新了,最近推出了 v2.0.0 版本,這裡在 Kubernetes 中部署一下,嘗試看看新版本咋樣。

二、相容性

Kubernetes版本1.131.141.151.161.171.18
相容性 ?
  • ✕ 不支援的版本範圍。
  • ✓ 完全支援的版本範圍。
  • ? 由於Kubernetes API版本之間的重大更改,某些功能可能無法在儀表板中正常執行。

三、部署 Kubernetes Dashboard

注意:如果“kube-system”名稱空間已經存在 Kubernetes-Dashboard 相關資源,請換成別的 Namespace。

完整部署檔案 Github 地址:https://github.com/my-dlq/blog-example/tree/master/kubernetes/kubernetes-dashboard2.0.0-deploy

pull down相關的映象

  1. [root@master dashboard]# docker pull kubernetesui/dashboard:v2.0.0
  2. v2.0.0: Pulling from kubernetesui/dashboard
  3. 2a43ce254c7f: Pull complete
  4. Digest: sha256:06868692fb9a7f2ede1a06de1b7b32afabc40ec739c1181d83b5ed3eb147ec6e
  5. Status: Downloaded newer image for kubernetesui/dashboard:v2.0.0
  6. docker.io/kubernetesui/dashboard:v2.0.0
  7. [root@master kubelet-config]# docker pull kubernetesui/metrics-scraper:v1.0.4
  8. v1.0.4: Pulling from kubernetesui/metrics-scraper
  9. 07008dc53a3e: Pull complete
  10. 1f8ea7f93b39: Pull complete
  11. 04d0e0aeff30: Pull complete
  12. Digest: sha256:555981a24f184420f3be0c79d4efb6c948a85cfce84034f85a563f4151a81cbf
  13. Status: Downloaded newer image for kubernetesui/metrics-scraper:v1.0.4
  14. docker.io/kubernetesui/metrics-scraper:v1.0.4

1、Dashboard RBAC

建立 Dashboard RBAC 部署檔案

dashboard-rbac.yaml

  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4. labels:
  5. k8s-app: kubernetes-dashboard
  6. name: kubernetes-dashboard
  7. namespace: kube-system
  8. ---
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. kind: Role
  11. metadata:
  12. labels:
  13. k8s-app: kubernetes-dashboard
  14. name: kubernetes-dashboard
  15. namespace: kube-system
  16. rules:
  17. - apiGroups: [""]
  18. resources: ["secrets"]
  19. resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
  20. verbs: ["get", "update", "delete"]
  21. - apiGroups: [""]
  22. resources: ["configmaps"]
  23. resourceNames: ["kubernetes-dashboard-settings"]
  24. verbs: ["get", "update"]
  25. - apiGroups: [""]
  26. resources: ["services"]
  27. resourceNames: ["heapster", "dashboard-metrics-scraper"]
  28. verbs: ["proxy"]
  29. - apiGroups: [""]
  30. resources: ["services/proxy"]
  31. resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
  32. verbs: ["get"]
  33. ---
  34. apiVersion: rbac.authorization.k8s.io/v1
  35. kind: ClusterRole
  36. metadata:
  37. labels:
  38. k8s-app: kubernetes-dashboard
  39. name: kubernetes-dashboard
  40. rules:
  41. - apiGroups: ["metrics.k8s.io"]
  42. resources: ["pods", "nodes"]
  43. verbs: ["get", "list", "watch"]
  44. ---
  45. apiVersion: rbac.authorization.k8s.io/v1
  46. kind: RoleBinding
  47. metadata:
  48. labels:
  49. k8s-app: kubernetes-dashboard
  50. name: kubernetes-dashboard
  51. namespace: kube-system
  52. roleRef:
  53. apiGroup: rbac.authorization.k8s.io
  54. kind: Role
  55. name: kubernetes-dashboard
  56. subjects:
  57. - kind: ServiceAccount
  58. name: kubernetes-dashboard
  59. namespace: kube-system
  60. ---
  61. apiVersion: rbac.authorization.k8s.io/v1
  62. kind: ClusterRoleBinding
  63. metadata:
  64. name: kubernetes-dashboard
  65. namespace: kube-system
  66. roleRef:
  67. apiGroup: rbac.authorization.k8s.io
  68. kind: ClusterRole
  69. name: kubernetes-dashboard
  70. subjects:
  71. - kind: ServiceAccount
  72. name: kubernetes-dashboard
  73. namespace: kube-system

部署 Dashboard RBAC

$ kubectl apply -f dashboard-rbac.yaml

2、建立 ConfigMap、Secret

建立 Dashboard Config & Secret 部署檔案

dashboard-configmap-secret.yaml

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. labels:
  5. k8s-app: kubernetes-dashboard
  6. name: kubernetes-dashboard-certs
  7. namespace: kube-system
  8. type: Opaque
  9. ---
  10. apiVersion: v1
  11. kind: Secret
  12. metadata:
  13. labels:
  14. k8s-app: kubernetes-dashboard
  15. name: kubernetes-dashboard-csrf
  16. namespace: kube-system
  17. type: Opaque
  18. data:
  19. csrf: ""
  20. ---
  21. apiVersion: v1
  22. kind: Secret
  23. metadata:
  24. labels:
  25. k8s-app: kubernetes-dashboard
  26. name: kubernetes-dashboard-key-holder
  27. namespace: kube-system
  28. type: Opaque
  29. ---
  30. kind: ConfigMap
  31. apiVersion: v1
  32. metadata:
  33. labels:
  34. k8s-app: kubernetes-dashboard
  35. name: kubernetes-dashboard-settings
  36. namespace: kube-system

部署 Dashboard Config & Secret

$ kubectl apply -f dashboard-configmap-secret.yaml

3、kubernetes-dashboard

建立 Dashboard Deploy 部署檔案

dashboard-deploy.yaml

  1. ## Dashboard Service
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. labels:
  6. k8s-app: kubernetes-dashboard
  7. name: kubernetes-dashboard
  8. namespace: kube-system
  9. spec:
  10. type: NodePort
  11. ports:
  12. - port: 443
  13. nodePort: 30001
  14. targetPort: 8443
  15. selector:
  16. k8s-app: kubernetes-dashboard
  17. ---
  18. ## Dashboard Deployment
  19. kind: Deployment
  20. apiVersion: apps/v1
  21. metadata:
  22. labels:
  23. k8s-app: kubernetes-dashboard
  24. name: kubernetes-dashboard
  25. namespace: kube-system
  26. spec:
  27. replicas: 1
  28. revisionHistoryLimit: 10
  29. selector:
  30. matchLabels:
  31. k8s-app: kubernetes-dashboard
  32. template:
  33. metadata:
  34. labels:
  35. k8s-app: kubernetes-dashboard
  36. spec:
  37. serviceAccountName: kubernetes-dashboard
  38. containers:
  39. - name: kubernetes-dashboard
  40. image: kubernetesui/dashboard:v2.0.0
  41. securityContext:
  42. allowPrivilegeEscalation: false
  43. readOnlyRootFilesystem: true
  44. runAsUser: 1001
  45. runAsGroup: 2001
  46. ports:
  47. - containerPort: 8443
  48. protocol: TCP
  49. args:
  50. - --auto-generate-certificates
  51. - --namespace=kube-system #設定為當前部署的Namespace
  52. resources:
  53. limits:
  54. cpu: 1000m
  55. memory: 512Mi
  56. requests:
  57. cpu: 1000m
  58. memory: 512Mi
  59. livenessProbe:
  60. httpGet:
  61. scheme: HTTPS
  62. path: /
  63. port: 8443
  64. initialDelaySeconds: 30
  65. timeoutSeconds: 30
  66. volumeMounts:
  67. - name: kubernetes-dashboard-certs
  68. mountPath: /certs
  69. - name: tmp-volume
  70. mountPath: /tmp
  71. - name: localtime
  72. readOnly: true
  73. mountPath: /etc/localtime
  74. volumes:
  75. - name: kubernetes-dashboard-certs
  76. secret:
  77. secretName: kubernetes-dashboard-certs
  78. - name: tmp-volume
  79. emptyDir: {}
  80. - name: localtime
  81. hostPath:
  82. type: File
  83. path: /etc/localtime
  84. tolerations:
  85. - key: node-role.kubernetes.io/master
  86. effect: NoSchedule

部署 Dashboard Deploy

$ kubectl apply -f dashboard-deploy.yaml

4、建立 kubernetes-metrics-scraper

建立 Dashboard Metrics 部署檔案

dashboard-metrics.yaml

  1. ## Dashboard Metrics Service
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. labels:
  6. k8s-app: dashboard-metrics-scraper
  7. name: dashboard-metrics-scraper
  8. namespace: kube-system
  9. spec:
  10. ports:
  11. - port: 8000
  12. targetPort: 8000
  13. selector:
  14. k8s-app: dashboard-metrics-scraper
  15. ---
  16. ## Dashboard Metrics Deployment
  17. kind: Deployment
  18. apiVersion: apps/v1
  19. metadata:
  20. labels:
  21. k8s-app: dashboard-metrics-scraper
  22. name: dashboard-metrics-scraper
  23. namespace: kube-system
  24. spec:
  25. replicas: 1
  26. revisionHistoryLimit: 10
  27. selector:
  28. matchLabels:
  29. k8s-app: dashboard-metrics-scraper
  30. template:
  31. metadata:
  32. labels:
  33. k8s-app: dashboard-metrics-scraper
  34. annotations:
  35. seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
  36. spec:
  37. serviceAccountName: kubernetes-dashboard
  38. containers:
  39. - name: dashboard-metrics-scraper
  40. image: kubernetesui/metrics-scraper:v1.0.4
  41. securityContext:
  42. allowPrivilegeEscalation: false
  43. readOnlyRootFilesystem: true
  44. runAsUser: 1001
  45. runAsGroup: 2001
  46. ports:
  47. - containerPort: 8000
  48. protocol: TCP
  49. resources:
  50. limits:
  51. cpu: 1000m
  52. memory: 512Mi
  53. requests:
  54. cpu: 1000m
  55. memory: 512Mi
  56. livenessProbe:
  57. httpGet:
  58. scheme: HTTP
  59. path: /
  60. port: 8000
  61. initialDelaySeconds: 30
  62. timeoutSeconds: 30
  63. volumeMounts:
  64. - mountPath: /tmp
  65. name: tmp-volume
  66. - name: localtime
  67. readOnly: true
  68. mountPath: /etc/localtime
  69. volumes:
  70. - name: tmp-volume
  71. emptyDir: {}
  72. - name: localtime
  73. hostPath:
  74. type: File
  75. path: /etc/localtime
  76. nodeSelector:
  77. "beta.kubernetes.io/os": linux
  78. tolerations:
  79. - key: node-role.kubernetes.io/master
  80. effect: NoSchedule

部署 Dashboard Metrics

$ kubectl apply -f dashboard-metrics.yaml

5、建立訪問的 ServiceAccount

建立一個繫結 admin 許可權的 ServiceAccount,獲取其 Token 用於訪問看板。

建立 Dashboard ServiceAccount 部署檔案

dashboard-token.yaml

  1. kind: ClusterRoleBinding
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. metadata:
  4. name: admin
annotations:
  1. rbac.authorization.kubernetes.io/autoupdate: "true"
  2. roleRef:
  3. kind: ClusterRole
  4. name: cluster-admin
  5. apiGroup: rbac.authorization.k8s.io
  6. subjects:
  7. - kind: ServiceAccount
  8. name: admin
  9. namespace: kube-system
  10. ---
  11. apiVersion: v1
kind: ServiceAccount metadata:
  1. name: admin
  2. namespace: kube-system
  3. labels:
  4. kubernetes.io/cluster-service: "true"
  5. addonmanager.kubernetes.io/mode: Reconcile

部署訪問的 ServiceAccount

$ kubectl apply -f dashboard-token.yaml

獲取 Token

$ kubectl describe secret/$(kubectl get secret -n kube-system |grep admin|awk '{print $1}') -n kube-system

token:

eyJhbGciOiJSUzI1NiIsImtpZCI6Ikp2bV9pZmNIR0xqLUxRREd3QlRzNU1pdnBkYnMxTXRlWG15alBidW0xNTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi1zandkdiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjUxOTAxNmFkLTU3YjEtNDkzYS04ZGZiLTM2Mzg3NTIwODgwNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.I4voTZHn83jPe7apabqOtTjsBuj0uEbkgQGu1fl2tAbbpocg89NjN-DrTkyrETa7qDVp2bmXCHbIbiJU64xlfifCgNFgO0HnWqvuMgztYnYMUpbYSRuQVumn-WCDsIxBnfK-lIbhdSGZZVS66PK4Rwlf4hQHdE_3oclzBYnoz_i11xoFaDDUhhSLxmIDuBA-HoR-n_LJRDtJEqD7VmCTiDkUECxVpIM2oQtVb-nLxuBQg7M7rsbdWFsp5MJ7f-AdRBFgszEQaezBCt4kf0Uuakl6AC_0fDGjwEo04M12Md5Q7JOkyUNKgPbw0S3p8rxuw07I_LBipTIW8Sznll_wzw

四、登入新版本 Dashboard 檢視

本人的 Kubernetes 叢集地址為”192.168.0.155”並且在 Service 中設定了 NodePort 埠為 30001 和型別為 NodePort 方式訪問 Dashboard ,所以訪問地址:https://192.168.0.155:30001進入 Kubernetes Dashboard 頁面,然後輸入上一步中建立的 ServiceAccount 的 Token 進入 Dashboard,可以看到新的 Dashboard

跟上一個版本比較,整體風格更加簡潔,並且,可以感受到的是這個頁面比以前訪問速度更加快速(估計是加了快取),除了之外還增加了:

  • 新增黑色主題
  • 新增對CRD的管理
  • 新增對叢集角色的編輯
  • 新增對 kubernetes 物件以 yaml 格式進行編輯
  • 修改叢集資源指標的監控監控資訊以及看板樣式

檢視設定

檢視個節點的資源情況

檢視node2的資源情況

五、部署 Metrics Server 為 Dashboard 提供指標資料

Dashboard 已經部署完成,不過登入 Dashboard 後可以看到:

這些欄資料顯示都是空,這是由於 Dashboard 的指標部署需要從 Metrics Server 中獲取,Dashboard 該版本另一個元件 kubernetes-metrics-scraper 就是用於從 Metrics Server 獲取指標的介面卡。之前我們已經部署 kubernetes-metrics-scraper 元件,接下來只要再部署 Metrics Server 元件就能獲取系統指標資料,供 Dashboard 繪製圖形,部署 Metrics Server 可以參考:

https://blog.csdn.net/baidu_38432732/article/details/105742271

當按照上面部署完成後,等一段時間,再重新整理 Dashboard 介面,可以觀察到如下介面: