install_prometheus.yaml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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. # create prometheus and alerts services
  50. # TODO join into 1 task with loop
  51. - name: Create prometheus service
  52. oc_service:
  53. state: "{{ state }}"
  54. name: "{{ item.name }}"
  55. namespace: "{{ openshift_prometheus_namespace }}"
  56. selector:
  57. app: prometheus
  58. labels:
  59. name: "{{ item.name }}"
  60. # TODO add annotations when supported
  61. # annotations:
  62. # service.alpha.openshift.io/serving-cert-secret-name: "{{item.name}}-tls"
  63. ports:
  64. - port: 443
  65. targetPort: 8443
  66. with_items:
  67. - name: prometheus
  68. - name: Create alerts service
  69. oc_service:
  70. state: "{{ state }}"
  71. name: "{{ item.name }}"
  72. namespace: "{{ openshift_prometheus_namespace }}"
  73. selector:
  74. app: prometheus
  75. labels:
  76. name: "{{ item.name }}"
  77. # TODO add annotations when supported
  78. # annotations:
  79. # service.alpha.openshift.io/serving-cert-secret-name: "{{item.name}}-tls"
  80. ports:
  81. - port: 443
  82. targetPort: 9443
  83. with_items:
  84. - name: alerts
  85. # Annotate services with secret name
  86. # TODO remove this when annotations are supported by oc_service
  87. - name: annotate prometheus service
  88. command: >
  89. {{ openshift.common.client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  90. service prometheus
  91. prometheus.io/scrape='true'
  92. prometheus.io/scheme=https
  93. service.alpha.openshift.io/serving-cert-secret-name=prometheus-tls
  94. - name: annotate alerts service
  95. command: >
  96. {{ openshift.common.client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  97. service alerts 'service.alpha.openshift.io/serving-cert-secret-name=prometheus-alerts-tls'
  98. # create prometheus and alerts routes
  99. - name: create prometheus and alerts routes
  100. oc_route:
  101. state: "{{ state }}"
  102. name: "{{ item.name }}"
  103. namespace: "{{ openshift_prometheus_namespace }}"
  104. service_name: "{{ item.name }}"
  105. tls_termination: reencrypt
  106. with_items:
  107. - name: prometheus
  108. - name: alerts
  109. # Storage
  110. - name: create prometheus pvc
  111. oc_pvc:
  112. namespace: "{{ openshift_prometheus_namespace }}"
  113. name: "{{ openshift_prometheus_pvc_name }}"
  114. access_modes: "{{ openshift_prometheus_pvc_access_modes }}"
  115. volume_capacity: "{{ openshift_prometheus_pvc_size }}"
  116. selector: "{{ openshift_prometheus_pvc_pv_selector }}"
  117. when: openshift_prometheus_storage_type == 'pvc'
  118. - name: create alertmanager pvc
  119. oc_pvc:
  120. namespace: "{{ openshift_prometheus_namespace }}"
  121. name: "{{ openshift_prometheus_alertmanager_pvc_name }}"
  122. access_modes: "{{ openshift_prometheus_alertmanager_pvc_access_modes }}"
  123. volume_capacity: "{{ openshift_prometheus_alertmanager_pvc_size }}"
  124. selector: "{{ openshift_prometheus_alertmanager_pvc_pv_selector }}"
  125. when: openshift_prometheus_alertmanager_storage_type == 'pvc'
  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. when: openshift_prometheus_alertbuffer_storage_type == 'pvc'
  134. # prometheus configmap
  135. # Copy the additional rules file if it is defined
  136. - name: Copy additional rules file to host
  137. copy:
  138. src: "{{ openshift_prometheus_additional_rules_file }}"
  139. dest: "{{ tempdir }}/prometheus.additional.rules"
  140. when:
  141. - openshift_prometheus_additional_rules_file is defined
  142. - openshift_prometheus_additional_rules_file is not none
  143. - openshift_prometheus_additional_rules_file | trim | length > 0
  144. - stat:
  145. path: "{{ tempdir }}/prometheus.additional.rules"
  146. register: additional_rules_stat
  147. # The kubernetes version impacts the prometheus scraping endpoint
  148. # so gathering it before constructing the configmap
  149. - name: get oc version
  150. oc_version:
  151. register: oc_version
  152. - set_fact:
  153. kubernetes_version: "{{ oc_version.results.kubernetes_short | float }}"
  154. - template:
  155. src: prometheus.yml.j2
  156. dest: "{{ tempdir }}/prometheus.yml"
  157. changed_when: no
  158. - template:
  159. src: prometheus.rules.j2
  160. dest: "{{ tempdir }}/prometheus.rules"
  161. changed_when: no
  162. # In prometheus configmap create "additional.rules" section if file exists
  163. - name: Set prometheus configmap
  164. oc_configmap:
  165. state: "{{ state }}"
  166. name: "prometheus"
  167. namespace: "{{ openshift_prometheus_namespace }}"
  168. from_file:
  169. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  170. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  171. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  172. when: additional_rules_stat.stat.exists == True
  173. - name: Set prometheus configmap
  174. oc_configmap:
  175. state: "{{ state }}"
  176. name: "prometheus"
  177. namespace: "{{ openshift_prometheus_namespace }}"
  178. from_file:
  179. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  180. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  181. when: additional_rules_stat.stat.exists == False
  182. # alertmanager configmap
  183. - template:
  184. src: alertmanager.yml.j2
  185. dest: "{{ tempdir }}/alertmanager.yml"
  186. changed_when: no
  187. - name: Set alertmanager configmap
  188. oc_configmap:
  189. state: "{{ state }}"
  190. name: "prometheus-alerts"
  191. namespace: "{{ openshift_prometheus_namespace }}"
  192. from_file:
  193. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"
  194. # create prometheus stateful set
  195. - name: Set prometheus template
  196. template:
  197. src: prometheus.j2
  198. dest: "{{ tempdir }}/templates/prometheus.yaml"
  199. vars:
  200. namespace: "{{ openshift_prometheus_namespace }}"
  201. # prom_replicas: "{{ openshift_prometheus_replicas }}"
  202. - name: Set prometheus stateful set
  203. oc_obj:
  204. state: "{{ state }}"
  205. name: "prometheus"
  206. namespace: "{{ openshift_prometheus_namespace }}"
  207. kind: statefulset
  208. files:
  209. - "{{ tempdir }}/templates/prometheus.yaml"
  210. delete_after: true