pod常见状态
invalidImageName:node节点无法解析镜像名导致的镜像无法下载
ImageInspectError: 无法校验镜像,镜像不完整导致
ErrImageNeverPull: 策略禁止拉取镜像,镜像中心权限是私有等
RegistryUnavailble:镜像服务器不可用,网络原或harbor宕机
ErrImagePull: 镜像拉取出错,超时或下载被强制终止
CreateContainerConfigError: 不能创建kubelet使用的容器配置
RunContainerError: pod运行失败,容器中没有初化为PID为1的守护进程等
ContainersNotInitalized: pod没有初始化完毕
ContainersNotReady: pod没有准备完毕
ContainerCreateing: pod正在创建中
PodInitalzing:pod正在初始化中
DockerDaemonNotReady: node节点docker服务没有启动
NetworkPluginNotReady:网络插件没有启动
Uns#chedulable: pod不能被调度,kube-scheduler没有匹配到合适的node节点
PodScheduled: pod正处于调度中,在kube-scheduler刚开始调度的时候,还没有将pod分配到指定的node,在筛选出合适的节点后就会更新etcd数据。将pod分配到指定的node
Pending:正在创建Pod但是Pod中的容器还没有全部被创建完成【处于此状态 Pod应该检查Pod的依赖的存储是否有权限挂载等】
Failed:Pod中有容器启动失败而导致pod工作异常
Unkown: 由于某种原因无法获得pod的当前状态,通常是由于与pod所在的node节点通信错误
Initalized:所有pod初始化容器已经完成了
ImagePullBackOff: pod所在的node节点下载镜像失败。(原因包括无效的镜像名称,或从私有仓库拉取而没有 imagePullSecret
)
Running: pod内部的容器已经被创建并且启动
Ready:表示pod已经可以提供访问服务
Error: pod启动过程中发生错误
NodeLost: pod所在节点失联
Waiting: pod等待启动
Terminating: Pod正在被销毁
CrashLoopBackOff: 容器启动失败,kubelet正在将它重启
镜像拉取策略官网
https://kubernetes.io/zh-cn/docs/concepts/containers/images/#pre-pulled-images
镜像拉取策略查询
镜像拉取策略解释
可能的枚举值:
- `"Always"` 表示 kubelet 总是尝试拉取最新的镜像。
如果拉取失败,容器将失败。(如果镜像标签为latest。那需要使用Always每次从公网拉取最新镜像)
- `"IfNotPresent"` 表示kubelet 会先拉取本地的镜像,本地没有镜像,会从公网拉取最新镜像
如果拉取失败,容器将失败。(推荐使用)
- `"Never"` 表示 kubelet 从不拉取镜像,而只使用本地
镜像。 如果镜像不存在,容器将失败
默认镜像拉取策略
当你(或控制器)向 API 服务器提交一个新的 Pod 时,你的集群会在满足特定条件时设置 imagePullPolicy
字段:
- 如果你省略了
imagePullPolicy
字段,并且容器镜像的标签是 :latest
, imagePullPolicy
会自动设置为 Always
。 - 如果你省略了
imagePullPolicy
字段,并且没有指定容器镜像的标签, imagePullPolicy
会自动设置为 Always
。 - 如果你省略了
imagePullPolicy
字段,并且为容器镜像指定了非 :latest
的标签, imagePullPolicy
就会自动设置为 IfNotPresent
。
私有镜像拉取配置方式
创建一个基于现有凭证的 Secret拉取私有镜像
说明:
官网: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/
Pod 只能引用位于自身所在名字空间中的 Secret,因此需要针对每个名字空间重复执行上述过程。
如果你已经运行了 docker login
命令,你可以复制该镜像仓库的凭证到 Kubernetes:
如果你需要更多的设置(例如,为新 Secret 设置名字空间或标签), 则可以在存储 Secret 之前对它进行自定义。 请务必:
- 将 data 项中的名称设置为
.dockerconfigjson
- 使用 base64 编码方法对 Docker 配置文件进行编码,然后粘贴该字符串的内容,作为字段
data[".dockerconfigjson"]
的值 - 将
type
设置为 kubernetes.io/dockerconfigjson
或 使用 Docker Config 创建 Secret
在这里:
-
<your-registry-server>
是你的私有 Docker 仓库全限定域名(FQDN)。 DockerHub 使用 https://index.docker.io/v1/
。 -
<your-name>
是你的 Docker 用户名。 -
<your-pword>
是你的 Docker 密码。 -
<your-email>
是你的 Docker 邮箱。
这样你就成功地将集群中的 Docker 凭证设置为名为 myregistrykey
的 Secret。
查询secrets
secerts解密
在deploymeny的yaml文件配置,
将 ImagePullSecrets 添加到服务账号的配置方式
官网:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/
此这种方式是建立在第一种方式的前提下,再把ImagePullSecrets的配置加入到每个命名空间的default服务账号。令其使用该 Secret 用作 imagePullSecret
。
第一步:使用 Docker Config 创建 Secret。操作过程。见上述
第二步 将镜像拉取 Secret 添加到服务账号
你也可以使用 kubectl edit
,或者如下所示手动编辑 YAML 清单:
sa.yaml
文件的输出类似这样:
使用你常用的编辑器(例如 vi
),打开 sa.yaml
文件,删除带有键名 resourceVersion
的行,添加带有 imagePullSecrets:
的行,最后保存文件。
所得到的 sa.yaml
文件类似于:
最后,使用新更新的 sa.yaml
文件替换服务账号。
验证镜像拉取 Secret 已经被添加到 Pod 规约
现在,在当前命名空间中创建使用默认服务账号的新 Pod 时,新 Pod 会自动设置其 .spec.imagePullSecrets
字段:
输出为: