【问题标题】:Using kubernetes init containers on a private repo在私有 repo 上使用 kubernetes init 容器
【发布时间】:2017-02-25 22:18:28
【问题描述】:

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

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容器的情况下测试了这个部署,并且图像拉取成功。

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

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

编辑: 我在 kubernetes slack 频道中四处询问,似乎我忘记授予集群 docker 用户(如果你愿意的话是 CI docker 用户)权限,一旦我这样做了 init 容器上的“imagePullPolicy”是多余的,“模板”>“规范”上的那个就够了。

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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您应该使用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
    

    【讨论】:

    • 感谢您的回复,我一直在尝试在我的部署中使用“imagePullSecrets”,它适用于“规范”部分中描述的容器,但不适用于“注释”中的 init-containers “ 部分。此外,“imagePullSecrets”属性接受“LocalObjectReference”的 array,如下所述:link 而不是 object。
    【解决方案2】:

    所以我是问你提到的另一个问题的人。这是使用您的示例我的初始化部分的样子。这对你不起作用?

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

    【讨论】:

    • 我用我的问题的解决方案编辑了我的问题,谢谢你的回答!
    【解决方案3】:

    我仍然无法提取私有 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
    

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 2019-08-15
      • 2018-09-09
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多