You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

323 lines
8.7 KiB

  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. # Configuration to deploy release version of the Dashboard UI compatible with
  15. # Kubernetes 1.8.
  16. #
  17. # Example usage: kubectl create -f <this_file>
  18. {% if dashboard_namespace != "kube-system" %}
  19. ---
  20. apiVersion: v1
  21. kind: Namespace
  22. metadata:
  23. name: {{ dashboard_namespace }}
  24. labels:
  25. name: {{ dashboard_namespace }}
  26. {% endif %}
  27. ---
  28. # ------------------- Dashboard Secrets ------------------- #
  29. apiVersion: v1
  30. kind: Secret
  31. metadata:
  32. labels:
  33. k8s-app: kubernetes-dashboard
  34. name: kubernetes-dashboard-certs
  35. namespace: {{ dashboard_namespace }}
  36. type: Opaque
  37. ---
  38. apiVersion: v1
  39. kind: Secret
  40. metadata:
  41. labels:
  42. k8s-app: kubernetes-dashboard
  43. name: kubernetes-dashboard-csrf
  44. namespace: {{ dashboard_namespace }}
  45. type: Opaque
  46. data:
  47. csrf: ""
  48. ---
  49. apiVersion: v1
  50. kind: Secret
  51. metadata:
  52. labels:
  53. k8s-app: kubernetes-dashboard
  54. name: kubernetes-dashboard-key-holder
  55. namespace: {{ dashboard_namespace }}
  56. type: Opaque
  57. ---
  58. # ------------------- Dashboard ConfigMap ------------------- #
  59. kind: ConfigMap
  60. apiVersion: v1
  61. metadata:
  62. labels:
  63. k8s-app: kubernetes-dashboard
  64. name: kubernetes-dashboard-settings
  65. namespace: {{ dashboard_namespace }}
  66. ---
  67. # ------------------- Dashboard Service Account ------------------- #
  68. apiVersion: v1
  69. kind: ServiceAccount
  70. metadata:
  71. labels:
  72. k8s-app: kubernetes-dashboard
  73. name: kubernetes-dashboard
  74. namespace: {{ dashboard_namespace }}
  75. ---
  76. # ------------------- Dashboard Role & Role Binding ------------------- #
  77. kind: Role
  78. apiVersion: rbac.authorization.k8s.io/v1
  79. metadata:
  80. labels:
  81. k8s-app: kubernetes-dashboard
  82. name: kubernetes-dashboard
  83. namespace: {{ dashboard_namespace }}
  84. rules:
  85. # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
  86. - apiGroups: [""]
  87. resources: ["secrets"]
  88. resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
  89. verbs: ["get", "update", "delete"]
  90. # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
  91. - apiGroups: [""]
  92. resources: ["configmaps"]
  93. resourceNames: ["kubernetes-dashboard-settings"]
  94. verbs: ["get", "update"]
  95. # Allow Dashboard to get metrics.
  96. - apiGroups: [""]
  97. resources: ["services"]
  98. resourceNames: ["heapster", "dashboard-metrics-scraper"]
  99. verbs: ["proxy"]
  100. - apiGroups: [""]
  101. resources: ["services/proxy"]
  102. resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
  103. verbs: ["get"]
  104. ---
  105. apiVersion: rbac.authorization.k8s.io/v1
  106. kind: RoleBinding
  107. metadata:
  108. labels:
  109. k8s-app: kubernetes-dashboard
  110. name: kubernetes-dashboard
  111. namespace: {{ dashboard_namespace }}
  112. roleRef:
  113. apiGroup: rbac.authorization.k8s.io
  114. kind: Role
  115. name: kubernetes-dashboard
  116. subjects:
  117. - kind: ServiceAccount
  118. name: kubernetes-dashboard
  119. namespace: {{ dashboard_namespace }}
  120. ---
  121. apiVersion: rbac.authorization.k8s.io/v1
  122. kind: ClusterRoleBinding
  123. metadata:
  124. name: kubernetes-dashboard
  125. roleRef:
  126. apiGroup: rbac.authorization.k8s.io
  127. kind: ClusterRole
  128. name: kubernetes-dashboard
  129. subjects:
  130. - kind: ServiceAccount
  131. name: kubernetes-dashboard
  132. namespace: {{ dashboard_namespace }}
  133. ---
  134. # ------------------- Dashboard Deployment ------------------- #
  135. kind: Deployment
  136. apiVersion: apps/v1
  137. metadata:
  138. labels:
  139. k8s-app: kubernetes-dashboard
  140. name: kubernetes-dashboard
  141. namespace: {{ dashboard_namespace }}
  142. spec:
  143. replicas: {{ dashboard_replicas }}
  144. revisionHistoryLimit: 10
  145. selector:
  146. matchLabels:
  147. k8s-app: kubernetes-dashboard
  148. template:
  149. metadata:
  150. labels:
  151. k8s-app: kubernetes-dashboard
  152. spec:
  153. priorityClassName: system-cluster-critical
  154. containers:
  155. - name: kubernetes-dashboard
  156. image: {{ dashboard_image_repo }}:{{ dashboard_image_tag }}
  157. imagePullPolicy: {{ k8s_image_pull_policy }}
  158. resources:
  159. limits:
  160. cpu: {{ dashboard_cpu_limit }}
  161. memory: {{ dashboard_memory_limit }}
  162. requests:
  163. cpu: {{ dashboard_cpu_requests }}
  164. memory: {{ dashboard_memory_requests }}
  165. ports:
  166. - containerPort: 8443
  167. protocol: TCP
  168. args:
  169. - --namespace={{ dashboard_namespace }}
  170. {% if dashboard_use_custom_certs %}
  171. - --tls-key-file={{ dashboard_tls_key_file }}
  172. - --tls-cert-file={{ dashboard_tls_cert_file }}
  173. {% else %}
  174. - --auto-generate-certificates
  175. {% endif %}
  176. {% if dashboard_skip_login %}
  177. - --enable-skip-login
  178. {% endif %}
  179. - --authentication-mode=token
  180. # Uncomment the following line to manually specify Kubernetes API server Host
  181. # If not specified, Dashboard will attempt to auto discover the API server and connect
  182. # to it. Uncomment only if the default does not work.
  183. # - --apiserver-host=http://my-address:port
  184. - --token-ttl={{ dashboard_token_ttl }}
  185. volumeMounts:
  186. - name: kubernetes-dashboard-certs
  187. mountPath: /certs
  188. # Create on-disk volume to store exec logs
  189. - mountPath: /tmp
  190. name: tmp-volume
  191. livenessProbe:
  192. httpGet:
  193. scheme: HTTPS
  194. path: /
  195. port: 8443
  196. initialDelaySeconds: 30
  197. timeoutSeconds: 30
  198. volumes:
  199. - name: kubernetes-dashboard-certs
  200. secret:
  201. secretName: {{ dashboard_certs_secret_name }}
  202. - name: tmp-volume
  203. emptyDir: {}
  204. serviceAccountName: kubernetes-dashboard
  205. {% if dashboard_master_toleration %}
  206. tolerations:
  207. - key: node-role.kubernetes.io/master
  208. effect: NoSchedule
  209. - key: node-role.kubernetes.io/control-plane
  210. effect: NoSchedule
  211. {% endif %}
  212. ---
  213. # ------------------- Dashboard Service ------------------- #
  214. kind: Service
  215. apiVersion: v1
  216. metadata:
  217. labels:
  218. k8s-app: kubernetes-dashboard
  219. name: kubernetes-dashboard
  220. namespace: {{ dashboard_namespace }}
  221. spec:
  222. ports:
  223. - port: 443
  224. targetPort: 8443
  225. selector:
  226. k8s-app: kubernetes-dashboard
  227. ---
  228. # ------------------- Metrics Scrapper Service Account ------------------- #
  229. kind: ClusterRole
  230. apiVersion: rbac.authorization.k8s.io/v1
  231. metadata:
  232. labels:
  233. k8s-app: kubernetes-dashboard
  234. name: kubernetes-dashboard
  235. rules:
  236. # Allow Metrics Scraper to get metrics from the Metrics server
  237. - apiGroups: ["metrics.k8s.io"]
  238. resources: ["pods", "nodes"]
  239. verbs: ["get", "list", "watch"]
  240. ---
  241. # ------------------- Metrics Scrapper Service ------------------- #
  242. kind: Service
  243. apiVersion: v1
  244. metadata:
  245. labels:
  246. k8s-app: kubernetes-metrics-scraper
  247. name: dashboard-metrics-scraper
  248. namespace: {{ dashboard_namespace }}
  249. spec:
  250. ports:
  251. - port: 8000
  252. targetPort: 8000
  253. selector:
  254. k8s-app: kubernetes-metrics-scraper
  255. ---
  256. # ------------------- Metrics Scrapper Deployment ------------------- #
  257. kind: Deployment
  258. apiVersion: apps/v1
  259. metadata:
  260. labels:
  261. k8s-app: kubernetes-metrics-scraper
  262. name: kubernetes-metrics-scraper
  263. namespace: {{ dashboard_namespace }}
  264. spec:
  265. replicas: 1
  266. revisionHistoryLimit: 10
  267. selector:
  268. matchLabels:
  269. k8s-app: kubernetes-metrics-scraper
  270. template:
  271. metadata:
  272. labels:
  273. k8s-app: kubernetes-metrics-scraper
  274. spec:
  275. priorityClassName: system-cluster-critical
  276. containers:
  277. - name: kubernetes-metrics-scraper
  278. image: {{ dashboard_metrics_scraper_repo }}:{{ dashboard_metrics_scraper_tag }}
  279. ports:
  280. - containerPort: 8000
  281. protocol: TCP
  282. livenessProbe:
  283. httpGet:
  284. scheme: HTTP
  285. path: /
  286. port: 8000
  287. initialDelaySeconds: 30
  288. timeoutSeconds: 30
  289. volumeMounts:
  290. - mountPath: /tmp
  291. name: tmp-volume
  292. serviceAccountName: kubernetes-dashboard
  293. volumes:
  294. - name: tmp-volume
  295. emptyDir: {}
  296. {% if dashboard_master_toleration %}
  297. tolerations:
  298. - key: node-role.kubernetes.io/master
  299. effect: NoSchedule
  300. - key: node-role.kubernetes.io/control-plane
  301. effect: NoSchedule
  302. {% endif %}