kubernetes - 使用 Azure AKS 向 pod 请求 CPU 失败
问题描述
我正在使用运行 K8s v1.16.15 的 AKS 集群。
我正在按照这个简单的示例为 pod 分配一些 cpu,但它不起作用。 https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/
为请求应用此 yaml 文件后,
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
如果我尝试 Kubectl describe pod... 我会得到以下信息:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling <unknown> default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
但是 CPU 似乎可用,如果我运行 kubectl top 节点,我会得到:
CPU(cores) CPU% MEMORY(bytes) MEMORY%
702m 36% 4587Mi 100%
也许它与某些 AKS 配置有关,但我可以弄清楚。
你知道发生了什么吗?
非常感谢提前!!
解决方案
前面的答案很好地解释了为什么会发生这种情况。可以添加的是,在调度有请求的 pod 时,您必须了解其他集群对象消耗的资源。系统对象也使用您的资源。即使是小型集群,您也可能启用了一些会消耗节点资源的插件。
所以你的节点有一定数量的 CPU 和内存可以分配给 pod。虽然调度调度程序只会考虑具有足够未分配资源的节点来满足您的所需请求。如果未分配的 CPU 或内存量小于 pod 请求的量,Kubernetes 不会将 pod 调度到该节点,因为节点无法提供 pod 所需的最小量。
如果您描述您的节点,您将看到已经在运行并消耗您的资源的 pod 和所有allocated resources
:
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default elasticsearch-master-0 1 (25%) 1 (25%) 2Gi (13%) 4Gi (27%) 8d
default test-5487d9b57b-4pz8v 0 (0%) 0 (0%) 0 (0%) 0 (0%) 27d
kube-system coredns-66bff467f8-rhbnj 100m (2%) 0 (0%) 70Mi (0%) 170Mi (1%) 35d
kube-system etcd-minikube 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system httpecho 0 (0%) 0 (0%) 0 (0%) 0 (0%) 34d
kube-system ingress-nginx-controller-69ccf5d9d8-rbdf8 100m (2%) 0 (0%) 90Mi (0%) 0 (0%) 34d
kube-system kube-apiserver-minikube 250m (6%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system kube-controller-manager-minikube 200m (5%) 0 (0%) 0 (0%) 0 (0%) 35d
kube-system kube-scheduler-minikube 100m (2%) 0 (0%) 0 (0%) 0 (0%) 35d
kube-system traefik-ingress-controller-78b4959fdf-8kp5k 0 (0%) 0 (0%) 0 (0%) 0 (0%) 34d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1750m (43%) 1 (25%)
memory 2208Mi (14%) 4266Mi (28%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
现在最重要的部分是你可以做些什么:
- 您可以启用自动缩放,以便系统自动配置节点和额外需要的资源。这当然假设您用完了资源并且需要更多资源
- 您可以自己配置适当的节点(取决于您如何引导集群)
- 关闭任何可能占用您不需要的所需资源的附加服务
推荐阅读
- api - Zephyr for Jira 使用 API 创建测试
- flutter - 配置 Flutter 进行 Web 开发时,“连接的设备”上不会出现“Web 服务器”
- flutter - 无法从 Firestore Flutter 中检索数据
- google-bigquery - 从 Google Ads 到 BigQuery 的转移服务问题
- dotcms - 谁能确定这段代码是什么语言?
- javascript - 在 HTML 中使用 js 文件作为 cdn
- python - 用不等式 astropy 混合建模约束参数
- android-studio - Android Studio 多平台项目的 commonMain 中的 ktor 依赖项在 IDE 中未解决,但代码运行
- flutter - 我正在寻找类似颤动的导航栏,如果你知道,请指导我
- python-venv - 使用整个 venv 复制文件夹后的 pip 列表