K8s新手系列之Pod中容器的镜像拉取策略
概述
在 Kubernetes(K8s)里,容器镜像拉取策略(ImagePullPolicy)决定了 K8s 在创建或重启 Pod 时,如何处理容器镜像的拉取操作。这一策略能够确保使用的镜像始终是最新的,或者使用本地已有的镜像以提升部署效率。
可以使用kubectl explain pod.spec.containers.imagePullPolicy
查看资源的详细文档:
示例:
[root@master01 ~]# kubectl explain pod.spec.containers.imagePullPolicy
KIND: Pod
VERSION: v1
FIELD: imagePullPolicy <string>
DESCRIPTION:
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
More info:
https://kubernetes.io/docs/concepts/containers/images#updating-images
Possible enum values:
- `"Always"` means that kubelet always attempts to pull the latest image.
Container will fail If the pull fails.
- `"IfNotPresent"` means that kubelet pulls if the image isn't present on
disk. Container will fail if the image isn't present and the pull fails.
- `"Never"` means that kubelet never pulls an image, but only uses a local
image. Container will fail if the image isn't present
通过文档可以发现,镜像拉取策略有三个类型,分别是Always、IfNotPresent、Never
也可以通过官方文档来查看:https://kubernetes.io/docs/concepts/containers/images#updating-images
镜像拉取策略分类详解
Never
Never表示永不拉取镜像,kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地, kubelet 会尝试启动容器;否则,会启动失败。
示例:
[root@master01 ~/pod]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-tomcat
spec:
containers:
- name: container-tomcat
image: tomcat:8.0
# 指定镜像拉取策略为Never
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080
# 创建pod
[root@master01 ~/pod]# kubectl apply -f pod-tomcat.yaml
pod/pod-tomcat created
# 查看pod
[root@master01 ~/pod]# kubectl get po pod-tomcat
NAME READY STATUS RESTARTS AGE
pod-tomcat 0/1 ErrImageNeverPull 0 111s
# 查看详情,发现并没有拉取镜像
[root@master01 ~/pod]# kubectl describe po pod-tomcat
Name: pod-tomcat
...省略万字内容
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m7s default-scheduler Successfully assigned default/pod-tomcat to node02
Normal SandboxChanged 2m5s kubelet Pod sandbox changed, it will be killed and re-created.
Warning ErrImageNeverPull 25s (x12 over 2m6s) kubelet Container image "tomcat:8.0" is not present with pull policy of Never
Warning Failed 25s (x12 over 2m6s) kubelet Error: ErrImageNeverPull
IfNotPresent
如果本地有镜像就使用本地的,如果没有就去远程仓库拉取
示例:
[root@master01 ~/pod]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-tomcat
spec:
containers:
- name: container-tomcat
image: tomcat:8.0
# 指定镜像拉取策略为IfNotPresent
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
# 创建pod
[root@master01 ~/pod]# kubectl apply -f pod-tomcat.yaml
pod/pod-tomcat created
# 查看pod
[root@master01 ~/pod]# kubectl get pod pod-tomcat
NAME READY STATUS RESTARTS AGE
pod-tomcat 1/1 Running 0 43s
#查看pod详情
[root@master01 ~/pod]# kubectl describe pod pod-tomcat
Name: pod-tomcat
Namespace: default
##...省略万字内容
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 64s default-scheduler Successfully assigned default/pod-tomcat to node02
Normal Pulling 63s kubelet Pulling image "tomcat:8.0"
Normal Pulled 23s kubelet Successfully pulled image "tomcat:8.0" in 40.129798231s (40.129811976s including waiting)
Normal Created 23s kubelet Created container container-tomcat
Normal Started 23s kubelet Started container container-tomcat
Always
如果本地有镜像,则对比本地镜像和远程仓库的摘要信息,若相同则使用本地缓存,若不同则重新拉取镜像。
如果本地没有镜像,则无需对比摘要信息,直接拉取镜像。
示例:
[root@master01 ~/pod]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-tomcat
spec:
containers:
- name: container-tomcat
# 镜像更改为latest
image: tomcat:latest
# 指定镜像拉取策略为Always
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
# 创建pod
[root@master01 ~/pod]# kubectl apply -f pod-tomcat.yaml
pod/pod-tomcat created
#查看pod
[root@master01 ~/pod]# kubectl get pod pod-tomcat
NAME READY STATUS RESTARTS AGE
pod-tomcat 1/1 Running 0 4m53s
# 查看pod详情
[root@master01 ~/pod]# kubectl describe pod pod-tomcat
Name: pod-tomcat
Namespace: default
## ...省略万字内容
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m39s default-scheduler Successfully assigned default/pod-tomcat to node02
Normal Pulling 5m38s kubelet Pulling image "tomcat:latest"
Normal Pulled 4m55s kubelet Successfully pulled image "tomcat:latest" in 43.43020764s (43.430224485s including waiting)
Normal Created 4m55s kubelet Created container container-tomcat
Normal Started 4m55s kubelet Started container container-tomcat
镜像默认的拉取策略
官网的描述是这样的:
- 如果你省略了
imagePullPolicy
字段,并且你为容器镜像指定了摘要, 那么imagePullPolicy
会自动设置为IfNotPresent
。 - 如果你省略了
imagePullPolicy
字段,并且容器镜像的标签是:latest
,imagePullPolicy
会自动设置为Always
。 - 如果你省略了
imagePullPolicy
字段,并且没有指定容器镜像的标签,imagePullPolicy
会自动设置为Always
。 - 如果你省略了
imagePullPolicy
字段,并且为容器镜像指定了非:latest
的标签,imagePullPolicy
就会自动设置为IfNotPresent
简单点来说就是如果没有指定镜像的版本,或者指定镜像的版本为 :latest
,那么镜像拉取策略就是 Always
。否则就是 IfNotPresent
K8s新手系列之Pod中容器的镜像拉取策略的更多相关文章
- kubernetes之pod生命周期,pod重启策略, 镜像拉取策略
pod声明周期(状态):pending , running, succeeded, failed, unknown 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多 ...
- Kubernetes Pod 镜像拉取策略
Kubernetes Pod 镜像拉取策略 官方文档:https://kubernetes.io/docs/concepts/containers/images/ • IfNotPresent:默认值 ...
- Pod镜像拉取策略imagePullPolicy
默认值是IfNotPresent Always 总是拉取: 首先获取仓库镜像信息, 如果仓库中的镜像与本地不同,那么仓库中的镜像会被拉取并覆盖本地. 如果仓库中的镜像与本地一致,那么不会拉取镜像. 如 ...
- K8s 从懵圈到熟练 – 镜像拉取这件小事
作者 | 声东 阿里云售后技术专家 导读:相比 K8s 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的.而镜像拉取失败,大多数情况下都和权限有关.所以,在处理相关问题的时候,我们往往会轻松 ...
- docker中容器和镜像的区别
自学docker过程中一直搞不明白 镜像容器的关系,网上查阅看到一篇文章觉得讲的很好,转载记录. 转自 http://blog.csdn.net/chszs/article/details/48252 ...
- RocketMQ中PullConsumer的消息拉取源码分析
在PullConsumer中,有关消息的拉取RocketMQ提供了很多API,但总的来说分为两种,同步消息拉取和异步消息拉取 同步消息拉取以同步方式拉取消息都是通过DefaultMQPullConsu ...
- Kubernetes Pod中容器的Liveness、Readiness和Startup探针
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...
- Kubernetes笔记(五):了解Pod(容器组)
Kubernetes 中, 容器总是以 Pod(容器组)的方式进行调度与运行.因此对 Pod 的理解与掌握是学习 Kubernetes 的基础. 理解 Pod Pod(容器组)是 Kubernetes ...
- k8s之深入解剖Pod(一)
上文说了一下k8s的简单使用,接下来就让我们来具体深入了解一下Pod.为了避免篇幅太长,所以会分成几篇. 目录: Pod定义详解 静态Pod Pod容器共享Volume 一.Pod定义详解 先看一个简 ...
- k8s核心资源之Pod概念&入门使用讲解(三)
目录 1. k8s核心资源之Pod 1.1 什么是Pod? 1.2 Pod如何管理多个容器? 1.3 Pod网络 1.4 Pod存储 1.5 Pod工作方式 1.5.1 自主式Pod 1.5.2 控制 ...
随机推荐
- nacos(六): 创建第一个多模块微服务项目(生产者与消费者)
要创建出生产者与消费者一体的多模块项目,总体来说分成三个步骤.分别是先创建出项目主体,再分别创建出生产者与消费者. 步骤一:创建项目主体 1. 先创建一个单体项目作为项目的主题.在这里,我们不用脚手架 ...
- ollama-deepseek 部署
选择云资源 选用智星云 4090 高性能 1.57 一小时 windows操作系统 可以修改带宽来增加下载速度 使用mstsc远程登录 使用ollama https://ollama.com/ oll ...
- Winform ShowDialog如何让先前Show的窗体可以交互
背景描述 最近项目中有一个需求,全局有一个共用的窗体,能够打开不同模块的报告,由于需要兼容不同模块,代码复杂,启动速度慢.优化方案为将窗体启动时就创建好,需要查看报告时,使用此单例弹窗加载不同模块下的 ...
- copilot插件使用介绍
Copilot插件是一个由GitHub开发的人工智能代码助手,可以为开发人员提供代码自动补全和建议功能.Copilot使用了机器学习技术,通过分析大量的开源代码来自动生成代码片段和建议. 使用Copi ...
- MySQL - [20] 事务
题记部分 一.什么是ACID (1)Atomicity 原子性 某个操作,要么全部执行完毕,要么全部回滚. (2)Consistency 一致性 数据库中的数据全都符合现实世界中的约束,则这些数据就符 ...
- Linux - centos6.6不使用ssh如何在服务器之间传输文件?
根据上一篇的设定,如果升级openssh失败之后,又无法使用ssh,该怎么传输文件呢? 可以使用busybox进行文件传输,首先需要准备两台centos6.6服务器:ctos66-01和ctos66- ...
- 探秘Transformer系列之(7)--- embedding
探秘Transformer系列之(7)--- embedding 0x00 概要 在Transformer中,把每个 Token(对应离散的输入数据,如单词或符号)映射到高维稠密向量空间的工作是由嵌入 ...
- 【论文随笔】多行为序列Transformer推荐(Multi-Behavior Sequential Transformer Recommender)
前言 今天读的论文为一篇于2022年7月发表在第45届国际计算机学会信息检索会议(SIGIR '22)的论文,文章主要为推荐系统领域提供了一个新的视角,特别是在处理用户多行为序列数据方面,提出了一种有 ...
- Stream4Graph:动态图上的增量计算
作者:张奇 众所周知,当我们需要对数据做关联性分析的时候,一般会采用表连接(SQL join)的方式完成.但是SQL join时的笛卡尔积计算需要维护大量的中间结果,从而对整体的数据分析性能带来巨大影 ...
- 万字长文手把手教你实现MicroPython/Python发布第三方库
MicroPython/Python 发布第三方库 原文链接: FreakStudio的博客 摘要 文章讲解内容包括第三方库文件说明和组织.开源许可协议选择.通过black模块.Flake8模块和预提 ...