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: 31111
    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: ["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:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
    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. containers:
    168. - name: kubernetes-dashboard
    169. image: registry.cn-beijing.aliyuncs.com/qingfeng666/dashboard:v2.0.4
    170. imagePullPolicy: Always
    171. ports:
    172. - containerPort: 8443
    173. protocol: TCP
    174. args:
    175. - --auto-generate-certificates
    176. - --namespace=kubernetes-dashboard
    177. # Uncomment the following line to manually specify Kubernetes API server Host
    178. # If not specified, Dashboard will attempt to auto discover the API server and connect
    179. # to it. Uncomment only if the default does not work.
    180. # - --apiserver-host=http://my-address:port
    181. volumeMounts:
    182. - name: kubernetes-dashboard-certs
    183. mountPath: /certs
    184. # Create on-disk volume to store exec logs
    185. - mountPath: /tmp
    186. name: tmp-volume
    187. livenessProbe:
    188. httpGet:
    189. scheme: HTTPS
    190. path: /
    191. port: 8443
    192. initialDelaySeconds: 30
    193. timeoutSeconds: 30
    194. securityContext:
    195. allowPrivilegeEscalation: false
    196. readOnlyRootFilesystem: true
    197. runAsUser: 1001
    198. runAsGroup: 2001
    199. volumes:
    200. - name: kubernetes-dashboard-certs
    201. secret:
    202. secretName: kubernetes-dashboard-certs
    203. - name: tmp-volume
    204. emptyDir: {}
    205. serviceAccountName: kubernetes-dashboard
    206. nodeSelector:
    207. "kubernetes.io/os": linux
    208. # Comment the following tolerations if Dashboard must not be deployed on master
    209. tolerations:
    210. - key: node-role.kubernetes.io/master
    211. effect: NoSchedule
    212. ---
    213. kind: Service
    214. apiVersion: v1
    215. metadata:
    216. labels:
    217. k8s-app: dashboard-metrics-scraper
    218. name: dashboard-metrics-scraper
    219. namespace: kubernetes-dashboard
    220. spec:
    221. ports:
    222. - port: 8000
    223. targetPort: 8000
    224. selector:
    225. k8s-app: dashboard-metrics-scraper
    226. ---
    227. kind: Deployment
    228. apiVersion: apps/v1
    229. metadata:
    230. labels:
    231. k8s-app: dashboard-metrics-scraper
    232. name: dashboard-metrics-scraper
    233. namespace: kubernetes-dashboard
    234. spec:
    235. replicas: 1
    236. revisionHistoryLimit: 10
    237. selector:
    238. matchLabels:
    239. k8s-app: dashboard-metrics-scraper
    240. template:
    241. metadata:
    242. labels:
    243. k8s-app: dashboard-metrics-scraper
    244. annotations:
    245. seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
    246. spec:
    247. containers:
    248. - name: dashboard-metrics-scraper
    249. image: registry.cn-beijing.aliyuncs.com/qingfeng666/metrics-scraper:v1.0.4
    250. ports:
    251. - containerPort: 8000
    252. protocol: TCP
    253. livenessProbe:
    254. httpGet:
    255. scheme: HTTP
    256. path: /
    257. port: 8000
    258. initialDelaySeconds: 30
    259. timeoutSeconds: 30
    260. volumeMounts:
    261. - mountPath: /tmp
    262. name: tmp-volume
    263. securityContext:
    264. allowPrivilegeEscalation: false
    265. readOnlyRootFilesystem: true
    266. runAsUser: 1001
    267. runAsGroup: 2001
    268. serviceAccountName: kubernetes-dashboard
    269. nodeSelector:
    270. "kubernetes.io/os": linux
    271. # Comment the following tolerations if Dashboard must not be deployed on master
    272. tolerations:
    273. - key: node-role.kubernetes.io/master
    274. effect: NoSchedule
    275. volumes:
    276. - name: tmp-volume
    277. emptyDir: {}