首页 > 其他分享 >k8s的镜像拉取策略

k8s的镜像拉取策略

时间:2025-01-22 17:00:16浏览次数:1  
标签:Kubernetes 更新 拉取 版本 imagePullPolicy 镜像 k8s

Kubernetes 镜像更新策略

在 Kubernetes(简称 K8s)中,容器镜像的更新行为主要由 imagePullPolicy 参数控制。该策略决定了 Kubernetes 在启动或重启容器时是否从镜像仓库拉取新的镜像版本。常见的镜像更新策略有三种:

1. Always

如果容器的 imagePullPolicy 设置为 Always,每次创建 Pod 或者重启容器时,Kubelet 都会从镜像仓库拉取最新的镜像版本。这对于使用 latest 标签或者希望始终获取最新镜像的场景非常有用,但在生产环境中应谨慎使用,因为 latest 标签的镜像内容可能会随时变化,导致版本不一致或潜在的不稳定。

建议: 在生产环境中避免直接使用 latest 标签,使用明确的版本号(如 v1.0.1)来确保一致性,并记录镜像版本历史以便于追踪和排查问题。

2. IfNotPresent(默认值)

imagePullPolicy 设置为 IfNotPresent 时,如果本地节点上已经存在该镜像,则 Kubelet 不会尝试从镜像仓库拉取镜像;仅当本地不存在该镜像时,Kubelet 才会去远程仓库拉取镜像。通常,使用带有明确版本标签(如 v1.0)的镜像时,推荐使用此策略,以避免不必要的镜像拉取。

注意: 默认情况下,如果镜像标签是 latestimagePullPolicy 会自动设置为 Always;如果是版本号标签(如 v1.0),则默认使用 IfNotPresent

3. Never

如果 imagePullPolicy 设置为 Never,无论本地是否存在该镜像,Kubelet 都不会尝试从镜像仓库拉取镜像,而是始终使用本地已有的镜像。这种策略适用于不希望自动升级镜像版本,且希望始终使用特定版本的场景。

更新应用镜像的常见方法

在 Kubernetes 中,更新应用镜像的常见方法是通过修改 Deployment、StatefulSet 等控制器中定义的 Pod 模板内的镜像版本,然后执行 kubectl apply 命令将更改推送到集群,触发滚动更新。

滚动更新的过程中,Kubernetes 会逐步替换旧的容器实例,确保服务的持续可用性。您可以使用以下命令来更新镜像版本:

示例:更新 Deployment 中的镜像

假设我们有一个名为 example-deployment 的 Deployment,其中定义了一个容器镜像 myapp:v1.0。我们将镜像版本更新为 myapp:v2.0,并通过 kubectl apply 命令触发更新。

  1. 修改 Deployment 配置文件 deployment.yaml 中的镜像版本:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example-container
        image: myapp:v2.0  # 修改为新的镜像版本
        imagePullPolicy: IfNotPresent
  1. 执行 kubectl apply 命令将变更推送到集群:
kubectl apply -f deployment.yaml

在执行该命令后,Kubernetes 会根据定义的镜像更新策略(例如,imagePullPolicy: IfNotPresent)决定是否从仓库拉取新的镜像,并按滚动更新的方式逐步替换旧版本的容器实例。

滚动更新控制

在滚动更新过程中,您还可以通过以下参数控制更新过程的行为:

  • maxUnavailable:定义更新过程中允许不可用的最大 Pod 数量,控制更新期间服务的最小可用性。
  • maxSurge:定义在更新过程中可以超出期望副本数的最大 Pod 数量,帮助提升更新的速度。

合理设置这两个参数可以在保证服务可用性的同时加速或控制更新过程。例如:

spec:
  replicas: 3
  strategy:
    rollingUpdate:
      maxUnavailable: 1  # 最多允许 1 个 Pod 不可用
      maxSurge: 1        # 可以增加 1 个 Pod 以加速更新

通过设置这些参数,您可以精细控制容器的滚动更新行为,以平衡服务可用性和更新速度。


这种修订版本提供了更为清晰的策略解释、更新的实践方法和对滚动更新的详细控制,适用于生产环境中的实际操作。

标签:Kubernetes,更新,拉取,版本,imagePullPolicy,镜像,k8s
From: https://www.cnblogs.com/leojazz/p/18686403

相关文章

  • 制作docker 镜像上传到docker hub仓库
    注册dockerhub账号    https://hub.docker.com/  参照此篇:https://www.cnblogs.com/yjlch1016/p/8998479.htmldockerhub上创建仓库https://hub.docker.com/repositories本地制作镜像并上传在本地登陆 dockerhub帐号dockerlogin将容器commit成镜像,可以先用docker......
  • K8S从私有仓库拉取镜像
    pod结合secret下载私有镜像1、保证节点机器可以登录仓库dockerlogin--usernameadmin--passwordHarbor12345harbor.hack.me2、结合sercet资源针对密钥文件进行加密kubectlcreatesecretgenericregcred--from-file=/root/.docker/config.json--type=kubernetes.io/......
  • Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】
    Git理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件标签管理理解标签创建标签操作标签删除标签理解分布式版本控制系统我们⽬前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们......
  • K8s 灰度发布实战:通过 Ingress 注解轻松实现流量分割与渐进式发布
    在现代微服务架构中,应用的更新和发布是一个高频且关键的操作。如何在不影响用户体验的前提下,安全、平稳地将新版本应用推送到生产环境,是每个开发者和运维团队必须面对的挑战。灰度发布(GrayRelease)作为一种渐进式发布策略,能够有效降低发布风险,而Kubernetes的Ingress注解功能为......
  • 一文搭建本地镜像仓
    一文搭建本地镜像仓拉取registry镜像dockerpullregistry:2运行registry容器第1种方式:不加持久化dockerrun-d-p5000:5000--restart=always--name=registryregistry:2第2种方式:对初始化配置文件,加持久化#创建数据卷,用于挂载dockercreatevolumeregistryvolume......
  • ISO镜像软件 ISO Workshop Professional v13 中文注册版
    在数字时代,管理光盘和创建ISO映像是一项必备技能。ISOWorkshopPro正是为此而生,这款强大的PC端ISO镜像工具,能够助你轻松完成从备份、刻录到转换的全方位光盘任务。无论是CD、DVD还是蓝光光盘,ISOWorkshopPro都能一一搞定。该版本已注册,可以使用全部功能。使用说明:1、将压......
  • 【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结 (思维导图-java架构)
    创建一个关于Kubernetes(简称K8s)领域的深度剖析年度总结的思维导图,特别是针对Java架构师的需求,可以帮助梳理和理解过去一年中重要的技术进展、工具以及实战经验。下面是一个基于文本的思维导图结构建议,你可以根据这个结构使用任何思维导图软件来创建你的图形化版本。Kuberne......
  • 云原生周刊:K8s 生产环境架构设计及成本分析
    开源项目推荐KubeZoneNetKubeZoneNet旨在帮助监控和优化Kubernetes集群中的跨可用区(Cross-Zone)网络流量。这个项目提供了一种简便的方式来跟踪和分析Kubernetes集群中跨不同可用区的通信,帮助用户优化集群的网络架构、提高资源利用效率并减少网络延迟。通过实时监控和数据分......
  • K8s日志采集终极指南:Logtail + CRD实现多环境精准采集
    需求背景需求:k8s的应用日志解决方案,不同项目组的日志要采集到不同的logstore,并且只采集指定环境的日志(dev/test/prd)方案:logtail使用daemonset方式通过crd来自定义日志采集1.部署helmv3helm:https://github.com/helm/helm/releaseswgethttps://get.helm.sh/helm......
  • K8s中Java应用OOM崩溃?一招搞定Dump文件抓取与告警!
    背景:公司新项目在进行容器化工作,有开发提出他们的java应用存在OOM的情况,通过配置参数-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/dumps/oom可以将jvm信息dump下来,但是在K8s中出现OOM会直接重启容器,无法查看/获取dump文件。并且dump的文件通常比较大(开发估计2G左......