install_prometheus.yaml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. ---
  2. # namespace
  3. - name: Add prometheus project
  4. oc_project:
  5. state: "{{ state }}"
  6. name: "{{ openshift_prometheus_namespace }}"
  7. node_selector: "{{ openshift_prometheus_node_selector | oo_selector_to_string_list() }}"
  8. description: Prometheus
  9. # secrets
  10. - name: Set alert and prometheus secrets
  11. oc_secret:
  12. state: "{{ state }}"
  13. name: "{{ item }}-proxy"
  14. namespace: "{{ openshift_prometheus_namespace }}"
  15. contents:
  16. - path: session_secret
  17. data: "{{ 43 | oo_random_word }}="
  18. with_items:
  19. - prometheus
  20. - alerts
  21. # serviceaccount
  22. - name: create prometheus serviceaccount
  23. oc_serviceaccount:
  24. state: "{{ state }}"
  25. name: prometheus
  26. namespace: "{{ openshift_prometheus_namespace }}"
  27. # TODO add annotations when supproted
  28. # annotations:
  29. # serviceaccounts.openshift.io/oauth-redirectreference.prom: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"prometheus"}}'
  30. # serviceaccounts.openshift.io/oauth-redirectreference.alerts: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"alerts"}}'
  31. secrets:
  32. - prometheus-secrets
  33. changed_when: no
  34. # TODO remove this when annotations are supported by oc_serviceaccount
  35. - name: annotate serviceaccount
  36. command: >
  37. {{ openshift.common.client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  38. serviceaccount prometheus
  39. serviceaccounts.openshift.io/oauth-redirectreference.prom='{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"prometheus"}}'
  40. serviceaccounts.openshift.io/oauth-redirectreference.alerts='{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"alerts"}}'
  41. # create clusterrolebinding for prometheus serviceaccount
  42. - name: Set cluster-reader permissions for prometheus
  43. oc_adm_policy_user:
  44. state: "{{ state }}"
  45. namespace: "{{ openshift_prometheus_namespace }}"
  46. resource_kind: cluster-role
  47. resource_name: cluster-reader
  48. user: "system:serviceaccount:{{ openshift_prometheus_namespace }}:prometheus"
  49. ######################################################################
  50. # NFS
  51. # In the case that we are not running on a cloud provider, volumes must be statically provisioned
  52. - include: nfs.yaml
  53. when: not (openshift_cloudprovider_kind is defined and (openshift_cloudprovider_kind == 'aws' or openshift_cloudprovider_kind == 'gce'))
  54. # create prometheus and alerts services
  55. # TODO join into 1 task with loop
  56. - name: Create prometheus service
  57. oc_service:
  58. state: "{{ state }}"
  59. name: "{{ item.name }}"
  60. namespace: "{{ openshift_prometheus_namespace }}"
  61. selector:
  62. app: prometheus
  63. labels:
  64. name: "{{ item.name }}"
  65. # TODO add annotations when supported
  66. # annotations:
  67. # service.alpha.openshift.io/serving-cert-secret-name: "{{item.name}}-tls"
  68. ports:
  69. - port: 443
  70. targetPort: 8443
  71. with_items:
  72. - name: prometheus
  73. - name: Create alerts service
  74. oc_service:
  75. state: "{{ state }}"
  76. name: "{{ item.name }}"
  77. namespace: "{{ openshift_prometheus_namespace }}"
  78. selector:
  79. app: prometheus
  80. labels:
  81. name: "{{ item.name }}"
  82. # TODO add annotations when supported
  83. # annotations:
  84. # service.alpha.openshift.io/serving-cert-secret-name: "{{item.name}}-tls"
  85. ports:
  86. - port: 443
  87. targetPort: 9443
  88. with_items:
  89. - name: alerts
  90. # Annotate services with secret name
  91. # TODO remove this when annotations are supported by oc_service
  92. - name: annotate prometheus service
  93. command: >
  94. {{ openshift.common.client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  95. service prometheus 'service.alpha.openshift.io/serving-cert-secret-name=prometheus-tls'
  96. - name: annotate alerts service
  97. command: >
  98. {{ openshift.common.client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  99. service alerts 'service.alpha.openshift.io/serving-cert-secret-name=prometheus-alerts-tls'
  100. # create prometheus and alerts routes
  101. - name: create prometheus and alerts routes
  102. oc_route:
  103. state: "{{ state }}"
  104. name: "{{ item.name }}"
  105. namespace: "{{ openshift_prometheus_namespace }}"
  106. service_name: "{{ item.name }}"
  107. tls_termination: reencrypt
  108. with_items:
  109. - name: prometheus
  110. - name: alerts
  111. # Storage
  112. - name: create prometheus pvc
  113. oc_pvc:
  114. namespace: "{{ openshift_prometheus_namespace }}"
  115. name: "{{ openshift_prometheus_pvc_name }}"
  116. access_modes: "{{ openshift_prometheus_pvc_access_modes }}"
  117. volume_capacity: "{{ openshift_prometheus_pvc_size }}"
  118. selector: "{{ openshift_prometheus_pvc_pv_selector }}"
  119. - name: create alertmanager pvc
  120. oc_pvc:
  121. namespace: "{{ openshift_prometheus_namespace }}"
  122. name: "{{ openshift_prometheus_alertmanager_pvc_name }}"
  123. access_modes: "{{ openshift_prometheus_alertmanager_pvc_access_modes }}"
  124. volume_capacity: "{{ openshift_prometheus_alertmanager_pvc_size }}"
  125. selector: "{{ openshift_prometheus_alertmanager_pvc_pv_selector }}"
  126. - name: create alertbuffer pvc
  127. oc_pvc:
  128. namespace: "{{ openshift_prometheus_namespace }}"
  129. name: "{{ openshift_prometheus_alertbuffer_pvc_name }}"
  130. access_modes: "{{ openshift_prometheus_alertbuffer_pvc_access_modes }}"
  131. volume_capacity: "{{ openshift_prometheus_alertbuffer_pvc_size }}"
  132. selector: "{{ openshift_prometheus_alertbuffer_pvc_pv_selector }}"
  133. # create prometheus deployment
  134. - name: Set prometheus deployment template
  135. template:
  136. src: prometheus_deployment.j2
  137. dest: "{{ tempdir }}/templates/prometheus.yaml"
  138. vars:
  139. namespace: "{{ openshift_prometheus_namespace }}"
  140. prom_replicas: "{{ openshift_prometheus_replicas }}"
  141. - name: Set prometheus deployment
  142. oc_obj:
  143. state: "{{ state }}"
  144. name: "prometheus"
  145. namespace: "{{ openshift_prometheus_namespace }}"
  146. kind: deployment
  147. files:
  148. - "{{ tempdir }}/templates/prometheus.yaml"
  149. delete_after: true
  150. # prometheus configmap
  151. # Copy the additional rules file if it is defined
  152. - name: Copy additional rules file to host
  153. copy:
  154. src: "{{ openshift_prometheus_additional_rules_file }}"
  155. dest: "{{ tempdir }}/prometheus.additional.rules"
  156. when:
  157. - openshift_prometheus_additional_rules_file is defined
  158. - openshift_prometheus_additional_rules_file is not none
  159. - openshift_prometheus_additional_rules_file | trim | length > 0
  160. - stat:
  161. path: "{{ tempdir }}/prometheus.additional.rules"
  162. register: additional_rules_stat
  163. # The kubernetes version impacts the prometheus scraping endpoint
  164. # so gathering it before constructing the configmap
  165. - name: get oc version
  166. oc_version:
  167. register: oc_version
  168. - set_fact:
  169. kubernetes_version: "{{ oc_version.results.kubernetes_short | float }}"
  170. - template:
  171. src: prometheus.yml.j2
  172. dest: "{{ tempdir }}/prometheus.yml"
  173. changed_when: no
  174. - template:
  175. src: prometheus.rules.j2
  176. dest: "{{ tempdir }}/prometheus.rules"
  177. changed_when: no
  178. # In prometheus configmap create "additional.rules" section if file exists
  179. - name: Set prometheus configmap
  180. oc_configmap:
  181. state: "{{ state }}"
  182. name: "prometheus"
  183. namespace: "{{ openshift_prometheus_namespace }}"
  184. from_file:
  185. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  186. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  187. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  188. when: additional_rules_stat.stat.exists == True
  189. - name: Set prometheus configmap
  190. oc_configmap:
  191. state: "{{ state }}"
  192. name: "prometheus"
  193. namespace: "{{ openshift_prometheus_namespace }}"
  194. from_file:
  195. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  196. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  197. when: additional_rules_stat.stat.exists == False
  198. # alertmanager configmap
  199. - template:
  200. src: alertmanager.yml.j2
  201. dest: "{{ tempdir }}/alertmanager.yml"
  202. changed_when: no
  203. - name: Set alertmanager configmap
  204. oc_configmap:
  205. state: "{{ state }}"
  206. name: "prometheus-alerts"
  207. namespace: "{{ openshift_prometheus_namespace }}"
  208. from_file:
  209. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"