如何在 microk8s 上修复 "Failed to pull image"

How to fix "Failed to pull image" on microk8s

我试图按照入门 docker 的教程进行操作,但是当您必须使用 kuberetes 时,我遇到了困难。我正在使用 microk8s 创建集群。

我的 Dockerfile:

FROM node:6.11.5WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .

CMD [ "npm", "start" ]

我的bb.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bb-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      bb: web
  template:
    metadata:
      labels:
        bb: web
    spec:
      containers:
      - name: bb-site
        image: bulletinboard:1.0
---
apiVersion: v1
kind: Service
metadata:
  name: bb-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    bb: web
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 30001

我用

创建图像
docker image build -t bulletinboard:1.0 .

我使用以下方法创建 pod 和服务:

microk8s.kubectl apply -f bb.yaml

pod 已创建,但是,当我使用

查找 pods 的状态时
microk8s.kubectl get all

它说:

NAME                           READY   STATUS             RESTARTS   AGE
pod/bb-demo-7ffb568776-6njfg   0/1     ImagePullBackOff   0          11m

NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/bb-entrypoint   NodePort    10.152.183.2   <none>        8080:30001/TCP   11m
service/kubernetes      ClusterIP   10.152.183.1   <none>        443/TCP          4d

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/bb-demo   0/1     1            0           11m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/bb-demo-7ffb568776   1         1         0       11m

此外,当我在 kubernetes 仪表板上查找它时,它说:

拉取镜像失败"bulletinboard:1.0":rpc错误:code = Unknown desc =解析镜像失败"docker.io/library/bulletinboard:1.0":没有可用的注册表端点:拉取访问被拒绝,存储库不存在或可能需要授权: 服务器消息: insufficient_scope: 授权失败

问:为什么会出现此错误?我只是按照教程没有跳过任何内容。

我已经用 docker 登录了。

您需要将此本地构建的映像推送到 Docker Hub 注册表。为此,如果您还没有 Docker Hub 帐户,则需要创建一个。

完成后,您需要从命令行登录 Docker Hub。

docker login

标记您的图像,以便它进入您的 Docker Hub 存储库。

docker tag bulletinboard:1.0 <your docker hub user>/bulletinboard:1.0

将您的图像推送到 Docker 集线器

docker push <your docker hub user>/bulletinboard:1.0

更新 yaml 文件以反映 Docker Hub 上的新图像存储库。

spec: containers: - name: bb-site image: <your docker hub user>/bulletinboard:1.0

重新应用yaml文件

microk8s.kubectl apply -f bb.yaml

建议的解决方案是根据回答 here but this didn't work for me, so I followed this 指南将 imagePullPolicy: Never 添加到您的部署中,因为我从事本地开发工作。

如果您不想使用 Docker 集线器,您可以托管本地注册服务器。

  1. 启动本地注册表服务器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
  1. 标记你的图片:
sudo docker tag bulletinboard:1.0 localhost:5000/bulletinboard
  1. 将其推送到本地注册表:
sudo docker push localhost:5000/bulletinboard
  1. 更改yaml文件:
spec:
      containers:
      - name: bb-site
        image: localhost:5000/bulletinboard
  1. 开始部署
kubectl apply -f bb.yaml