目录
- 1. 说明
- 2. Always
- 3. IfNotPresent
- 4. Never
- 5. OnFailure(Kubernetes 1.19 引入,Beta 特性)
- 6. 默认策略
- 7. 配置示例
- 8. 最佳实践
- 9. 注意事项
1. 说明
- 1.在 Kubernetes 中,Pod 拉取镜像的策略由 imagePullPolicy 字段控制,该字段决定了在启动或重启容器时是否从镜像仓库拉取新的镜像版本。
2. Always
- 1.描述:无论本地是否存在该镜像,总是尝试从远程仓库拉取最新的镜像。
- 2.使用场景:
开发或测试环境,需要确保每次启动容器时都使用最新的镜像。
持续集成和持续部署(CI/CD)流程中,需要频繁更新镜像。 - 3.注意事项:使用 latest 标签时,默认策略为 Always。这可能导致镜像版本不一致或潜在的不稳定,因此在生产环境中应谨慎使用。
3. IfNotPresent
- 1.描述:如果本地没有该镜像,则从远程仓库拉取;如果本地已经存在同名的镜像,则直接使用本地镜像,不会尝试拉取更新。
- 2.使用场景:
生产环境,减少网络流量,提升启动速度。
镜像版本稳定,不需要频繁更新。 - 3.注意事项:这是 Kubernetes 的默认拉取策略。对于带有明确版本标签(如 v1.0)的镜像,推荐使用此策略。
4. Never
- 1.描述:永远不会尝试从远程仓库拉取镜像,总是使用本地镜像。如果本地没有该镜像,容器创建将失败。
- 2.使用场景:
离线环境,所有镜像都已提前下载。
确保容器使用的是本地已有的镜像,避免自动升级。 - 3.注意事项:使用此策略时,需要确保所有节点上都有所需的镜像。
5. OnFailure(Kubernetes 1.19 引入,Beta 特性)
- 1.描述:如果本地镜像存在,首先尝试使用本地镜像启动容器。如果容器启动失败(例如,因为镜像损坏或不兼容),则尝试从远程仓库拉取镜像。
- 2.使用场景:希望减少网络请求,但同时希望在本地镜像存在问题时能够回退到远程镜像。
6. 默认策略
- 1.如果省略了 imagePullPolicy 字段:
容器镜像的标签是 latest 时,默认策略为 Always。
容器镜像的标签是非 latest 时,默认策略为 IfNotPresent。
7. 配置示例
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
imagePullPolicy: Always # 可选值:Always、IfNotPresent、Never
ports:
- containerPort: 80
8. 最佳实践
- 1.生产环境:
避免使用 latest 标签,使用明确的版本号(如 v1.0.1)来确保一致性。
推荐使用 IfNotPresent 策略,以减少不必要的镜像拉取。 - 2.开发环境:
使用 Always 策略,确保每次启动容器时都使用最新的镜像。 - 3.离线环境:
使用 Never 策略,确保容器只使用本地镜像。
9. 注意事项
- 1.如果使用私有镜像仓库或需要身份验证,请确保正确配置了镜像仓库的身份验证信息。
- 2.对于需要定期更新的容器镜像,可以考虑使用定时任务或 CI/CD 流水线来自动更新镜像,并触发 Kubernetes 重新创建容器。