Kubernetes pod将不会启动,因为;没有与以下所有谓词匹配的节点可用::cpu不足“;

Kubernetes pod将不会启动,因为;没有与以下所有谓词匹配的节点可用::cpu不足“;,kubernetes,Kubernetes,我不确定为什么会出现错误没有与以下所有谓词匹配的节点可用::cpu不足(1) 我不记得设置过任何CPU限制。除非这是某种默认情况 kubectl-wordpress的输出: Name: wordpress-114465096-bn4rv Namespace: default Node: / Labels: app=wordpress pod-template-hash=114465096 Annotations: kubernetes.io

我不确定为什么会出现错误
没有与以下所有谓词匹配的节点可用::cpu不足(1)

我不记得设置过任何CPU限制。除非这是某种默认情况

kubectl-wordpress的输出:

Name:       wordpress-114465096-bn4rv
Namespace:  default
Node:       /
Labels:     app=wordpress
        pod-template-hash=114465096
Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"wordpress-114465096","uid":"fff460df-7c4c-11e7-b3fd-42010a840026...
        kubernetes.io/limit-ranger=LimitRanger plugin set: cpu request for container wordpress; cpu request for container cloudsql-proxy; cpu request for container nginx
Status:     Pending
IP:     
Controllers:    ReplicaSet/wordpress-114465096
Containers:
  wordpress:
    Image:  wordpress:latest
    Port:   
    Requests:
      cpu:  100m
    Environment:
      WORDPRESS_HOST:       localhost
      WORDPRESS_DB_USERNAME:    <set to the key 'username' in secret 'cloudsql-db-credentials'> Optional: false
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ql6k8 (ro)
      /var/www/html from wordpress-persistent-storage (rw)
  cloudsql-proxy:
    Image:  gcr.io/cloudsql-docker/gce-proxy:1.09
    Port:   
    Command:
      /cloud_sql_proxy
      --dir=/cloudsql
      -instances=inspiring-tower-99712:europe-west1:wordpressdb=tcp:3306
      -credential_file=/secrets/cloudsql/credentials.json
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /cloudsql from cloudsql (rw)
      /etc/ssl/certs from ssl-certs (rw)
      /secrets/cloudsql from cloudsql-instance-credentials (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ql6k8 (ro)
  nginx:
    Image:  nginx:latest
    Port:   80/TCP
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ql6k8 (ro)
Conditions:
  Type      Status
  PodScheduled  False 
Volumes:
  wordpress-persistent-storage:
    Type:   GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
    PDName: wordpress-disk
    FSType: ext4
    Partition:  0
    ReadOnly:   false
  cloudsql-instance-credentials:
    Type:   Secret (a volume populated by a Secret)
    SecretName: cloudsql-instance-credentials
    Optional:   false
  ssl-certs:
    Type:   HostPath (bare host directory volume)
    Path:   /etc/ssl/certs
  cloudsql:
    Type:   EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium: 
  default-token-ql6k8:
    Type:   Secret (a volume populated by a Secret)
    SecretName: default-token-ql6k8
    Optional:   false
QoS Class:  Burstable
Node-Selectors: <none>
Tolerations:    node.alpha.kubernetes.io/notReady=:Exists:NoExecute for 300s
        node.alpha.kubernetes.io/unreachable=:Exists:NoExecute for 300s
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  1h        22s     265 default-scheduler           Warning     FailedScheduling    No nodes are available that match all of the following predicates:: Insufficient cpu (1).
配置文件(production.yaml):


这个错误是不言自明的,您需要300m(pod中的每个容器100m)的cpu,而您的节点没有预算来安排它。(您似乎只有一个节点群集?)

您可以描述该节点以查看已经调度了多少cpu时间


我不确定是什么将这些请求添加到您的部署中,因为您没有在模板中说明这些需求。可能是资源配额。

除了配置中指定的容器外,还有其他容器在运行。默认情况下,它们由Kubernetes配置,并在默认命名空间中未显示的
kube系统
命名空间中运行

您可以通过
kubectl get pods--all namespace
查看所有pod

这些额外的容器占用了单节点CPU配额的72%

因此,cpu配额为10%的3个容器将超过cpu配额的100%(因为72%+(3*10)>100%)

至于为什么72%的集装箱被分配给其他集装箱,这里有一个问题:

可能有用的其他资源:



但是,通过向集群添加额外的节点,我能够让容器在有足够CPU的情况下运行。此外,高cpu实例在谷歌云上的分配效率似乎更高。

我也遇到了同样的错误,但我创建了一个只有一个节点的集群。因此,我使用以下命令用最小和最大节点数更新了集群:

gcloud container clusters update <mycluster-name> --enable-autoscaling --min-nodes=1 --max-nodes=15
gcloud容器集群更新--启用自动缩放--最小节点=1--最大节点=15

就在下一刻,吊舱/吊舱的状态从挂起变为运行

是的,它目前是一个单节点集群。这些四行诗放在哪里?单个节点有多少“m”?我应该咨询哪些资源/文档?我通过更新部署配置(通过
kubectl apply-f production.yaml
)得到错误。
kubectl descripe节点将在节点上运行cpu。我相信1CPU=1000m。表达式0.1相当于表达式100m。这里有更多的细节。我在配置中只有3个容器,我假设这意味着0.3CPU,但是仍然有一些内置容器在运行。至于为什么它们被分配了我节点的70%——这是另一个问题。。。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      terminationGracePeriodSeconds: 30
      containers:
        - image: wordpress:latest
          name: wordpress
          imagePullPolicy: "Always"
          env:
            - name: WORDPRESS_HOST
              value: localhost
            - name: WORDPRESS_DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: cloudsql-db-credentials
                  key: username
          volumeMounts:
            - name: wordpress-persistent-storage
              mountPath: /var/www/html
        - image: nginx:latest
          name: nginx
          ports:
            - containerPort: 80
              name: nginx
        - image: gcr.io/cloudsql-docker/gce-proxy:1.09
          name: cloudsql-proxy
          command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                    "-instances=inspiring-tower-99712:europe-west1:wordpressdb=tcp:3306",
                    "-credential_file=/secrets/cloudsql/credentials.json"]
          volumeMounts:
            - name: cloudsql-instance-credentials
              mountPath: /secrets/cloudsql
              readOnly: true
            - name: ssl-certs
              mountPath: /etc/ssl/certs
            - name: cloudsql
              mountPath: /cloudsql
      volumes:
        - name: wordpress-persistent-storage
          gcePersistentDisk:
            pdName: wordpress-disk
            fsType: ext4

        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir:
gcloud container clusters update <mycluster-name> --enable-autoscaling --min-nodes=1 --max-nodes=15