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. # create prometheus stateful set
  135. - name: Set prometheus template
  136. template:
  137. src: prometheus.j2
  138. dest: "{{ tempdir }}/templates/prometheus.yaml"
  139. vars:
  140. namespace: "{{ openshift_prometheus_namespace }}"
  141. # prom_replicas: "{{ openshift_prometheus_replicas }}"
  142. - name: Set prometheus stateful set
  143. oc_obj:
  144. state: "{{ state }}"
  145. name: "prometheus"
  146. namespace: "{{ openshift_prometheus_namespace }}"
  147. kind: statefulset
  148. files:
  149. - "{{ tempdir }}/templates/prometheus.yaml"
  150. delete_after: true
  151. # prometheus configmap
  152. # Copy the additional rules file if it is defined
  153. - name: Copy additional rules file to host
  154. copy:
  155. src: "{{ openshift_prometheus_additional_rules_file }}"
  156. dest: "{{ tempdir }}/prometheus.additional.rules"
  157. when:
  158. - openshift_prometheus_additional_rules_file is defined
  159. - openshift_prometheus_additional_rules_file is not none
  160. - openshift_prometheus_additional_rules_file | trim | length > 0
  161. - stat:
  162. path: "{{ tempdir }}/prometheus.additional.rules"
  163. register: additional_rules_stat
  164. # The kubernetes version impacts the prometheus scraping endpoint
  165. # so gathering it before constructing the configmap
  166. - name: get oc version
  167. oc_version:
  168. register: oc_version
  169. - set_fact:
  170. kubernetes_version: "{{ oc_version.results.kubernetes_short | float }}"
  171. - template:
  172. src: prometheus.yml.j2
  173. dest: "{{ tempdir }}/prometheus.yml"
  174. changed_when: no
  175. - template:
  176. src: prometheus.rules.j2
  177. dest: "{{ tempdir }}/prometheus.rules"
  178. changed_when: no
  179. # In prometheus configmap create "additional.rules" section if file exists
  180. - name: Set prometheus configmap
  181. oc_configmap:
  182. state: "{{ state }}"
  183. name: "prometheus"
  184. namespace: "{{ openshift_prometheus_namespace }}"
  185. from_file:
  186. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  187. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  188. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  189. when: additional_rules_stat.stat.exists == True
  190. - name: Set prometheus configmap
  191. oc_configmap:
  192. state: "{{ state }}"
  193. name: "prometheus"
  194. namespace: "{{ openshift_prometheus_namespace }}"
  195. from_file:
  196. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  197. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  198. when: additional_rules_stat.stat.exists == False
  199. # alertmanager configmap
  200. - template:
  201. src: alertmanager.yml.j2
  202. dest: "{{ tempdir }}/alertmanager.yml"
  203. changed_when: no
  204. - name: Set alertmanager configmap
  205. oc_configmap:
  206. state: "{{ state }}"
  207. name: "prometheus-alerts"
  208. namespace: "{{ openshift_prometheus_namespace }}"
  209. from_file:
  210. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"