问题
新创建的Deploy在创建Pod时成功,但Pod报错,提示拉取镜像失败。
通过ssh登录到具体的K8S node上,手动执行docker pull 命令,却能成功拉取到对应的镜像。
原因
根本原因:具体的命名空间缺少imagePullSecrets,不同的命名空间不能直接使用default中的imagePullSecrets。
准备K8S环境时,仅在default 命令空间下创建了image pull secret。而开发人员新建了不同的命名空间来部署不同的微服务,虽然都是同一台harbor仓库,但却因为具体的命名空间无法使用default命名空间中的image pull secret,因此出现了无法自动拉取镜像。
而ssh登陆后执行的docker pull命令并不需要image pull secret,只要事先执行了docker login即可成功拉取镜像。
解决
在K8S-master节点上,针对不同的命名空间创建image pull secret(可以同名)。
kubectl create secret docker-registry registrysecret --docker-server=<harbor地址> --docker-username=admin --docker-password=xxxxx -n <命名空间A>
kubectl create secret docker-registry registrysecret --docker-server=<harbor地址> --docker-username=admin --docker-password=xxxxx -n <命名空间B>
kubectl create secret docker-registry registrysecret --docker-server=<harbor地址> --docker-username=admin --docker-password=xxxxx -n <命名空间C>
相关截图