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.

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