You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.6 KiB

  1. ---
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: metrics-server
  6. namespace: kube-system
  7. labels:
  8. app.kubernetes.io/name: metrics-server
  9. addonmanager.kubernetes.io/mode: Reconcile
  10. version: {{ metrics_server_version }}
  11. spec:
  12. selector:
  13. matchLabels:
  14. app.kubernetes.io/name: metrics-server
  15. version: {{ metrics_server_version }}
  16. template:
  17. metadata:
  18. name: metrics-server
  19. labels:
  20. app.kubernetes.io/name: metrics-server
  21. version: {{ metrics_server_version }}
  22. annotations:
  23. seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
  24. spec:
  25. priorityClassName: system-cluster-critical
  26. serviceAccountName: metrics-server
  27. containers:
  28. - name: metrics-server
  29. image: {{ metrics_server_image_repo }}:{{ metrics_server_image_tag }}
  30. imagePullPolicy: {{ k8s_image_pull_policy }}
  31. command:
  32. - /metrics-server
  33. - --logtostderr
  34. - --cert-dir=/tmp
  35. - --secure-port=8443
  36. {% if metrics_server_kubelet_preferred_address_types %}
  37. - --kubelet-preferred-address-types={{ metrics_server_kubelet_preferred_address_types }}
  38. {% endif %}
  39. - --kubelet-use-node-status-port
  40. {% if metrics_server_kubelet_insecure_tls %}
  41. - --kubelet-insecure-tls
  42. {% endif %}
  43. - --metric-resolution={{ metrics_server_metric_resolution }}
  44. resources:
  45. requests:
  46. cpu: 100m
  47. memory: 300Mi
  48. ports:
  49. - containerPort: 8443
  50. name: https
  51. protocol: TCP
  52. volumeMounts:
  53. - name: tmp
  54. mountPath: /tmp
  55. livenessProbe:
  56. httpGet:
  57. path: /healthz?exclude=readyz
  58. port: https
  59. scheme: HTTPS
  60. timeoutSeconds: 10
  61. readinessProbe:
  62. httpGet:
  63. path: /healthz?exclude=livez
  64. port: https
  65. scheme: HTTPS
  66. timeoutSeconds: 10
  67. securityContext:
  68. allowPrivilegeEscalation: false
  69. capabilities:
  70. drop: ["all"]
  71. readOnlyRootFilesystem: true
  72. runAsGroup: 10001
  73. runAsNonRoot: true
  74. runAsUser: 10001
  75. resources:
  76. limits:
  77. cpu: {{ metrics_server_limits_cpu }}
  78. memory: {{ metrics_server_limits_memory }}
  79. requests:
  80. cpu: {{ metrics_server_requests_cpu }}
  81. memory: {{ metrics_server_requests_memory }}
  82. - name: metrics-server-nanny
  83. image: {{ addon_resizer_image_repo }}:{{ addon_resizer_image_tag }}
  84. imagePullPolicy: {{ k8s_image_pull_policy }}
  85. resources:
  86. limits:
  87. cpu: {{ addon_resizer_limits_cpu }}
  88. memory: {{ addon_resizer_limits_memory }}
  89. requests:
  90. cpu: {{ addon_resizer_requests_cpu }}
  91. memory: {{ addon_resizer_requests_memory }}
  92. env:
  93. - name: MY_POD_NAME
  94. valueFrom:
  95. fieldRef:
  96. fieldPath: metadata.name
  97. - name: MY_POD_NAMESPACE
  98. valueFrom:
  99. fieldRef:
  100. fieldPath: metadata.namespace
  101. volumeMounts:
  102. - name: metrics-server-config-volume
  103. mountPath: /etc/config
  104. command:
  105. - /pod_nanny
  106. - --config-dir=/etc/config
  107. - --cpu={{ metrics_server_cpu }}
  108. - --extra-cpu=0.5m
  109. - --memory={{ metrics_server_memory }}
  110. - --extra-memory={{ metrics_server_memory_per_node }}
  111. - --threshold=5
  112. - --deployment=metrics-server
  113. - --container=metrics-server
  114. - --poll-period=300000
  115. - --estimator=exponential
  116. # Specifies the smallest cluster (defined in number of nodes)
  117. # resources will be scaled to.
  118. - --minClusterSize={{ metrics_server_min_cluster_size }}
  119. volumes:
  120. - name: metrics-server-config-volume
  121. configMap:
  122. name: metrics-server-config
  123. - name: tmp
  124. emptyDir: {}
  125. {% if not masters_are_not_tainted %}
  126. tolerations:
  127. - key: node-role.kubernetes.io/master
  128. effect: NoSchedule
  129. - key: node-role.kubernetes.io/control-plane
  130. effect: NoSchedule
  131. {% endif %}
  132. affinity:
  133. nodeAffinity:
  134. preferredDuringSchedulingIgnoredDuringExecution:
  135. - weight: 100
  136. preference:
  137. matchExpressions:
  138. {% if kube_version is version('v1.20.0', '<') %}
  139. - key: node-role.kubernetes.io/master
  140. {% else %}
  141. - key: node-role.kubernetes.io/control-plane
  142. {% endif %}
  143. operator: In
  144. values:
  145. - ""