install_prometheus.yaml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. ---
  2. # namespace
  3. - name: Add prometheus project
  4. oc_project:
  5. state: present
  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: present
  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: present
  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: present
  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: present
  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: present
  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: present
  102. name: "{{ item.name }}"
  103. host: "{{ item.host }}"
  104. namespace: "{{ openshift_prometheus_namespace }}"
  105. service_name: "{{ item.name }}"
  106. tls_termination: reencrypt
  107. with_items:
  108. - name: prometheus
  109. host: "{{ openshift_prometheus_hostname }}"
  110. - name: alerts
  111. host: "{{ openshift_prometheus_alerts_hostname }}"
  112. # Storage
  113. - name: create prometheus pvc
  114. oc_pvc:
  115. namespace: "{{ openshift_prometheus_namespace }}"
  116. name: "{{ openshift_prometheus_pvc_name }}"
  117. access_modes: "{{ openshift_prometheus_pvc_access_modes }}"
  118. volume_capacity: "{{ openshift_prometheus_pvc_size }}"
  119. selector: "{{ openshift_prometheus_pvc_pv_selector }}"
  120. when: openshift_prometheus_storage_type == 'pvc'
  121. - name: create alertmanager pvc
  122. oc_pvc:
  123. namespace: "{{ openshift_prometheus_namespace }}"
  124. name: "{{ openshift_prometheus_alertmanager_pvc_name }}"
  125. access_modes: "{{ openshift_prometheus_alertmanager_pvc_access_modes }}"
  126. volume_capacity: "{{ openshift_prometheus_alertmanager_pvc_size }}"
  127. selector: "{{ openshift_prometheus_alertmanager_pvc_pv_selector }}"
  128. when: openshift_prometheus_alertmanager_storage_type == 'pvc'
  129. - name: create alertbuffer pvc
  130. oc_pvc:
  131. namespace: "{{ openshift_prometheus_namespace }}"
  132. name: "{{ openshift_prometheus_alertbuffer_pvc_name }}"
  133. access_modes: "{{ openshift_prometheus_alertbuffer_pvc_access_modes }}"
  134. volume_capacity: "{{ openshift_prometheus_alertbuffer_pvc_size }}"
  135. selector: "{{ openshift_prometheus_alertbuffer_pvc_pv_selector }}"
  136. when: openshift_prometheus_alertbuffer_storage_type == 'pvc'
  137. # prometheus configmap
  138. # Copy the additional rules file if it is defined
  139. - name: Copy additional rules file to host
  140. copy:
  141. src: "{{ openshift_prometheus_additional_rules_file }}"
  142. dest: "{{ tempdir }}/prometheus.additional.rules"
  143. when:
  144. - openshift_prometheus_additional_rules_file is defined
  145. - openshift_prometheus_additional_rules_file is not none
  146. - openshift_prometheus_additional_rules_file | trim | length > 0
  147. - stat:
  148. path: "{{ tempdir }}/prometheus.additional.rules"
  149. register: additional_rules_stat
  150. # The kubernetes version impacts the prometheus scraping endpoint
  151. # so gathering it before constructing the configmap
  152. - name: get oc version
  153. oc_version:
  154. register: oc_version
  155. - set_fact:
  156. kubernetes_version: "{{ oc_version.results.kubernetes_short | float }}"
  157. - template:
  158. src: prometheus.yml.j2
  159. dest: "{{ tempdir }}/prometheus.yml"
  160. changed_when: no
  161. - template:
  162. src: prometheus.rules.j2
  163. dest: "{{ tempdir }}/prometheus.rules"
  164. changed_when: no
  165. # In prometheus configmap create "additional.rules" section if file exists
  166. - name: Set prometheus configmap
  167. oc_configmap:
  168. state: present
  169. name: "prometheus"
  170. namespace: "{{ openshift_prometheus_namespace }}"
  171. from_file:
  172. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  173. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  174. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  175. when: additional_rules_stat.stat.exists == True
  176. - name: Set prometheus configmap
  177. oc_configmap:
  178. state: present
  179. name: "prometheus"
  180. namespace: "{{ openshift_prometheus_namespace }}"
  181. from_file:
  182. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  183. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  184. when: additional_rules_stat.stat.exists == False
  185. # alertmanager configmap
  186. - template:
  187. src: alertmanager.yml.j2
  188. dest: "{{ tempdir }}/alertmanager.yml"
  189. changed_when: no
  190. - name: Set alertmanager configmap
  191. oc_configmap:
  192. state: present
  193. name: "prometheus-alerts"
  194. namespace: "{{ openshift_prometheus_namespace }}"
  195. from_file:
  196. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"
  197. # create prometheus stateful set
  198. - name: Set prometheus template
  199. template:
  200. src: prometheus.j2
  201. dest: "{{ tempdir }}/templates/prometheus.yaml"
  202. vars:
  203. namespace: "{{ openshift_prometheus_namespace }}"
  204. # prom_replicas: "{{ openshift_prometheus_replicas }}"
  205. - name: Set prometheus stateful set
  206. oc_obj:
  207. state: present
  208. name: "prometheus"
  209. namespace: "{{ openshift_prometheus_namespace }}"
  210. kind: statefulset
  211. files:
  212. - "{{ tempdir }}/templates/prometheus.yaml"
  213. delete_after: true