daemonset.yml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. ports:
  93. - name: http
  94. protocol: TCP
  95. # Must be the same as hostPort with hostNetwork==true.
  96. containerPort: 28080
  97. # Need some host port because hostNetwork==true.
  98. hostPort: 28080
  99. #livenessProbe: {}
  100. # /q/metrics returning 200?
  101. #readinessProbe: {}
  102. # /metrics/version returning 200?
  103. resources: {}
  104. # TBD
  105. # No special privileges for this one.
  106. securityContext:
  107. allowPrivilegeEscalation: false
  108. capabilities: {}
  109. privileged: false
  110. runAsNonRoot: true
  111. #runAsUser: namespace-assigned
  112. volumeMounts:
  113. - name: metrics-shared-volume
  114. mountPath: /metrics
  115. readOnly: false
  116. # Must cover all the nodes.
  117. affinity:
  118. nodeAffinity:
  119. requiredDuringSchedulingIgnoredDuringExecution:
  120. nodeSelectorTerms:
  121. - matchExpressions:
  122. - key: node-role.kubernetes.io/master
  123. operator: Exists
  124. - matchExpressions:
  125. - key: node-role.kubernetes.io/worker
  126. operator: Exists
  127. # We have affinity settings.
  128. nodeSelector: {}
  129. # VERY important, these three!
  130. hostIPC: true
  131. hostNetwork: true
  132. hostPID: true
  133. # Gives us the best possible chance of not being evicted.
  134. priorityClassName: system-node-critical
  135. # VERY important, these two!
  136. securityContext:
  137. # Sets a default that can be overridden by container.
  138. runAsNonRoot: false
  139. # Need to make sure even unprivileged exporter can write.
  140. supplementalGroups:
  141. - 0
  142. serviceAccountName: exporter
  143. # Make that somewhere around $PERIOD, but larger.
  144. terminationGracePeriodSeconds: 15
  145. # Need to adjust this whenever there are dedicated control plane or
  146. # other tainted nodes.
  147. tolerations: []
  148. volumes:
  149. - name: metrics-shared-volume
  150. emptyDir: {}