当前位置: 首页 > news >正文

在 Minikube 上部署 Kubernetes Deployment 并解决 ImagePullBackOff 问题

文章目录

    • 背景
    • 问题分析
    • 解决方案
      • 步骤 1:确认本地镜像
      • 步骤 2:将镜像导入 Minikube
      • 步骤 3:重新应用 Deployment
      • 步骤 4:检查 Pod 状态
    • 常用命令
      • Minikube 相关
      • Kubernetes 相关
      • Docker 相关
    • 总结

本文记录了如何在 Minikube 上部署一个 Kubernetes Deployment,解决常见的 ImagePullBackOff 问题,并提供了一些常用命令供参考。场景基于一个 Go 应用的 Deployment,镜像为本地构建的 flycash/webook-live:v0.0.1

背景

在尝试使用以下命令部署 Kubernetes Deployment 时:

kubectl apply -f k8s-webook-deployment.yaml

Deployment 创建成功,但 Pod 状态显示为 ImagePullBackOffErrImagePull,表明 Kubernetes 无法拉取镜像 flycash/webook-live:v0.0.1。通过排查,发现镜像存在于本地 Docker 环境中,但 Minikube 使用独立的 Docker 守护进程,无法直接访问本地镜像。

以下是解决问题的步骤和最终方案。

问题分析

ImagePullBackOff 错误通常由以下原因引起:

  • 镜像不存在于指定的仓库(例如 Docker Hub)。
  • Minikube 的网络问题导致无法拉取镜像。
  • 镜像在本地存在,但未导入 Minikube 的 Docker 环境。

通过 kubectl describe pod <pod-name>,我们看到错误:

Failed to pull image "flycash/webook-live:v0.0.1": Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection

这表明 Kubernetes 尝试从 Docker Hub 拉取镜像,但失败。而 docker images 确认镜像 flycash/webook-live:v0.0.1 存在于本地,说明需要将本地镜像导入 Minikube。

解决方案

以下是将本地镜像部署到 Minikube 的步骤:

步骤 1:确认本地镜像

检查本地 Docker 环境中是否存在镜像:

docker images | grep flycash/webook-live

输出:

REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
flycash/webook-live   v0.0.1    a66eca81439c   22 hours ago   84.9MB

步骤 2:将镜像导入 Minikube

Minikube 使用独立的 Docker 守护进程,无法直接访问本地 Docker 镜像。需要将镜像导出并导入 Minikube:

# 1.切换到本地 Docker 环境(如果当前在 Minikube 环境中):
eval $(minikube -p minikube docker-env --unset)# 2. 导出本地镜像为 tar 文件:
docker save -o webook-live.tar flycash/webook-live:v0.0.1# 3. 将 tar 文件导入 Minikube:
minikube image load webook-live.tar# 4. 验证镜像是否在 Minikube 中:
eval $(minikube -p minikube docker-env)
docker images | grep flycash/webook-live# 5. 清理临时文件:rm webook-live.tar

步骤 3:重新应用 Deployment

使用以下 Deployment YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:name: webook-live
spec:replicas: 3selector:matchLabels:app: webook-livetemplate:metadata:labels:app: webook-livespec:containers:- name: webookimage: flycash/webook-live:v0.0.1ports:- containerPort: 8080

应用 Deployment:

kubectl apply -f k8s-webook-deployment.yaml

步骤 4:检查 Pod 状态

验证 Pod 是否正常运行:

kubectl get pods

输出:

NAME                           READY   STATUS    RESTARTS   AGE
webook-live-7fb974b957-4scx9   1/1     Running   0          28m
webook-live-7fb974b957-vs8fc   1/1     Running   0          28m
webook-live-7fb974b957-xh852   1/1     Running   0          28m

常用命令

以下是在 Minikube 和 Kubernetes 中常用的命令,方便调试和管理:

Minikube 相关

# 启动 Minikube:
minikube start --driver=docker --base-image=registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.46# 查看 Minikube 状态:
minikube status# 切换到 Minikube 的 Docker 环境:
eval $(minikube -p minikube docker-env)# 切换回本地 Docker 环境:
eval $(minikube -p minikube docker-env --unset)# 导入本地镜像到 Minikube:
minikube image load <image-tar-file># 删除 Minikube 集群:
minikube delete

Kubernetes 相关

# 应用 YAML 文件:
kubectl apply -f <filename>.yaml# 查看节点状态:
kubectl get nodes# 查看 Pod 状态:
kubectl get pods# 查看 Pod 详细信息:
kubectl describe pod <pod-name># 查看 Pod 日志:
kubectl logs <pod-name># 查看 Service 状态:
kubectl get svc# 删除资源:
kubectl delete -f <filename>.yaml

Docker 相关

# 查看本地镜像:
docker images
# 构建镜像:
docker build -t <image-name>:<tag> .
# 导出镜像为 tar 文件:
docker save -o <output-file>.tar <image-name>:<tag>

总结

通过将本地镜像导入 Minikube 的 Docker 环境,成功解决了 ImagePullBackOff 问题,Pod 状态变为 Running。创建 Service 后,可以通过 Minikube 提供的 URL 访问应用。添加健康检查和处理版本警告可以进一步提高部署的稳定性。

http://www.dtcms.com/a/266662.html

相关文章:

  • WPS中配置MathType教程
  • stm32学到什么程度可以找工作?
  • Java学习第十二部分——idea各种项目简介
  • 电阻温升评估的相关测试总结
  • openlayers 判断geojson文件是否在视口内
  • Android BitmapRegionDecoder 详解
  • Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动
  • <tauri><rust><GUI>使用tauri创建一个文件夹扫描程序
  • 深度学习前置知识全面解析:从机器学习到深度学习的进阶之路
  • 《Java修仙传:从凡胎到码帝》第三章:缩进之劫与函数峰试炼
  • 鸿蒙系统(HarmonyOS)4.2 设备上实现无线安装 APK 并调试
  • Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
  • React中的useState 和useEffect
  • 记一次Linux手动设置网卡的过程
  • Spark从入门到实战:安装与使用全攻略
  • EM储能网关ZWS智慧储能云应用(13) — 企业个性化配置
  • 【CTF-Web环境搭建】中国蚁剑antSword
  • 电商分拣的“效率密码”:艾立泰轻量化托盘引领自动化流水线革新
  • ORACLE 日常查询
  • Linux三剑客:grep、sed、awk 详解以及find区别
  • RT‑DETR 系列发展时间顺序
  • 判断文件是否有硬链接
  • PyTorch实战(14)——条件生成对抗网络(conditional GAN,cGAN)
  • 基于PHP+MySQL实现(Web)英语学习与测试平台
  • 【Git】git命令合集
  • vue 常用搭配使用工具
  • 影楼精修-智能修图Agent
  • 2025.06.27-14.44 C语言开发:Onvif(二)
  • 批量PDF转换工具,一键转换Word Excel
  • Spring Boot多环境开发-Profiles