daemonset.yml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: metrics
  5. namespace: exporter
  6. labels:
  7. app: metrics
  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
  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
  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. # TBD
  47. securityContext:
  48. allowPrivilegeEscalation: true
  49. capabilities: {}
  50. # none
  51. privileged: true
  52. runAsGroup: 0
  53. runAsNonRoot: false
  54. runAsUser: 0
  55. volumeMounts:
  56. - name: metrics-shared-volume
  57. mountPath: /var/log/sa
  58. readOnly: false
  59. - name: collector-psacct
  60. image: quay.io/benko/ocp-collector-psacct:latest
  61. env:
  62. - name: PERIOD
  63. value: "15"
  64. - name: CUMULATIVE
  65. value: "0"
  66. - name: STARTUP_SCRATCH
  67. value: "1"
  68. #livenessProbe: {}
  69. # something like /var/account/psacct-dump-raw not being older than ${PERIOD}
  70. #readinessProbe: {}
  71. # /var/account/psacct-dump-raw exists
  72. resources: {}
  73. # TBD
  74. securityContext:
  75. allowPrivilegeEscalation: true
  76. capabilities:
  77. add:
  78. - CAP_SYS_PACCT
  79. privileged: true
  80. runAsGroup: 0
  81. runAsNonRoot: false
  82. runAsUser: 0
  83. volumeMounts:
  84. - name: metrics-shared-volume
  85. mountPath: /var/account
  86. readOnly: false
  87. - name: metrics-exporter
  88. image: quay.io/benko/ocp-metrics-exporter:latest
  89. env:
  90. - name: HOSTNAME_FROM_API
  91. value: "true"
  92. - name: QUARKUS_HTTP_PORT
  93. value: "28080"
  94. ports:
  95. - name: http
  96. protocol: TCP
  97. # Must be the same as hostPort with hostNetwork==true.
  98. containerPort: 28080
  99. # Need some host port because hostNetwork==true.
  100. hostPort: 28080
  101. #livenessProbe: {}
  102. # /q/metrics returning 200?
  103. #readinessProbe: {}
  104. # /metrics/version returning 200?
  105. resources: {}
  106. # TBD
  107. # No special privileges for this one.
  108. securityContext:
  109. allowPrivilegeEscalation: false
  110. capabilities: {}
  111. privileged: false
  112. runAsNonRoot: true
  113. #runAsUser: namespace-assigned
  114. volumeMounts:
  115. - name: metrics-shared-volume
  116. mountPath: /metrics
  117. readOnly: false
  118. # Must cover all the nodes.
  119. affinity:
  120. nodeAffinity:
  121. requiredDuringSchedulingIgnoredDuringExecution:
  122. nodeSelectorTerms:
  123. - matchExpressions:
  124. - key: node-role.kubernetes.io/master
  125. operator: Exists
  126. - matchExpressions:
  127. - key: node-role.kubernetes.io/worker
  128. operator: Exists
  129. # We have affinity settings.
  130. nodeSelector: {}
  131. # VERY important, these three!
  132. hostIPC: true
  133. hostNetwork: true
  134. hostPID: true
  135. # Gives us the best possible chance of not being evicted.
  136. priorityClassName: system-node-critical
  137. # VERY important, these two!
  138. securityContext:
  139. # Sets a default that can be overridden by container.
  140. runAsNonRoot: false
  141. # Need to make sure even unprivileged exporter can write.
  142. supplementalGroups:
  143. - 0
  144. serviceAccountName: exporter
  145. # Make that somewhere around $PERIOD, but larger.
  146. terminationGracePeriodSeconds: 15
  147. # Need to adjust this whenever there are dedicated control plane or
  148. # other tainted nodes.
  149. tolerations: []
  150. volumes:
  151. - name: metrics-shared-volume
  152. emptyDir: {}