解决 k8s ImagePullBackOff 错误

2025-10-08 12:25:27

问题

在 k8s 上部署项目没有生效,查看 pod 状态,发现 ImagePullBackOff 错误。

$ kubectl get pods -n fe
NAME                  READY   STATUS             RESTARTS   AGE
fe-6d7774d7ah-4alsd   0/1     ImagePullBackOff   0          64m

原因

ImagePullBackOff 字面意思是 k8s 拉取 docker image 失败,去 gitlab 上检查镜像生成是成功的,那么大概率是 gitlab 对于 k8s 的授权过期了。

解决

  1. 使用如下命令重新生成 k8s imagePullSecrets。
$ kubectl create secret docker-registry <secret-name> -n <namespace> \
   --docker-server=registry.gitlab.com \
   --docker-username=<gitlab-username> \
   --docker-password=<gitlab-access-token> \
   --docker-email=<gitlab-email>

命令中一些需要替换的值参考如下说明:

1.1 <secret-name>

即将创建的 k8s secret 名称,可以叫做 gitlab-auth 或者其他名字;

1.2 -n <namespace>

-n 后面是 k8s 命名空间,没有命令空间就忽略这个参数;

1.3 --docker-server=registry.gitlab.com

镜像仓库地址,这里使用的是 GitLab 仓库;

1.4 --docker-username=<gitlab-username>

GitLab 用户名;前往 gitlab 网页 -> 点击头像 -> 点击 Edit Profile -> 点击左边的 Account -> 往下拉找到 Change username 可以看到用户名;

1.5 --docker-email=<gitlab-email>

GitLab 邮箱;前往 gitlab 网页 -> 点击头像 -> 点击 Edit Profile -> 点击左边的 Profile -> 往下拉找到 Email;

1.6 --docker-password=<gitlab-access-token>

GitLab 访问令牌,可以在 GitLab 用户设置中生成;

前往 gitlab 网页 -> 点击头像 -> 点击 Settings -> 点击左边的 Access Tokens -> 点击右上角 Add new token -> 填写 token 名称 + 设置过期时间 + 勾选 read 权限 -> 保存 -> 在页面上方会有 token 文本,是以 glpat-xxxx 开头的字符串,保存到本地,刷新页面后就看不到这个 token 了

1.7 前往 k8s 所在服务器,执行上面的指令,看到如下文本表示创建成功。

secret/gitlab-fe-auth created
  1. 替换配置文件中的 secret

进入配置页面

$ kubectl edit deployment -n <namespace>

往下拉找到 imagePullSecrets,替换为上面创建的 <secret-name>

imagePullSecrets:
    - name: gitlab-auth

改完配置文件后,大概 1-2 分钟会自动生效。

再次查看 pod 状态镜像拉取是成功的。

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: