在 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 的授权过期了。
$ 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
进入配置页面
$ kubectl edit deployment -n <namespace>
往下拉找到 imagePullSecrets,替换为上面创建的 <secret-name>
imagePullSecrets:
- name: gitlab-auth
改完配置文件后,大概 1-2 分钟会自动生效。
再次查看 pod 状态镜像拉取是成功的。
↶ 返回首页 ↶