如何在MicroK8s Helm部署中使OneDev Kubernetes Executor正常工作?
问题背景
在MicroK8s集群部署OneDev后,使用Kubernetes执行器运行作业时,拉取docker.io/1dev/k8s-helper-linux:2.12.1镜像失败,报错:
init: failed to pull and unpack image "docker.io/1dev/k8s-helper-linux:2.12.1": failed to resolve reference "docker.io/1dev/k8s-helper-linux:2.12.1": failed to authorize: failed to fetch oauth token: unexpected status from GET request to https://auth.docker.io/token?scope=repository%3A1dev%2Fk8s-helper-linux%3Apull&service=registry.docker.io: 401 Unauthorized
Docker执行器可正常使用,已尝试修改OneDev端口配置、配置kubectl权限、添加集群角色等操作,问题未解决。
核心原因
DockerHub对未认证用户的公共镜像拉取有次数限制,超过限额后会返回401错误要求认证。Kubernetes执行器默认未复用OneDev配置的DockerHub凭证,导致拉取镜像时触发了该限制。
解决方案
1. 创建DockerHub镜像拉取Secret
在MicroK8s集群中创建用于镜像拉取的认证Secret,替换以下命令中的占位符为你的真实信息:
microk8s kubectl create secret docker-registry dockerhub-pull-secret \ --docker-server=docker.io \ --docker-username=你的DockerHub用户名 \ --docker-password=你的DockerHub访问令牌(或密码) \ --docker-email=你的关联邮箱
若OneDev执行器作业运行在指定命名空间,需添加-n <目标命名空间>参数,在对应命名空间下创建Secret。
2. 配置OneDev Kubernetes执行器使用Secret
登录OneDev后台,进入管理系统 -> 执行器,找到目标Kubernetes执行器:
- 展开「高级设置」,在「镜像拉取Secret」处填入刚创建的Secret名称
dockerhub-pull-secret - 确认执行器配置的「命名空间」与Secret所在命名空间一致
3. (可选)设置集群默认镜像拉取Secret
若希望集群内所有Pod默认使用该Secret拉取镜像,可修改默认服务账户:
microk8s kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "dockerhub-pull-secret"}]}'
4. 验证配置
运行临时Pod测试镜像拉取是否正常:
microk8s kubectl run -it --rm test-pull --image=docker.io/1dev/k8s-helper-linux:2.12.1 --restart=Never
若Pod成功启动,说明配置生效,重新触发OneDev作业即可。
内容的提问来源于stack exchange,提问作者Joedahond
相关产品推荐
相关产品推荐

