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.

319 lines
8.5 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. {% endif %}
  210. ---
  211. # ------------------- Dashboard Service ------------------- #
  212. kind: Service
  213. apiVersion: v1
  214. metadata:
  215. labels:
  216. k8s-app: kubernetes-dashboard
  217. name: kubernetes-dashboard
  218. namespace: {{ dashboard_namespace }}
  219. spec:
  220. ports:
  221. - port: 443
  222. targetPort: 8443
  223. selector:
  224. k8s-app: kubernetes-dashboard
  225. ---
  226. # ------------------- Metrics Scrapper Service Account ------------------- #
  227. kind: ClusterRole
  228. apiVersion: rbac.authorization.k8s.io/v1
  229. metadata:
  230. labels:
  231. k8s-app: kubernetes-dashboard
  232. name: kubernetes-dashboard
  233. rules:
  234. # Allow Metrics Scraper to get metrics from the Metrics server
  235. - apiGroups: ["metrics.k8s.io"]
  236. resources: ["pods", "nodes"]
  237. verbs: ["get", "list", "watch"]
  238. ---
  239. # ------------------- Metrics Scrapper Service ------------------- #
  240. kind: Service
  241. apiVersion: v1
  242. metadata:
  243. labels:
  244. k8s-app: kubernetes-metrics-scraper
  245. name: dashboard-metrics-scraper
  246. namespace: {{ dashboard_namespace }}
  247. spec:
  248. ports:
  249. - port: 8000
  250. targetPort: 8000
  251. selector:
  252. k8s-app: kubernetes-metrics-scraper
  253. ---
  254. # ------------------- Metrics Scrapper Deployment ------------------- #
  255. kind: Deployment
  256. apiVersion: apps/v1
  257. metadata:
  258. labels:
  259. k8s-app: kubernetes-metrics-scraper
  260. name: kubernetes-metrics-scraper
  261. namespace: {{ dashboard_namespace }}
  262. spec:
  263. replicas: 1
  264. revisionHistoryLimit: 10
  265. selector:
  266. matchLabels:
  267. k8s-app: kubernetes-metrics-scraper
  268. template:
  269. metadata:
  270. labels:
  271. k8s-app: kubernetes-metrics-scraper
  272. spec:
  273. priorityClassName: system-cluster-critical
  274. containers:
  275. - name: kubernetes-metrics-scraper
  276. image: {{ dashboard_metrics_scraper_repo }}:{{ dashboard_metrics_scraper_tag }}
  277. ports:
  278. - containerPort: 8000
  279. protocol: TCP
  280. livenessProbe:
  281. httpGet:
  282. scheme: HTTP
  283. path: /
  284. port: 8000
  285. initialDelaySeconds: 30
  286. timeoutSeconds: 30
  287. volumeMounts:
  288. - mountPath: /tmp
  289. name: tmp-volume
  290. serviceAccountName: kubernetes-dashboard
  291. volumes:
  292. - name: tmp-volume
  293. emptyDir: {}
  294. {% if dashboard_master_toleration %}
  295. tolerations:
  296. - key: node-role.kubernetes.io/master
  297. effect: NoSchedule
  298. {% endif %}