我设置了一个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:从不”时,该值现在应该为从不(并且不是始终)。
非常感谢您的帮助!
答案 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的更多信息