【问题标题】:microk8s pulling image, stuck in ContainerCreating statemicrok8s拉镜像,卡在ContainerCreating状态
【发布时间】:2019-10-24 05:44:20
【问题描述】:

doc(基于on)中所述。

我在 Ubuntu 上作为主机操作系统。

docker --version

Docker 版本 18.09.6,构建 481bc77

microk8s 1.14/beta

microk2s启用本地注册表:

microk8s.enable registry

检查:

watch microk8s.kubectl get all --all-namespaces

container-registry pod/registry-577986746b-v8xqc 1/1 Running 0 36m

然后:

编辑:

sudo vim /etc/docker/daemon.json

添加此内容:

{
  "insecure-registries" : ["127.0.0.1:32000"]
}

重启:

sudo systemctl restart docker

双重检查,看看是否应用了不安全:

docker info | grep -A 2 Insecure
Insecure Registries:
 127.0.0.1:32000
 127.0.0.0/8
WARNING: No swap limit support

标签:

docker tag my-registry/my-services/my-service:0.0.1-SNAPSHOT 127.0.0.1:32000/my-service

检查:

docker images

127.0.0.1:32000/my-service latest e68f8a7e4675 19 小时前 540MB

推:

docker push 127.0.01:32000/my-service

我在这里看到我的图片:http://127.0.0.1:32000/v2/_catalog

deployment-local.yml 我有,现在正确的图像:

...spec:
  containers:
    - name: my-service-backend
      image: 127.0.0.1:32000/my-service
      imagePullPolicy: Always ...

然后申请:

envsubst < ./.local/deployment-local.yml | microk8s.kubectl apply -f -

我明白了:ContainerCreating

作者:microk8s.kubectl describe pods my-service-deployment-f85d5dcd5-cmd5

在事件部分:

Events:
  Type     Reason     Age                 From                     Message
  ----     ------     ----                ----                     -------
  Normal   Scheduled  107s                default-scheduler        Successfully assigned default/my-service-deployment-f85d5dcd5-z75tr to my-desktop
  Normal   Pulling    25s (x4 over 106s)  kubelet, my-desktop  Pulling image "127.0.0.1:32000/my-service"
  Warning  Failed     25s (x4 over 106s)  kubelet, my-desktop  Failed to pull image "127.0.0.1:32000/my-service": rpc error: code = Unknown desc = failed to resolve image "127.0.0.1:32000/my-service:latest": no available registry endpoint: failed to do request: Head https://127.0.0.1:32000/v2/my-service/manifests/latest: http: server gave HTTP response to HTTPS client
  Warning  Failed     25s (x4 over 106s)  kubelet, my-desktop  Error: ErrImagePull
  Normal   BackOff    10s (x5 over 105s)  kubelet, my-desktop  Back-off pulling image "127.0.0.1:32000/my-service"
  Warning  Failed     10s (x5 over 105s)  kubelet, my-desktop  Error: ImagePullBackOff

好像我的服务卡在那里了。

问:可能是什么原因?

更新: 将所有更改为 localhost 有帮助,这意味着我现在可以在浏览器中看到:http://localhost:32000/v2/_catalog

{"repositories":["my-service"]}

但它只在 Firefox 中有效.. 很奇怪。在 chrome 中待定..

仍然:

Events:
  Type     Reason          Age                    From                    Message
  ----     ------          ----                   ----                    -------
  Normal   Scheduled       161m                   default-scheduler       Successfully assigned default/my-service-deployment-6d4c5587df-72xvd to my-laptop
  Normal   Pulling         160m (x4 over 161m)    kubelet, my-laptop  Pulling image "localhost/my-service"
  Warning  Failed          160m (x4 over 161m)    kubelet, my-laptop  Failed to pull image "localhost/my-service": rpc error: code = Unknown desc = failed to resolve image "localhost/my-service:latest": no available registry endpoint: failed to do request: Head https://localhost/v2/my-service/manifests/latest: dial tcp 127.0.0.1:443: connect: connection refused
  Warning  Failed          160m (x4 over 161m)    kubelet, my-laptop  Error: ErrImagePull
  Warning  Failed          159m (x6 over 161m)    kubelet, my-laptop  Error: ImagePullBackOff
  Normal   BackOff         131m (x132 over 161m)  kubelet, my-laptop  Back-off pulling image "localhost/my-service"
  Normal   SandboxChanged  22m                    kubelet, my-laptop  Pod sandbox changed, it will be killed and re-created.
  Normal   Pulling         21m (x4 over 22m)      kubelet, my-laptop  Pulling image "localhost/my-service"
  Warning  Failed          21m (x4 over 22m)      kubelet, my-laptop  Failed to pull image "localhost/my-service": rpc error: code = Unknown desc = failed to resolve image "localhost/my-service:latest": no available registry endpoint: failed to do request: Head https://localhost/v2/my-service/manifests/latest: dial tcp 127.0.0.1:443: connect: connection refused
  Warning  Failed          21m (x4 over 22m)      kubelet, my-laptop  Error: ErrImagePull
  Warning  Failed          20m (x6 over 22m)      kubelet, my-laptop  Error: ImagePullBackOff
  Normal   BackOff         2m22s (x87 over 22m)   kubelet, my-laptop  Back-off pulling image "localhost/my-service"

似乎它试图通过 https 连接..

--

好的.. 必须为 yml 图像添加端口:part.将接受下面的答案。谢谢。

【问题讨论】:

  • 你能发布你的整个deployment-local.ymlcurl http://127.0.0.1:32000/v2/_catalog 的输出和cat /var/snap/microk8s/current/args/containerd-template.toml | grep endpoint 的输出吗?

标签: docker kubernetes docker-registry microk8s


【解决方案1】:

在 microk8s 中,localhost127.0.0.1 有很大的不同。正如您所提到的,您基于this Stack 案例,并且用户正在使用 localhost

这里的主要问题是错误no available registry endpoint: failed to do request:。这意味着 microk8s 找不到端点。

如果你在下面运行命令,你将得到相同的输出

$ cat /var/snap/microk8s/current/args/containerd-template.toml | grep endpoint

endpoint = ["https://registry-1.docker.io"]
endpoint = ["http://localhost:32000"]

正如你在 microk8s 中看到的端点是 localhost 而不是 127.0.0.1

请更改 deployment-local.yaml 中的图片

...spec:
  containers:
    - name: my-service-backend
      image: localhost/my-service
      imagePullPolicy: Always ...

如果您会遇到任何其他问题,请告诉我。

在我的情况下,我不需要使用 localhost 再次标记和推送图像,只需要更改 YAML。

【讨论】:

  • 感谢您的帮助。会接受你的回答。答案是:使用你所说的'localhost' + image: localhost:32000/my-service(端口也很重要,不确定没有端口它是如何工作的)。 + 我更新了我的问题。供参考。谢谢。
  • 另外,我认为我切换到microk8s 1.14/beta 的事实有所帮助。非常恳求,我一直在使用本地主机,但我不得不切换到 127.0.0.1 以避免另一个问题 - 能够推送图像。
【解决方案2】:

我还需要在 /etc/hosts (Ubuntu 18.04) 中注释掉以下行

::1 localhost ip6-localhost

看来 microk8s 不支持 IPv6。

【讨论】:

  • 我没有将 localhost 别名绑定到任何 ipv6 IP,但只有 127.0.0.1 但仍然无法正常工作。对此有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 2020-04-20
  • 2020-12-16
  • 2018-11-17
  • 2021-08-17
  • 2019-06-06
  • 2019-03-03
  • 2021-07-21
相关资源
最近更新 更多