Kubernetes / docker ErrImagePull при развертывании приложения из частного реестра - PullRequest
1 голос
/ 07 февраля 2020

Я получаю ErrImagePull при попытке создать развертывание из образа, размещенного в моем личном реестре helm docker. Основываясь на ошибке «сервер дал HTTP-ответ клиенту HTTPS», я попытался добавить опцию --insecure-registry в раскрывающемся меню systemd, а также файл daemon. json на всех рабочих узлах и ведущем компьютере, но он все еще не работает. , Что еще я должен попытаться устранить?

edit: Возможно, это потому, что docker использует containerd?

    $ sudo systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
      Drop-In: /etc/systemd/system/docker.service.d
               └─docker.conf
       Active: active (running) since Fri 2020-02-07 10:00:25 UTC; 4min 44s ago
         Docs: https://docs.docker.com
     Main PID: 27700 (dockerd)
        Tasks: 14
       Memory: 41.8M
       CGroup: /system.slice/docker.service
               └─27700 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    $ cat /etc/systemd/system/docker.service.d/docker.conf
    DOCKER_OPTS="--insecure-registry 10.10.30.200:5000"
    $ cat /etc/docker/daemon.json
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "insecure-registries": ["10.10.30.200:5000"]
    }    
    $ curl 10.10.30.200:5000/v2/mybuild/tags/list
        {"name":"mybuild","tags":["v1"]}
    $ kubectl describe pod myweb-769d57d99-lz6xs
    ...
    Normal   Pulling    1s (x2 over 13s)   kubelet, k8s-node2  Pulling image "10.10.30.200:5000/mybuild:v1"
    Warning  Failed     1s (x2 over 13s)   kubelet, k8s-node2  Failed to pull image "10.10.30.200:5000/mybuild:v1": rpc error: code = Unknown desc = failed to resolve image "10.10.30.200:5000/mybuild:v1": no available registry endpoint: failed to do request: Head https://10.10.30.200:5000/v2/mybuild/manifests/v1: http: server gave HTTP response to HTTPS client
    Warning  Failed     1s (x2 over 13s)   kubelet, k8s-node2  Error: ErrImagePull
    $ cat deployment.yaml
    ---
    apiVersion: apps/v1
    kind: Deployment                                                                                                                                         metadata:
      labels:
        app: myweb
      name: myweb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
          - image: 10.10.30.200:5000/mybuild:v1
            imagePullPolicy: Always
            name: myweb

    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: myweb
      name: myweb
    spec:
      ports:
      - nodePort: 32223
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: myweb
      type: NodePort

1 Ответ

0 голосов
/ 25 февраля 2020

Я воспроизвел вашу проблему, и решение состоит в том, чтобы добавить

{
  "insecure-registry" : ["10.10.30.200:5000"]
}

на каждый узел (рабочие и основные) в /etc/docker/daemon.json в кластере и перезапустить docker sudo systemctl restart docker для загрузки новой конфигурации.

Вы можете следовать этому руководству о том, как настроить небезопасный частный реестр docker с помощью helm.

После успешной установки диаграммы добавьте запись в daemon.json на каждом узле и перезапустите docker. После этого вы можете пометить и выложить sh ваше изображение в хранилище.

Чтобы проверить, было ли изображение успешно отправлено в ваш реестр, вы можете выполнить:

curl -X GET http://10.10.30.200:5000/v2/_catalog

и вывод должен быть похож на это:

{"repositories":["ubuntu/myimage"]}

...