K8S 记一次ImagePullBackOff问题

本文讲述了在Kubernetes创建Deployment时遇到镜像拉取失败的问题,通过理解K8s对镜像仓库依赖的原理,解决过程包括创建阿里云镜像仓库、上传本地镜像并成功部署。

场景

k8s创建deploy的时候失败

问题定位

直白翻译就是镜像拉取失败
因为我是在本地build的镜像,也没有构建本地镜像仓(以为本地存在镜像就会从本地读取)
后发现是从镜像仓库拉取才可以,应该是k8s考虑到版本维护等后续问题只能在镜像仓库读取,后续维护仓库中镜像即可

问题解决

使用阿里云镜像仓库 : https://cr.console.aliyun.com/repository/

创建镜像仓库:设置仓库名称->命名空间->仓库类型->上传方式(这里选择本地上传即可)

查看镜像仓库配置并上传镜像:在详情页有详细的说明如何push到repository的命令及说明。

重新执行 kubectl kubectl create deploy ngx-dep --image= 《your mirror》

成功!

在 Kubernetes 中,Pod 频繁重启是一个常见的运维问题,通常由以下几个方面引发: ### 1. 应用程序崩溃或异常退出 如果容器内的应用程序在运行过程中发生异常退出(例如内存溢出、未捕获的异常、逻辑错误等),Kubernetes 会根据重启策略(`restartPolicy`)重新启动容器。频繁重启通常表现为 `CrashLoopBackOff` 状态,即容器在短时间内多次崩溃并进入等待重启的状态。这种情况可以通过查看容器日志进行排查: ```bash kubectl logs <pod名称> -n <命名空间> ``` 如果容器被反复重启,可以指定容器名称查看历史日志: ```bash kubectl logs <pod名称> -n <命名空间> --previous ``` ### 2. 探针失败导致重启 Kubernetes 提供了两种健康检查探针:`livenessProbe`(存活探针)和 `readinessProbe`(就绪探针)。如果 `livenessProbe` 探测失败,Kubernetes 会认为容器已经不可用,并触发容器重启。频繁重启可能是因为应用响应时间过长、健康检查接口不稳定或配置不合理(如超时时间过短)[^3]。 常见的排查方式包括: - 检查探针配置,确认 `initialDelaySeconds` 和 `failureThreshold` 是否合理。 - 验证 `/actuator/health` 或其他健康检查接口的响应时间和稳定性。 ### 3. 资源限制不足 Kubernetes 允许为容器设置资源限制(如 CPU 和内存)。如果容器使用的资源超过限制,Kubernetes 会终止容器并录 `OOMKilled`(内存溢出)或 CPU 限制被强制终止的情况。这种情况可以通过以下命令查看事件信息: ```bash kubectl describe pod <pod名称> -n <命名空间> ``` 如果发现事件中包含 `Out of memory` 或 `OOMKilled`,则说明容器可能因资源不足被终止。可以通过调整资源请求和限制来缓解该问题: ```yaml resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m" ``` ### 4. 初始化容器失败 如果 Pod 中包含初始化容器(Init Container),并且初始化容器未能成功完成,主容器将不会启动。在这种情况下,Pod 会处于 `Pending` 状态或不断尝试重新启动。可以通过以下命令查看 Init Container 的状态: ```bash kubectl describe pod <pod名称> -n <命名空间> ``` 如果发现 Init Container 失败,可以查看其日志进行排查: ```bash kubectl logs <pod名称> -n <命名空间> -c <init-container名称> ``` ### 5. 镜像拉取失败 如果容器镜像无法拉取(例如镜像名称错误、私有镜像未授权、网络问题等),Kubernetes 会尝试多次拉取镜像并导致 Pod 无法正常启动。可以通过以下命令查看事件信息: ```bash kubectl describe pod <pod名称> -n <命名空间> ``` 如果发现事件中包含 `ErrImagePull` 或 `ImagePullBackOff`,则说明镜像拉取失败。可以检查镜像名称、镜像仓库权限和网络配置。 ### 6. 配置错误或环境问题 Pod 的配置错误(如环境变量配置错误、卷挂载失败、依赖服务不可用等)也可能导致容器启动失败。可以通过以下方式排查: - 检查 Pod 的 YAML 配置文件,确认环境变量、卷挂载等配置是否正确。 - 检查依赖服务(如数据库、API 服务)是否可用。 ### 7. 资源竞争或调度问题 在某些情况下,Pod 可能因资源竞争或调度问题无法正常运行。例如,节点资源不足、Pod 优先级较低、节点故障等。可以通过以下命令查看节点状态和事件信息: ```bash kubectl describe node <节点名称> ``` ### 8. 应用性能瓶颈 如果应用性能瓶颈导致请求处理延迟,可能会触发 Kubernetes 的健康检查失败,从而导致容器重启。例如,Spring Boot 应用的默认线程数为 200,如果请求超过线程处理能力,会导致请求排队并最终超时,触发 Kubernetes 杀死容器并重启[^3]。可以通过调整线程池配置或优化应用性能来缓解该问题。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值