我已经设置了kubernetes集群,我想使用本地镜像。我已经配置了.yaml文件,使其包含(在容器-> image -section中)“imagePullPolicy:从不”,如下所示:

spec:
      containers:
      - image: <name>:<version>
        name: <name>
        imagePullPolicy: Never
        resources: {}
      restartPolicy: Always

我已将此服务部署到kubernetes,但是无法拉出图像(使用kubectl get pod查看pod时出现ImagePullBackOff-错误),因为无法从Internet /注册表中找到图像,并且由于某些未知原因imagePullPolicy处于Always-value中。这可以在例如来自/ var / log / messages来自文本:
"spec":{"containers":[{"image":"<name>","imagePullPolicy":"Always","name":"<name>","

所以我的问题是:为什么尽管在我的.yaml文件中将imagePullPolicy设置为Never,但为什么此imagePullPolicy在Always-value中仍然有效? imagePullPolicy是否有一些默认值可以覆盖.yaml文件中描述的值?

我的环境是Centos7,我正在使用Kontena Pharos 2.2.0(例如使用docker 1.13.1(Apache License 2.0)和kubernetes 1.13.2(Apache License 2.0))。

我希望当我在.yaml文件中设置“imagePullPolicy:Never”时,该值现在应为Never(而不是Always)。

非常感谢您的帮助!

最佳答案

欢迎使用StackOverflow。

发生这种情况是因为您的Kubernetes集群大概已在api服务器中启用了称为“AlwaysPullImages”的准入控制插件,该角色是在将对象存储到Kubernetes数据存储-etcd中之前对其进行覆盖(变异)。

自v2.0.0-alpha.2版以来,这是使用Kontena Pharos引导的群集的默认行为。

您可以在主cluster.yml配置文件中禁用此准入插件:

...
addons:
  ingress-nginx:
    enabled: true

admission_plugins:
  - name: AlwaysPullImages
    enabled: false
...

如果未在本地注册表上找到镜像,则应该期望看到POD失败,并显示不同的状态原因:
client-deployment-99699599d-lfqmr    0/1     ErrImageNeverPull   0          42s

请阅读有关使用Admission Controllers here的更多信息

08-28 13:54