为什么不能在Kubernetes中将imagePullPolicy更改为Always以外的其他内容

时间:2019-04-03 08:46:30

标签: kubernetes cloud

我设置了一个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 /来自文本的消息:

"spec":{"containers":[{"image":"<name>","imagePullPolicy":"Always","name":"<name>","

所以我的问题是:尽管在我的.yaml文件中将imagePullPolicy设置为Never,但为什么此imagePullPolicy始终显示为值(当然已使用)? 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:从不”时,该值现在应该为从不(并且不是始终)。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

欢迎使用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

请阅读有关使用准入控制器here的更多信息