k8s镜像拉取方式选择-imagePullPolicy

镜像拉取方式选择

默认镜像拉取策略
当你(或控制器)向 API 服务器提交一个新的 Pod 时,你的集群会在满足特定条件时设置 imagePullPolicy 字段:

如果你省略了 imagePullPolicy 字段,并且你为容器镜像指定了摘要, 那么 imagePullPolicy 会自动设置为 IfNotPresent。
如果你省略了 imagePullPolicy 字段,并且容器镜像的标签是 :latest, imagePullPolicy 会自动设置为 Always。
如果你省略了 imagePullPolicy 字段,并且没有指定容器镜像的标签, imagePullPolicy 会自动设置为 Always。
如果你省略了 imagePullPolicy 字段,并且为容器镜像指定了非 :latest 的标签, imagePullPolicy 就会自动设置为 IfNotPresent。

说明:
容器的 imagePullPolicy 的值总是在对象初次 创建 时设置的, 如果后来镜像的标签或摘要发生变化,则不会更新。

例如,如果你用一个 非 :latest 的镜像标签创建一个 Deployment, 并在随后更新该 Deployment 的镜像标签为 :latest,
则 imagePullPolicy 字段 不会 变成 Always。 你必须手动更改已经创建的资源的拉取策略。

https://kubernetes.io/zh-cn/docs/concepts/containers/images/#image-pull-policy
官方文档:https://kubernetes.io/docs/concepts/containers/images/

k8s-imagePullPolicy

  containers:
    - name: uses-private-image
      image: $PRIVATE_IMAGE_NAME
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]

k8s的配置文件中经常看到有imagePullPolicy属性,这个属性是描述镜像的拉取策略

Always 总是拉取镜像

IfNotPresent 本地有则使用本地镜像,不拉取

Never 只使用本地镜像,从不拉取,即使本地没有

如果省略imagePullPolicy  策略为always 
### Kubernetes 容器镜像策略 #### 配置方法 在 Kubernetes 中,`imagePullPolicy` 是用于定义如何以及何时应该从镜像仓库中获容器镜像的关键字段。此字段可以被设置为三个不同的值之一: - `Always`: 这种情况下,在每次创建 Pod 的时候都会尝试从指定的镜像库下载最新版本的镜像,即使当前节点上已经有了相同标签(tag)的镜像副本[^3]。 - `IfNotPresent`: 当前节点如果没有找到所需镜像时将会执行一次网络请求来加载它;但如果本地已经有匹配的镜像,则直接使用而不做额外操作[^4]。 - `Never`: 只会在本机文件系统内查找特定名称和标签组合下的 Docker 镜像实例,并且绝不会发起任何外部访问以检索数据。这意味着如果所期望的镜像不在宿主机上预先存在的话,那么关联的应用程序就无法正常运行起来。 对于大多数生产环境中推荐的做法通常是采用 `IfNotPresent` 或者 `Always` 方案,具体决于团队的工作流程和技术栈需求。前者适合于那些频繁构建新版本但又不想每次都强制刷新缓存的情况;后者则更适合追求绝对一致性的场景下工作,比如 CI/CD 流水线中的集成测试环节或是多数据中心之间的同步部署任务。 为了实现这些配置选项,可以在编写 YAML 文件描述服务或作业对象的时候显式指明相应的属性名及其对应的设定值。下面给出了一段简单的例子用来展示怎样声明一个带有自定义政策的服务单元: ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: nginx-container image: nginx:latest imagePullPolicy: IfNotPresent # 设置镜像策略 ``` 这段代码片段展示了如何在一个名为 `example-pod` 的 Pod 资源定义里加入了一个 Nginx Web Server 实例的同时也为其设置了仅当缺少目标镜像才去抓的新规。 #### 最佳实践 选择合适的镜像策略能够帮助优化集群性能并减少不必要的带宽消耗。通常建议遵循以下几个原则: - 对于开发环境或者经常更新的小型项目来说,可以选择 `Always` 来确保总是获得最新的变更成果。 - 生产级别的应用程序倾向于利用 `IfNotPresent` ,因为它既能在首次安装期间快速填充必要的依赖关系,又能避免后续重复传输已知良好的组件。 - 如果确实有必要完全隔离对外部资源的需求(例如出于安全考虑),那么可以考虑将某些关键基础设施组件标记为 `Never` 并提前准备好所有必需品。 另外值得注意的是,无论选择了哪种方式都应当定期审查现有做法是否仍然满足业务发展的实际状况变化,必要时做出适当调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值