install_prometheus.yaml 7.8 KB

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