daemonset.yml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: metrics
  5. namespace: exporter
  6. labels:
  7. app: metrics-exporter
  8. # Apparently ICT don't work on daemonsets, although docs say they should.
  9. #annotations:
  10. # image.openshift.io/triggers: '[{"from":{"kind":"ImageStreamTag","name":"collector-sysstat:latest"},"fieldPath":"spec.template.spec.containers[?(@.name==\"collector-sysstat\")].image"},{"from":{"kind":"ImageStreamTag","name":"collector-psacct:latest"},"fieldPath":"spec.template.spec.containers[?(@.name==\"collector-psacct\")].image"},{"from":{"kind":"ImageStreamTag","name":"metrics-exporter:latest"},"fieldPath":"spec.template.spec.containers[?(@.name==\"metrics-exporter\")].image"}]'
  11. spec:
  12. minReadySeconds: 15
  13. selector:
  14. matchLabels:
  15. app: metrics-exporter
  16. type: daemonset
  17. project: exporter
  18. updateStrategy:
  19. type: RollingUpdate
  20. #rollingUpdate:
  21. # # This shit is either/or?
  22. # maxSurge: 25%
  23. # maxUnavailable: 25%
  24. template:
  25. metadata:
  26. labels:
  27. app: metrics-exporter
  28. type: daemonset
  29. project: exporter
  30. spec:
  31. containers:
  32. - name: collector-sysstat
  33. image: quay.io/benko/ocp-collector-sysstat:latest
  34. env:
  35. - name: PERIOD
  36. value: "15"
  37. - name: STARTUP_SCRATCH
  38. value: "1"
  39. - name: STARTUP_ROTATE
  40. value: "0"
  41. #livenessProbe: {}
  42. # something like /var/log/sa/sysstat-dump.json not being older than ${PERIOD}
  43. #readinessProbe: {}
  44. # /var/log/sa/sysstat-dump.json exists
  45. resources:
  46. requests:
  47. cpu: 100m
  48. memory: 64Mi
  49. limits:
  50. cpu: 250m
  51. memory: 128Mi
  52. securityContext:
  53. allowPrivilegeEscalation: true
  54. capabilities: {}
  55. # none
  56. privileged: true
  57. runAsGroup: 0
  58. runAsNonRoot: false
  59. runAsUser: 0
  60. volumeMounts:
  61. - name: metrics-shared-volume
  62. mountPath: /var/log/sa
  63. readOnly: false
  64. - name: collector-psacct
  65. image: quay.io/benko/ocp-collector-psacct:latest
  66. env:
  67. - name: PERIOD
  68. value: "15"
  69. - name: CUMULATIVE
  70. value: "0"
  71. - name: STARTUP_SCRATCH
  72. value: "1"
  73. #livenessProbe: {}
  74. # something like /var/account/psacct-dump-raw not being older than ${PERIOD}
  75. #readinessProbe: {}
  76. # /var/account/psacct-dump-raw exists
  77. resources:
  78. requests:
  79. cpu: 100m
  80. memory: 64Mi
  81. limits:
  82. cpu: 250m
  83. memory: 128Mi
  84. securityContext:
  85. allowPrivilegeEscalation: true
  86. capabilities:
  87. add:
  88. - CAP_SYS_PACCT
  89. privileged: true
  90. runAsGroup: 0
  91. runAsNonRoot: false
  92. runAsUser: 0
  93. volumeMounts:
  94. - name: metrics-shared-volume
  95. mountPath: /var/account
  96. readOnly: false
  97. - name: metrics-exporter
  98. image: quay.io/benko/ocp-metrics-exporter:latest
  99. env:
  100. - name: QUARKUS_HTTP_PORT
  101. value: "28080"
  102. ports:
  103. - name: http
  104. protocol: TCP
  105. # Must be the same as hostPort with hostNetwork==true.
  106. containerPort: 28080
  107. # Need some host port because hostNetwork==true.
  108. hostPort: 28080
  109. #livenessProbe: {}
  110. # /q/metrics returning 200?
  111. #readinessProbe: {}
  112. # /metrics/version returning 200?
  113. resources:
  114. requests:
  115. cpu: 250m
  116. memory: 256Mi
  117. limits:
  118. cpu: 250m
  119. memory: 512Mi
  120. # No special privileges for this one.
  121. securityContext:
  122. allowPrivilegeEscalation: false
  123. capabilities: {}
  124. privileged: false
  125. runAsNonRoot: true
  126. #runAsUser: namespace-assigned
  127. volumeMounts:
  128. - name: metrics-shared-volume
  129. mountPath: /metrics
  130. readOnly: false
  131. # Must cover all the nodes.
  132. affinity:
  133. nodeAffinity:
  134. requiredDuringSchedulingIgnoredDuringExecution:
  135. nodeSelectorTerms:
  136. - matchExpressions:
  137. - key: node-role.kubernetes.io/master
  138. operator: Exists
  139. - matchExpressions:
  140. - key: node-role.kubernetes.io/worker
  141. operator: Exists
  142. # We have affinity settings.
  143. nodeSelector: {}
  144. # VERY important, these three!
  145. hostIPC: true
  146. hostNetwork: true
  147. hostPID: true
  148. # Gives us the best possible chance of not being evicted.
  149. priorityClassName: system-node-critical
  150. # VERY important, these two!
  151. securityContext:
  152. # Sets a default that can be overridden by container.
  153. runAsNonRoot: false
  154. # Need to make sure even unprivileged exporter can write.
  155. supplementalGroups:
  156. - 0
  157. serviceAccountName: exporter
  158. # Make that somewhere around $PERIOD, but larger.
  159. terminationGracePeriodSeconds: 15
  160. tolerations:
  161. - effect: NoSchedule
  162. key: node-role.kubernetes.io/master
  163. volumes:
  164. - name: metrics-shared-volume
  165. emptyDir: {}