发生了什么?
如果 InPlacePodVerticalScaling
功能被启用,并且在pod中仅配置了内存资源请求,那么pod状态中将显示内部设置的最小CPU请求:
$ kubectl get pod testpod -o jsonpath='spec: {.spec.containers[0].resources}{"\nallocatedResources: "}{.status.containerStatuses[0].allocatedResources}{"\nstatus: "}{.status.containerStatuses[0].resources}{"\n"}'
spec: {"requests":{"memory":"200Mi"}}
allocatedResources: {"memory":"200Mi"}
status: {"requests":{"cpu":"2m","memory":"200Mi"}}
你预期会发生什么?
最小CPU请求不会显示在pod状态中。
我们如何尽可能精确地重现它?
- 启用
InPlacePodVerticalScaling
功能。 - 创建一个仅配置内存请求的pod:
apiVersion: v1
kind: Pod
metadata:
labels:
run: testpod
name: testpod
spec:
containers:
- image: nginx
name: testpod
resources:
requests:
memory: 200Mi
restartPolicy: Always
- 在pod状态中查看其资源:
$ kubectl get pod testpod -o jsonpath='spec: {.spec.containers[0].resources}{"\nallocatedResources: "}{.status.containerStatuses[0].allocatedResources}{"\nstatus: "}{.status.containerStatuses[0].resources}{"\n"}'
spec: {"requests":{"memory":"200Mi"}}
allocatedResources: {"memory":"200Mi"}
status: {"requests":{"cpu":"2m","memory":"200Mi"}}
我们需要了解其他信息吗?
- 无响应*
Kubernetes版本
$ kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.0
云提供商
N/A
操作系统版本
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here
# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
安装工具
容器运行时(CRI)和版本(如适用)
相关插件(CNI,CSI,...)和版本(如适用)
6条答案
按热度按时间4urapxun1#
如果
InPlacePodVerticalScaling
被禁用,Pod状态中是否会显示内部设置的最低CPU请求?q43xntqr2#
不,除非启用了
InPlacePodVerticalScaling
,否则容器资源不会显示在pod状态中。wmomyfyw3#
在运行时状态中的最低CPU请求导致kubelet内部发生另一个错误。在
kubelet.log
的每个pod resync中记录以下消息:由于未设置的pod规范中的CPU请求被视为零,而运行时状态中的CPU请求是最小值,因此由于差距计算出调整大小的操作:
kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go
第573行
| | desiredCPURequest:=container.Resources.Requests.Cpu().MilliValue() |
kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go
第586行
| | currentCPURequest=kubeContainerStatus.Resources.CPURequest.MilliValue() |
这是在#126388中描述的情况,其中当未配置CPU限制时调整CPU请求。然后,它遇到以下错误:
kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go
第754到758行
| | ifpodResources.CPUQuota==nil||podResources.CPUShares==nil { |
| | klog.ErrorS(nil, "podResources.CPUQuota or podResources.CPUShares is nil", "pod", pod.Name) |
| | result.Fail(fmt.Errorf("podResources.CPUQuota or podResources.CPUShares is nil for pod %s", pod.Name)) |
| | return |
| | } |
vq8itlhq4#
另外提到的问题(#126195 (comment))可能可以通过#120791修复。
v09wglhw5#
这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用
triage/accepted
标签并提供进一步的指导来接受它。组织成员可以通过在评论中写入
/triage accepted
来添加triage/accepted
标签。有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes-sigs/prow仓库提出一个问题。
62lalag46#
/sig node
/assign