我已经设置了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的更多信息