[kubernetes]安装dashboard

打印 上一主题 下一主题

主题 497|帖子 497|积分 1491

前言

kubernetes官方文档中的web UI网页管理工具是kubernetes-dashboard,可提供部署应用、资源对象管理、容器日志查询、系统监控等常用的集群管理功能。为了在页面上显示系统资源的使用情况,需要部署 Metrics Server(参考博客园 - 安装metrics-server)。

  • kubernetes版本:1.26.6
创建资源对象

官方yaml。github仓库地址:https://github.com/kubernetes/dashboard。这里的版本为 v2.7.0
用到的镜像分别为kubernetesui/dashboard:v2.7.0 和 kubernetesui/metrics-scraper:v1.0.8 。可以从docker hub直接下载,内网离线环境可以先传到内网的镜像仓库,然后镜像改成内网镜像地址。
  1. # Copyright 2017 The Kubernetes Authors.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. #     http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. apiVersion: v1
  15. kind: Namespace
  16. metadata:
  17.   name: kubernetes-dashboard
  18. ---
  19. apiVersion: v1
  20. kind: ServiceAccount
  21. metadata:
  22.   labels:
  23.     k8s-app: kubernetes-dashboard
  24.   name: kubernetes-dashboard
  25.   namespace: kubernetes-dashboard
  26. ---
  27. kind: Service
  28. apiVersion: v1
  29. metadata:
  30.   labels:
  31.     k8s-app: kubernetes-dashboard
  32.   name: kubernetes-dashboard
  33.   namespace: kubernetes-dashboard
  34. spec:
  35.   # type: NodePort
  36.   ports:
  37.     - port: 443
  38.       targetPort: 8443
  39.       # nodeport: 30001
  40.   selector:
  41.     k8s-app: kubernetes-dashboard
  42. ---
  43. apiVersion: v1
  44. kind: Secret
  45. metadata:
  46.   labels:
  47.     k8s-app: kubernetes-dashboard
  48.   name: kubernetes-dashboard-certs
  49.   namespace: kubernetes-dashboard
  50. type: Opaque
  51. ---
  52. apiVersion: v1
  53. kind: Secret
  54. metadata:
  55.   labels:
  56.     k8s-app: kubernetes-dashboard
  57.   name: kubernetes-dashboard-csrf
  58.   namespace: kubernetes-dashboard
  59. type: Opaque
  60. data:
  61.   csrf: ""
  62. ---
  63. apiVersion: v1
  64. kind: Secret
  65. metadata:
  66.   labels:
  67.     k8s-app: kubernetes-dashboard
  68.   name: kubernetes-dashboard-key-holder
  69.   namespace: kubernetes-dashboard
  70. type: Opaque
  71. ---
  72. kind: ConfigMap
  73. apiVersion: v1
  74. metadata:
  75.   labels:
  76.     k8s-app: kubernetes-dashboard
  77.   name: kubernetes-dashboard-settings
  78.   namespace: kubernetes-dashboard
  79. ---
  80. kind: Role
  81. apiVersion: rbac.authorization.k8s.io/v1
  82. metadata:
  83.   labels:
  84.     k8s-app: kubernetes-dashboard
  85.   name: kubernetes-dashboard
  86.   namespace: kubernetes-dashboard
  87. rules:
  88.   # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
  89.   - apiGroups: [""]
  90.     resources: ["secrets"]
  91.     resourceNames:
  92.       [
  93.         "kubernetes-dashboard-key-holder",
  94.         "kubernetes-dashboard-certs",
  95.         "kubernetes-dashboard-csrf",
  96.       ]
  97.     verbs: ["get", "update", "delete"]
  98.     # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
  99.   - apiGroups: [""]
  100.     resources: ["configmaps"]
  101.     resourceNames: ["kubernetes-dashboard-settings"]
  102.     verbs: ["get", "update"]
  103.     # Allow Dashboard to get metrics.
  104.   - apiGroups: [""]
  105.     resources: ["services"]
  106.     resourceNames: ["heapster", "dashboard-metrics-scraper"]
  107.     verbs: ["proxy"]
  108.   - apiGroups: [""]
  109.     resources: ["services/proxy"]
  110.     resourceNames:
  111.       [
  112.         "heapster",
  113.         "http:heapster:",
  114.         "https:heapster:",
  115.         "dashboard-metrics-scraper",
  116.         "http:dashboard-metrics-scraper",
  117.       ]
  118.     verbs: ["get"]
  119. ---
  120. kind: ClusterRole
  121. apiVersion: rbac.authorization.k8s.io/v1
  122. metadata:
  123.   labels:
  124.     k8s-app: kubernetes-dashboard
  125.   name: kubernetes-dashboard
  126. rules:
  127.   # Allow Metrics Scraper to get metrics from the Metrics server
  128.   - apiGroups: ["metrics.k8s.io"]
  129.     resources: ["pods", "nodes"]
  130.     verbs: ["get", "list", "watch"]
  131. ---
  132. apiVersion: rbac.authorization.k8s.io/v1
  133. kind: RoleBinding
  134. metadata:
  135.   labels:
  136.     k8s-app: kubernetes-dashboard
  137.   name: kubernetes-dashboard
  138.   namespace: kubernetes-dashboard
  139. roleRef:
  140.   apiGroup: rbac.authorization.k8s.io
  141.   kind: Role
  142.   name: kubernetes-dashboard
  143. subjects:
  144.   - kind: ServiceAccount
  145.     name: kubernetes-dashboard
  146.     namespace: kubernetes-dashboard
  147. ---
  148. apiVersion: rbac.authorization.k8s.io/v1
  149. kind: ClusterRoleBinding
  150. metadata:
  151.   name: kubernetes-dashboard
  152. roleRef:
  153.   apiGroup: rbac.authorization.k8s.io
  154.   kind: ClusterRole
  155.   name: kubernetes-dashboard
  156. subjects:
  157.   - kind: ServiceAccount
  158.     name: kubernetes-dashboard
  159.     namespace: kubernetes-dashboard
  160. ---
  161. kind: Deployment
  162. apiVersion: apps/v1
  163. metadata:
  164.   labels:
  165.     k8s-app: kubernetes-dashboard
  166.   name: kubernetes-dashboard
  167.   namespace: kubernetes-dashboard
  168. spec:
  169.   replicas: 1
  170.   revisionHistoryLimit: 10
  171.   selector:
  172.     matchLabels:
  173.       k8s-app: kubernetes-dashboard
  174.   template:
  175.     metadata:
  176.       labels:
  177.         k8s-app: kubernetes-dashboard
  178.     spec:
  179.       securityContext:
  180.         seccompProfile:
  181.           type: RuntimeDefault
  182.       containers:
  183.         - name: kubernetes-dashboard
  184.           image: registry.elifen.cn/kubernetesui/dashboard:v2.7.0
  185.           imagePullPolicy: Always
  186.           ports:
  187.             - containerPort: 8443
  188.               protocol: TCP
  189.           args:
  190.             - --auto-generate-certificates
  191.             - --namespace=kubernetes-dashboard
  192.             # Uncomment the following line to manually specify Kubernetes API server Host
  193.             # If not specified, Dashboard will attempt to auto discover the API server and connect
  194.             # to it. Uncomment only if the default does not work.
  195.             # - --apiserver-host=http://my-address:port
  196.           volumeMounts:
  197.             - name: kubernetes-dashboard-certs
  198.               mountPath: /certs
  199.               # Create on-disk volume to store exec logs
  200.             - mountPath: /tmp
  201.               name: tmp-volume
  202.           livenessProbe:
  203.             httpGet:
  204.               scheme: HTTPS
  205.               path: /
  206.               port: 8443
  207.             initialDelaySeconds: 30
  208.             timeoutSeconds: 30
  209.           securityContext:
  210.             allowPrivilegeEscalation: false
  211.             readOnlyRootFilesystem: true
  212.             runAsUser: 1001
  213.             runAsGroup: 2001
  214.       volumes:
  215.         - name: kubernetes-dashboard-certs
  216.           secret:
  217.             secretName: kubernetes-dashboard-certs
  218.         - name: tmp-volume
  219.           emptyDir: {}
  220.       serviceAccountName: kubernetes-dashboard
  221.       nodeSelector:
  222.         "kubernetes.io/os": linux
  223.       # Comment the following tolerations if Dashboard must not be deployed on master
  224.       tolerations:
  225.         - key: node-role.kubernetes.io/master
  226.           effect: NoSchedule
  227. ---
  228. kind: Service
  229. apiVersion: v1
  230. metadata:
  231.   labels:
  232.     k8s-app: dashboard-metrics-scraper
  233.   name: dashboard-metrics-scraper
  234.   namespace: kubernetes-dashboard
  235. spec:
  236.   ports:
  237.     - port: 8000
  238.       targetPort: 8000
  239.   selector:
  240.     k8s-app: dashboard-metrics-scraper
  241. ---
  242. kind: Deployment
  243. apiVersion: apps/v1
  244. metadata:
  245.   labels:
  246.     k8s-app: dashboard-metrics-scraper
  247.   name: dashboard-metrics-scraper
  248.   namespace: kubernetes-dashboard
  249. spec:
  250.   replicas: 1
  251.   revisionHistoryLimit: 10
  252.   selector:
  253.     matchLabels:
  254.       k8s-app: dashboard-metrics-scraper
  255.   template:
  256.     metadata:
  257.       labels:
  258.         k8s-app: dashboard-metrics-scraper
  259.     spec:
  260.       securityContext:
  261.         seccompProfile:
  262.           type: RuntimeDefault
  263.       containers:
  264.         - name: dashboard-metrics-scraper
  265.           image: registry.elifen.cn/kubernetesui/metrics-scraper:v1.0.8
  266.           ports:
  267.             - containerPort: 8000
  268.               protocol: TCP
  269.           livenessProbe:
  270.             httpGet:
  271.               scheme: HTTP
  272.               path: /
  273.               port: 8000
  274.             initialDelaySeconds: 30
  275.             timeoutSeconds: 30
  276.           volumeMounts:
  277.             - mountPath: /tmp
  278.               name: tmp-volume
  279.           securityContext:
  280.             allowPrivilegeEscalation: false
  281.             readOnlyRootFilesystem: true
  282.             runAsUser: 1001
  283.             runAsGroup: 2001
  284.       serviceAccountName: kubernetes-dashboard
  285.       nodeSelector:
  286.         "kubernetes.io/os": linux
  287.       # Comment the following tolerations if Dashboard must not be deployed on master
  288.       tolerations:
  289.         - key: node-role.kubernetes.io/master
  290.           effect: NoSchedule
  291.       volumes:
  292.         - name: tmp-volume
  293.           emptyDir: {}
复制代码
发布到集群:
  1. kubectl create -f kube-dashboard.yaml
复制代码
使用nodePort访问dashboard

k8s官方文档给的示例是用kube-proxy,这里用的nodePort,稍微改动下原yaml中的kubernetes-dashboard服务,加了nodePort的配置。
  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4.   labels:
  5.     k8s-app: kubernetes-dashboard
  6.   name: kubernetes-dashboard
  7.   namespace: kubernetes-dashboard
  8. spec:
  9.   type: NodePort
  10.   ports:
  11.     - port: 443
  12.       targetPort: 8443
  13.       nodeport: 30001
  14.   selector:
  15.     k8s-app: kubernetes-dashboard
复制代码
应用:
  1. kubectl apply -f kube-dashboard.yaml
复制代码
若运行正常,浏览器访问 https://:30001,理应显示dashboard的界面,接下来生成用于登录的token。

使用token访问


  • 创建一个serviceaccount
  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4.   name: admin-user
  5.   namespace: kubernetes-dashboard
复制代码
或者使用命令
  1. kubectl create serviceaccount admin-user -n kubernetes-dashboard
复制代码

  • 授予cluster-admin的集群管理员权限
  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRoleBinding
  3. metadata:
  4.   name: admin-user
  5. roleRef:
  6.   apiGroup: rbac.authorization.k8s.io
  7.   kind: ClusterRole
  8.   name: cluster-admin
  9. subjects:
  10. - kind: ServiceAccount
  11.   name: admin-user
  12.   namespace: kubernetes-dashboard
复制代码
使用命令
  1. kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
复制代码

  • 获取token
  1. kubectl -n kubernetes-dashboard create token admin-user
复制代码

  • 页面填入token登录。

参考


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表