容器部署期间"Must specify limits.cpu"错误,即使指定了 CPU 限制



我正在尝试使用OpenShift CLI:运行一个测试pod

$oc run nginx --image=nginx --limits=cpu=2,memory=4Gi
deploymentconfig.apps.openshift.io/nginx created
$oc describe deploymentconfig.apps.openshift.io/nginx
Name:       nginx
Namespace:  myproject
Created:    12 seconds ago
Labels:     run=nginx
Annotations:    <none>
Latest Version: 1
Selector:   run=nginx
Replicas:   1
Triggers:   Config
Strategy:   Rolling
Template:
Pod Template:
Labels:   run=nginx
Containers:
nginx:
Image:  nginx
Port:   <none>
Host Port:  <none>
Limits:
cpu:      2
memory:       4Gi
Environment:    <none>
Mounts:     <none>
Volumes:      <none>
Deployment #1 (latest):
Name:       nginx-1
Created:    12 seconds ago
Status:     New
Replicas:   0 current / 0 desired
Selector:   deployment=nginx-1,deploymentconfig=nginx,run=nginx
Labels:     openshift.io/deployment-config.name=nginx,run=nginx
Pods Status:    0 Running / 0 Waiting / 0 Succeeded / 0 Failed
Events:
Type      Reason          Age         From                Message
----      ------          ----            ----                -------
Normal    DeploymentCreated   12s         deploymentconfig-controller Created new replication controller "nginx-1" for version 1
Warning   FailedCreate        1s (x12 over 12s)   deployer-controller     Error creating deployer pod: pods "nginx-1-deploy" is forbidden: failed quota: quota-svc-myproject: must specify limits.cpu,limits.memory

我得到了";必须指定limites.cpu,limites.memory";错误,尽管两个限制都存在于相同的描述输出中。

可能是什么问题?我该如何解决?

我找到了一个解决方案!

错误消息的一部分是";创建部署程序吊舱时出错;。这意味着问题不在于我的pod,而在于执行我的pod部署的部署器pod。我的项目中的配额似乎也会影响部署程序pod。我找不到用CLI设置部署程序pod限制的方法,所以我做了一个DeploymentConfig。

kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
name: "test-app"
spec:
template: 
metadata:
labels:
name: "test-app"
spec:
containers:
- name: "test-app"
image: "nginxinc/nginx-unprivileged"
resources:
limits:
cpu: "2000m"
memory: "20Gi"
ports:
- containerPort: 8080
protocol: "TCP"
replicas: 1 
selector:
name: "test-app"
triggers:
- type: "ConfigChange" 
- type: "ImageChange" 
imageChangeParams:
automatic: true
containerNames:
- "test-app"
from:
kind: "ImageStreamTag"
name: "nginx-unprivileged:latest"
strategy: 
type: "Rolling"
resources:
limits:
cpu: "2000m"
memory: "20Gi"

您可以看到,这里指定了两组限制:容器和部署策略。

有了这种配置,它工作得很好!

看起来您已经指定了资源配额,并且您为限制指定的值似乎大于该值。你能描述一下资源配额oc describe quota quota-svc-myproject并相应地调整你的配置吗。

一个好的参考可以是https://docs.openshift.com/container-platform/3.11/dev_guide/compute_resources.html

在我的案例中,在将资源配额添加到命名空间后,我看到了类似的错误。若命名空间有配额设置,则配额似乎必须设置为容器。

我通过在从python API创建部署时添加配额来解决这个问题:

resQuota = kube.client.V1ResourceRequirements()
resQuota.limits = {"cpu": "1000m"}
container = kube.client.V1Container(name='your_name', image='your_image', env=envList, resources=resQuota, stdin=True, tty=True)

最新更新