k8s-dashboard.yaml 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  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. apiVersion: v1
  28. kind: Service
  29. metadata:
  30. labels:
  31. k8s-app: kubernetes-dashboard
  32. name: kubernetes-dashboard
  33. namespace: kubernetes-dashboard
  34. spec:
  35. ports:
  36. - port: 443
  37. targetPort: 8443
  38. nodePort: 30443 # 添加NodePort以便从外部访问
  39. selector:
  40. k8s-app: kubernetes-dashboard
  41. type: NodePort # 改为NodePort类型以便外部访问
  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: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
  92. verbs: ["get", "update", "delete"]
  93. # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
  94. - apiGroups: [""]
  95. resources: ["configmaps"]
  96. resourceNames: ["kubernetes-dashboard-settings"]
  97. verbs: ["get", "update"]
  98. # Allow Dashboard to get metrics.
  99. - apiGroups: [""]
  100. resources: ["services"]
  101. resourceNames: ["heapster", "dashboard-metrics-scraper"]
  102. verbs: ["proxy"]
  103. - apiGroups: [""]
  104. resources: ["services/proxy"]
  105. resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
  106. verbs: ["get"]
  107. ---
  108. kind: ClusterRole
  109. apiVersion: rbac.authorization.k8s.io/v1
  110. metadata:
  111. labels:
  112. k8s-app: kubernetes-dashboard
  113. name: kubernetes-dashboard
  114. rules:
  115. # Allow Metrics Scraper to get metrics from the Metrics server
  116. - apiGroups: ["metrics.k8s.io"]
  117. resources: ["pods", "nodes"]
  118. verbs: ["get", "list", "watch"]
  119. ---
  120. apiVersion: rbac.authorization.k8s.io/v1
  121. kind: RoleBinding
  122. metadata:
  123. labels:
  124. k8s-app: kubernetes-dashboard
  125. name: kubernetes-dashboard
  126. namespace: kubernetes-dashboard
  127. roleRef:
  128. apiGroup: rbac.authorization.k8s.io
  129. kind: Role
  130. name: kubernetes-dashboard
  131. subjects:
  132. - kind: ServiceAccount
  133. name: kubernetes-dashboard
  134. namespace: kubernetes-dashboard
  135. ---
  136. apiVersion: rbac.authorization.k8s.io/v1
  137. kind: ClusterRoleBinding
  138. metadata:
  139. name: kubernetes-dashboard
  140. roleRef:
  141. apiGroup: rbac.authorization.k8s.io
  142. kind: ClusterRole
  143. name: kubernetes-dashboard
  144. subjects:
  145. - kind: ServiceAccount
  146. name: kubernetes-dashboard
  147. namespace: kubernetes-dashboard
  148. ---
  149. kind: Deployment
  150. apiVersion: apps/v1
  151. metadata:
  152. labels:
  153. k8s-app: kubernetes-dashboard
  154. name: kubernetes-dashboard
  155. namespace: kubernetes-dashboard
  156. spec:
  157. replicas: 1
  158. revisionHistoryLimit: 10
  159. selector:
  160. matchLabels:
  161. k8s-app: kubernetes-dashboard
  162. template:
  163. metadata:
  164. labels:
  165. k8s-app: kubernetes-dashboard
  166. spec:
  167. securityContext:
  168. seccompProfile:
  169. type: RuntimeDefault
  170. containers:
  171. - name: kubernetes-dashboard
  172. image: registry.cn-hangzhou.aliyuncs.com/zhongpengqun/wanderer:amd64-linux-kubernetesui-dashboard-v2.7.0
  173. imagePullPolicy: Always
  174. ports:
  175. - containerPort: 8443
  176. protocol: TCP
  177. args:
  178. - --auto-generate-certificates
  179. - --namespace=kubernetes-dashboard
  180. # 允许从外部访问(仅用于测试目的,生产环境应谨慎使用)
  181. - --enable-skip-login
  182. - --enable-insecure-login
  183. volumeMounts:
  184. - name: kubernetes-dashboard-certs
  185. mountPath: /certs
  186. # Create on-disk volume to store exec logs
  187. - mountPath: /tmp
  188. name: tmp-volume
  189. livenessProbe:
  190. httpGet:
  191. scheme: HTTPS
  192. path: /
  193. port: 8443
  194. initialDelaySeconds: 30
  195. timeoutSeconds: 30
  196. periodSeconds: 10
  197. failureThreshold: 3
  198. securityContext:
  199. allowPrivilegeEscalation: false
  200. readOnlyRootFilesystem: false
  201. runAsUser: 1001
  202. runAsGroup: 2001
  203. volumes:
  204. - name: kubernetes-dashboard-certs
  205. secret:
  206. secretName: kubernetes-dashboard-certs
  207. - name: tmp-volume
  208. emptyDir: {}
  209. serviceAccountName: kubernetes-dashboard
  210. nodeSelector:
  211. "kubernetes.io/os": linux
  212. # Comment the following tolerations if Dashboard must not be deployed on master
  213. tolerations:
  214. - key: node-role.kubernetes.io/master
  215. effect: NoSchedule
  216. - key: node-role.kubernetes.io/control-plane
  217. effect: NoSchedule
  218. ---
  219. apiVersion: v1
  220. kind: Service
  221. metadata:
  222. labels:
  223. k8s-app: dashboard-metrics-scraper
  224. name: dashboard-metrics-scraper
  225. namespace: kubernetes-dashboard
  226. spec:
  227. ports:
  228. - port: 8000
  229. targetPort: 8000
  230. selector:
  231. k8s-app: dashboard-metrics-scraper
  232. ---
  233. apiVersion: apps/v1
  234. kind: Deployment
  235. metadata:
  236. labels:
  237. k8s-app: dashboard-metrics-scraper
  238. name: dashboard-metrics-scraper
  239. namespace: kubernetes-dashboard
  240. spec:
  241. replicas: 1
  242. revisionHistoryLimit: 10
  243. selector:
  244. matchLabels:
  245. k8s-app: dashboard-metrics-scraper
  246. template:
  247. metadata:
  248. labels:
  249. k8s-app: dashboard-metrics-scraper
  250. spec:
  251. securityContext:
  252. seccompProfile:
  253. type: RuntimeDefault
  254. containers:
  255. - name: dashboard-metrics-scraper
  256. image: registry.cn-hangzhou.aliyuncs.com/zhongpengqun/wanderer:amd64-linux-kubernetesui--metrics-scraper-v1.0.8
  257. ports:
  258. - containerPort: 8000
  259. protocol: TCP
  260. livenessProbe:
  261. httpGet:
  262. scheme: HTTP
  263. path: /
  264. port: 8000
  265. initialDelaySeconds: 30
  266. timeoutSeconds: 30
  267. periodSeconds: 10
  268. failureThreshold: 3
  269. volumeMounts:
  270. - mountPath: /tmp
  271. name: tmp-volume
  272. securityContext:
  273. allowPrivilegeEscalation: false
  274. readOnlyRootFilesystem: false
  275. runAsUser: 1001
  276. runAsGroup: 2001
  277. volumes:
  278. - name: tmp-volume
  279. emptyDir: {}
  280. serviceAccountName: kubernetes-dashboard
  281. nodeSelector:
  282. "kubernetes.io/os": linux
  283. # Comment the following tolerations if Dashboard must not be deployed on master
  284. tolerations:
  285. - key: node-role.kubernetes.io/master
  286. effect: NoSchedule
  287. - key: node-role.kubernetes.io/control-plane
  288. effect: NoSchedule