0

我使用 POD yaml 文件在 Kubernetes 中创建一个 pod。

我的 yaml 文件很简单,如下所示:

kind: Pod
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true

但我收到此错误消息:

nodes are available: 33 node(s) didn't match node selector.

我在 Jenkins 管道中运行这个 pod 文件,以便可以安装 Kaniko 来构建 docker 映像。

任何解决方案?

4

2 回答 2

1

您的 YAML 文件中缺少几个必需的密钥。

  1. apiVersionkey - Pod 的 api 版本目前是v1
  2. metadatakey - 有助于唯一标识对象的数据,包括name字符串UID、 和可选的namespace

您可以在 Kubernetes文档中阅读有关创建静态 pod 的更多信息,如果您想要 kaniko pod 的一些示例,可以在此处找到它们。

因此,最小正确的 pod YAML 应该如下所示:

kind: Pod
apiVersion: v1
metadata:
  # specify your pod name
  name: <pod-name>
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true

解决问题:您可以使用nodeSelector密钥分配哪个 pod 应该在哪个节点上运行。您需要在 下指定它spec。例如:

spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true
  #here it is
  nodeSelector:
    # and here is node label
    <label-name>: <label-value>

你可以找到你的节点标签

kubectl describe node <node-name>

或为其添加标签

kubectl label node <node-name> <label-name>=<label-value>

您可以在docs中找到更多相关信息。

于 2021-04-27T09:07:04.987 回答
0

你可以试试这个作为一个例子:

pipeline {
  agent {
    kubernetes {
      yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    jenkins: worker
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug
    command: ["/busybox/cat"]
    tty: true
    volumeMounts:
      - name: dockercred
        mountPath: /root/.docker/
  volumes:
  - name: dockercred
    secret:
      secretName: dockercred
"""
    }
  }
  stages {
    stage('Stage 1: Build with Kaniko') {
      steps {
        container('kaniko') {
          sh '/kaniko/executor --context=git://github.com/repository/project.git \
                  --destination=repository/image:tag \
                  --insecure \
                  --skip-tls-verify  \
                  -v=debug'
        }
      }
    }  
  }
}

I mount 是 Kaniko 使用的secretdocker 凭据。

于 2021-05-03T14:27:05.367 回答