如何使用私有 docker 注册表定义 Kubernetes 作业?

How to define Kubernetes Job using a private docker registry?

我有一个简单的 Kubernetes 作业(基于 http://kubernetes.io/docs/user-guide/jobs/work-queue-2/ 示例),它使用 Docker 图像,我已将其作为 public 图像放置在我的 dockerhub 帐户中。一切都是这样的:

job.yaml:

apiVersion: batch/v1
kind: Job
metadata:
  name: job-wq-2
spec:
  parallelism: 2
  template:
    metadata:
      name: job-wq-2
    spec:
      containers:
      - name: c
        image: jonalv/job-wq-2
      restartPolicy: OnFailure

现在我想尝试使用需要身份验证的私有 Docker 注册表,如:

docker login https://myregistry.com

但是我找不到任何关于如何将用户名和密码添加到 job.yaml 文件的信息。它是怎么做到的?

您需要使用ImagePullSecrets

创建秘密对象后,您可以在 pod 规范中引用它(spec 值是 containers 的父级:

apiVersion: batch/v1
kind: Job
metadata:
  name: job-wq-2
spec:
  parallelism: 2
  template:
    metadata:
      name: job-wq-2
    spec:
      imagePullSecrets:
      - name: myregistrykey
      containers:
      - name: c
        image: jonalv/job-wq-2
      restartPolicy: OnFailure

当然,您必须创建密钥(根据文档)。这就是它的样子:

apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
  namespace: mynamespace
data:
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

.dockerconfigjson 的值是此文件的 base64 编码:.docker/config.json.

关键点:一个job spec包含一个pod spec。因此,您获得的有关 pod 规格的任何知识也可以应用于工作。