Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?

Kubernetes集群里,拉取容器镜像是一个非常关键的步骤。这些镜像包含了应用程序及其所有需要的依赖项,Kubernetes通过拉取这些镜像来启动Pod中的容器。为了提升集群的稳定性、速度和安全性,Kubernetes提供了几种不同的镜像拉取策略。这篇文章会详细解释这些策略以及如何配置它们,帮助你在不同情况下做出最佳选择。

什么是容器拉取策略?

容器拉取策略Image Pull PolicyKubernetes中的一种配置选项,决定了容器镜像在启动时是否需要从镜像仓库拉取,以及如何管理和更新镜像版本。拉取策略控制 Kubernetes 在调度 Pod 时是否重新拉取镜像。

Kubernetes中的拉取策略

我们可以通过以下命令查看 kubernetes支持那几种拉取策略。

kubectl explain pod.spec.containers.imagePullPolicy

从上面的结果可以看出,Kubernetes 支持三种策略,每种策略适用于不同的使用场景。

Alawys

如果你把容器的imagePullPolicy设成Always,那么每次创建Pod 或者重启容器的时候kubelet都会去镜像仓库拉取最新的镜像。它会对比本地和远程仓库的镜像摘要,确保你用的是最新的版本。

使用场景
  • 开发环境:在开发过程中,我们经常需要快速迭代和更新镜像,使用 Always 可以确保每次启动容器时都能拉取到最新的镜像。

  • 测试环境:在自动化测试中,拉取最新镜像可以确保每次测试时都使用的是最新的镜像版本。

案例演示:

现在部署一个简单的Pod,yaml文件内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: simple-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
      imagePullPolicy: Always
      ports:
        - containerPort: 80

在执行这个yaml文件之前,我们先查看一下本地是否存在这个镜像,结果如下:

controlplane $ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

这时执行会从远端仓库拉取镜像到本地进行启动Pod。

IfNotPresent:

当拉取策略设置为 IfNotPresent 时,Kubernetes 只有在本地节点上没有该镜像时,才会去远程镜像仓库拉取镜像。如果节点上已经存在该镜像,则不会再次拉取,直接使用本地镜像。

使用场景
  • 生产环境:为了提高启动速度并减少带宽消耗,IfNotPresent 是一种较为常见的选择。如果你已经确保容器镜像是经过验证和测试的,并且不会频繁更改,那么这个策略就很合适。

  • 节点具有高效的镜像缓存时,IfNotPresent 可以避免重复拉取镜像,减少网络压力。

案例演示

修改上述的yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: simple-pod
spec:
  containers:
    - name: nginx-container
      image: nginx
      imagePullPolicy: IfNotPresent 
      ports:
        - containerPort: 80

删除之前创建的Pod,然后在重新执行创建命令,结果如下:

通过上述的日志可以看到该镜像已经存在这台机器上,所以,没有向远端仓库进行拉取。

Never

当拉取策略设置为 Never 时,Kubernetes无论如何都不会从镜像仓库拉取镜像。如果节点本地没有该镜像,容器启动将失败。此策略通常用于确保容器使用的是本地已有的镜像。

使用场景
  • 本地镜像部署:如果你已经手动将镜像拉取到本地,并希望避免 Kubernetes再次去远程拉取,Never 策略可以避免不必要的拉取操作。

  • 离线环境:在一些没有外网的离线环境中,所有的镜像都已经提前下载,使用 Never 可以确保容器启动时不进行拉取操作。

案例演示

我们通过docker search查询远端仓库存在的镜像。如下图:

把上述yaml进行修改,把nginx镜像修改成bitnami/nginx,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: simple-pod
spec:
  containers:
    - name: bitnami-nginx
      image: bitnami/nginx
      imagePullPolicy: Never 
      ports:
        - containerPort: 80

执行创建命令,结果如下:

通过上述日志可以看到这个pod部署失败,原因是本地不存在这个镜像,由于配置了Never拉取策略,所以,不会在远端仓库拉取的。

小结

Kubernetes 提供了三种镜像拉取策略:AlwaysIfNotPresentNever。根据应用场景的不同,用户可以选择适合的策略,以平衡镜像拉取的频率、网络带宽和镜像更新的需求。在生产环境中,通常推荐使用 IfNotPresent 策略,而在开发环境中,Always 策略则更为常见。

推荐阅读


  • ncdu:Linux磁盘分析的利器,你值得拥有

  • Linux磁盘爆满?别慌!这几个命令轻松搞定

  • fnOS搭建音乐服务Navidrome

  • 命令行的视觉盛宴:如何用Sampler轻松实现数据可视化

  • 别再手动编码了!发现这个一键生成K8S YAML的神器!

  • 轻松搭建RustDesk,畅享远程办公新体验


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【碳库】双碳目标下农田温室气体排放估算与模拟(从碳库模拟、机器学习方法、生命周期评价法(LCA)、经验模型和过程模型多个维度)

生态与农业是甲烷(CH4)、氧化亚氮(N2O)和二氧化碳(CO2)等温室气体的主要排放源,占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主,如何对农田温室气体进…

[计算机网络]OSPF协议

开放最短路径优先OSPF 1)OSPF的工作方式 1>和谁交换消息 使用洪泛法,向本自治系统的所有路由器发送消息。 2>交换什么消息 发送的消息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。 链路状态就是说…

mysql进阶

存储引擎 MySQL体系结构: 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作: -- 查询建表语句 show create table ac…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题: 从今年开始,不知道咋回事,电脑上的Unity2017像是变了个人似得,突然特别爱闪退掉,有时候还次次闪退,真是让人无语,一直以来我都怀疑是不是电脑上安装了什么别的软件了,导致…

linux系统上SQLPLUS的重“大”发现

SQL plus版本: [oraclepg-xc2 ~]$ sqlplus -v SQL*Plus: Release 19.0.0.0.0 - Production Version 19.3.0.0.0 操作系统:CentOS Linux 7 (Core) 数据库:Oracle 19c Version 19.3.0.0.0 同样的SQL脚本在windos CMD sqlplus 执行没问题。…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…

js-000000000000

1、js书写的位置 - 内部 <body> <!-- 习惯把 js 放到 /body 的后面 --> <script> console.log(这是内部 js 的书写位置) alert(内部js) </script> </body> <body><!-- 习惯把 js 放到 /body 的后面 --><script>console.log(这…

Android笔记(四十):ViewPager2嵌套RecyclerView滑动冲突进一步解决

背景 ViewPager2内嵌套横向滑动的RecyclerView&#xff0c;会有滑动冲突的情况&#xff0c;引入官方提供的NestedScrollableHost类可以解决冲突问题&#xff0c;但是有一些瑕疵&#xff0c;滑动横向RecyclerView到顶部&#xff0c;按住它不放手继续往左拖再往右拖&#xff0c;这…

Taro小程序开发性能优化实践

我们团队在利用Taro进行秒送频道小程序的同时&#xff0c;一直在探索性能优化的最佳实践。随着需求的不断迭代&#xff0c;项目中的性能问题难免日积月累&#xff0c;逐渐暴露出来影响用户体验。适逢双十一大促&#xff0c;我们趁着这个机会统一进行了Taro性能优化实践&#xf…

jangow-01-1.0.1靶机

靶机 ip&#xff1a;192.168.152.155 把靶机的网络模式调成和攻击机kali一样的网络模式&#xff0c;我的kali是NAT模式, 在系统启动时(长按shift键)直到显示以下界面 ,我们选第二个&#xff0c;按回车。 继续选择第二个&#xff0c;这次按 e 进入编辑页面 接下来&#xff0c;…

03.HTTPS的实现原理-HTTPS的工作流程

03.HTTPS的实现原理-HTTPS的工作流程 简介1. HTTPS的工作流程1.1. TCP的工作流程1.1.1. 三次握手的详细步骤1.1.2. 三次握手的作用 1.2. HTTPS的工作流程1.2.1. HTTPS与TCP的关系1.2.2. HTTPS的工作流程 2. 公钥和私钥的作用3. 对称密钥的生成和交换4. 对称加密和非对称加密的区…

阿里云人工智能ACA(五)——深度学习基础

一、深度学习概述 1. 深度学习概念 1-1. 深度学习基本概念 深度学习是机器学习的一个分支基于人工神经网络&#xff08;模仿人脑结构&#xff09;通过多层网络自动学习特征能够处理复杂的模式识别问题 1-2. 深度学习的优点与缺点 优点 强大的特征学习能力可以处理复杂问题…

MySQL和HBase的对比

Mysql &#xff1a;关系型数据库&#xff0c;主要面向 OLTP &#xff0c;支持事务&#xff0c;支持二级索引&#xff0c;支持 sql &#xff0c;支持主从、 Group Replication 架构模型&#xff08;此处以 Innodb 为例&#xff0c;不涉及别的存储引擎&#xff09;。 HBase &am…

Ftrans数据摆渡系统 搭建安全便捷跨网文件传输通道

一、专业数据摆渡系统对企业的意义 专业的数据摆渡系统对企业具有重要意义&#xff0c;主要体现在以下几个方面‌&#xff1a; 1、‌数据安全性‌&#xff1a;数据摆渡系统通过加密传输、访问控制和审计日志等功能&#xff0c;确保数据在传输和存储过程中的安全性。 2、‌高…

FPGA的DMA应用——pcileech

硬件通过pcie总线&#xff0c;访存本机的内存&#xff0c;并进行修改&#xff0c;可以进行很多操作。 学习视频&#xff1a;乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址&#xff1a;AMD-Xilinx Vivado™ 2024.1 现…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络&#xff1a;引领未来通信新潮流 &#xff08;一&#xff09;5G 网络的特点 高速率&#xff1a;5G 依托良好技术架构&#xff0c;提供更高的网络速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下载速度最高达 10Gbps。相比 4G 网络&#xff0c;5G 的基站速度…

一种寻路的应用

应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节&#xff1a; 全国的长途车车站的数据的更新&#xff1a; …

STL格式转换为GLTF格式

STL与GLTF格式简介 STL格式 STL&#xff08;Stereo Lithography&#xff09;文件是一种广泛使用的3D打印文件格式&#xff0c;由3D Systems公司开发。它主要用于存储三维物体的几何信息&#xff0c;常用于立体光刻等3D打印技术。STL文件通常只包含物体的表面几何形状&#xf…

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;1&#xff09; 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点&#xff0c;并基于Argo搭建一套完整的DevOps CI/CD服务平台&#xff0c;包括Argo CD…

数据结构经典算法总复习(下卷)

第五章:树和二叉树 先序遍历二叉树的非递归算法。 void PreOrderTraverse(BiTree T, void (*Visit)(TElemType)) {//表示用于查找的函数的指针Stack S; BiTree p T;InitStack(S);//S模拟工作栈while (p || !StackEmpty(S)) {//S为空且下一个结点为空&#xff0c;意味着结束遍…