【发布时间】:2021-09-23 07:53:04
【问题描述】:
我正在尝试动态限制 pod 中每个容器的资源使用情况。对于 docker,我使用 --cgroup-parent 将容器放在特定的 cgroup 目录中。但是,在 Kubernetes 中,我没有找到任何可以执行此操作的选项。
【问题讨论】:
标签: linux docker kubernetes minikube kubernetes-pod
我正在尝试动态限制 pod 中每个容器的资源使用情况。对于 docker,我使用 --cgroup-parent 将容器放在特定的 cgroup 目录中。但是,在 Kubernetes 中,我没有找到任何可以执行此操作的选项。
【问题讨论】:
标签: linux docker kubernetes minikube kubernetes-pod
您可以使用Kubernetes支持的cgroupfs驱动。
但也许您只想单独set the Pod and Container resources? Kubernetes 允许设置特定容器 as well 的限制,因此您可以拥有具有 500Mi RAM 的应用程序和具有 50Mi RAM (requests) 的日志,但如有必要,请将两者都扩展为 1Gi (limits):
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
更新:
正如David Maze 所述,您还可以使用自动缩放器,例如Vertical Pod Autoscaler,它将调整 Pod 资源。但为此,CustomResourceDefinition 是必需的,因此即使是集群的适当权限也可用于创建和部署 CRD(如果您的访问权限有限并且您需要联系集群管理员,则可能无法正常工作)。
...它将根据使用情况自动设置请求...它还将保持初始容器配置中指定的限制和请求之间的比率。
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Auto"
甚至Horizontal autoscaling,以防您需要单独的实例应用程序(因此管理Pod计数)。
【讨论】: