在 Kubernetes (K8S) 中,镜像的更新策略主要由 imagePullPolicy
参数控制。当 Pod 中的容器镜像需要更新时,Kubernetes 会根据这个策略决定如何处理镜像的拉取行为。imagePullPolicy
是 Pod 规范的一部分,它影响着容器镜像的拉取方式。以下是 Kubernetes 支持的三种镜像拉取策略:
- Always:
- 描述: 每次创建 Pod 或者重启容器时,kubelet 都会尝试从镜像仓库拉取最新的镜像版本。
- 适用场景: 对于使用
latest
标签的镜像或者希望总是获取最新镜像内容的场景非常有用。 - 示例:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-repo/my-image:latest imagePullPolicy: Always
- IfNotPresent:
- 描述: 先检查本地是否有该镜像,如果有就使用本地镜像;如果没有,则从远程仓库拉取。
- 适用场景: 对于有明确版本标签的镜像,推荐使用此策略,因为它可以在首次部署后减少网络流量。
- 默认值: 当镜像标签不是
latest
时,默认就是使用此策略。 - 示例:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-repo/my-image:v1 imagePullPolicy: IfNotPresent
- Never:
- 描述: 禁止从仓库中下载镜像,也就是说只能使用本地镜像。
- 适用场景: 当你确定镜像已经在所有节点上可用时,可以使用此策略来避免不必要的网络传输。
- 注意事项: 如果镜像不存在于本地,容器启动会失败。
- 示例:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-repo/my-image:v1 imagePullPolicy: Never