我正在尝试使用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)