在私人仓库上使用kubernetes init容器

时间:2017-02-25 22:18:28

标签: kubernetes

我一直在尝试使用私有init容器映像运行部署但收效甚微,我总是收到此错误:

Failed to pull image "private/app": Error: image private/app:latest not found
Error syncing pod, skipping: failed to "StartContainer" for "app" with ErrImagePull: "Error: image private/app:latest not found"

这是我的部署:

"kind": "Deployment"
"apiVersion": "extensions/v1beta1"
"metadata":
  "name": "tomcat"
  "creationTimestamp": null
"spec":
  "replicas": 1
  "template":
    "metadata":
      "creationTimestamp": null
      "labels":
        "service": "tomcat"
      "annotations":
        "pod.beta.kubernetes.io/init-containers": '[
          {
            "name": "app",
            "image": "private/app",
            "imagePullPolicy": "IfNotPresent"
          }
        ]'
    "spec":
      "containers":
        - "name": "tomcat"
          "image": "private/tomcat"
          "ports":
            - "containerPort": 8080
              "protocol": "TCP"
      "imagePullSecrets":
        - "name": "my-secret"
      "restartPolicy": "Always"
  "strategy": {}
"status": {}

我也尝试了这里建议的更改kubernetes init containers using a private repo

"pod.beta.kubernetes.io/init-containers": '[
  {
    "name": "app",
    "image": "private/app",
    "imagePullPolicy": "IfNotPresent",
    "imagePullSecrets": [
      {
        "name": "my-secret"
      }
    ]
  }
]'

但仍然没有...

请注意,我在没有init容器的情况下测试了此部署,并且图像提取成功。

另请注意,这是我实际配置的简化版本,在实际配置中,容器和一些env变量都有卷装。

如何为init-container配置“imagePullSecrets”?

修改 我在kubernetes slack频道询问,似乎我忘了给集群docker用户(CI docker用户,如果你愿意)授予对这个集线器存储库的权限,一旦我这样做,init容器上的“imagePullPolicy”是多余的,“模板”上的那个> “spec”就够了。

感谢@koki,无论你在哪里。

3 个答案:

答案 0 :(得分:0)

您应该使用secret对象。

类似的东西:

  kubectl create secret docker-registry myregistry \
  --docker-server=https://example.io \
  --docker-username=foo \
  --docker-password=boosecret \
  --docker-email=example@boo.com

并使用它,在这样的另一个对象中:

  imagePullSecrets:
  - name: myregistry

答案 1 :(得分:0)

所以我是那个问你引用的其他问题的人。这是使用你的示例我的init部分的样子。这对你不起作用?

   "pod.beta.kubernetes.io/init-containers": '[
  {
    "name": "app",
    "image": "private/app",
    "imagePullPolicy": "IfNotPresent",
    "imagePullSecrets": "my-secret"
  }
]'

答案 2 :(得分:0)

我仍然不能拉私人的initContainers。

在我的情况下,我正在向mongodb图表添加一个initContainer。

当我将imagePullSecrets:添加到我得到的initContainer中时。

error: error validating "/helm.txt": error validating data: ValidationError(Deployment.spec.template.spec.initContainers[0]): unknown field "imagePullSecrets" in io.k8s.api.core.v1.Container; if you choose to ignore these errors, turn validation off with --validate=false