эквивалент вытяжки докера в кубектле - PullRequest
0 голосов
/ 19 июня 2019

Docker предоставляет способ запуска контейнера с помощью docker run

Или просто потяните изображение контейнера, используя docker pull

Найден документ , отображающий сопоставление между командами Docker и kubectl.

Не удалось найти docker pull эквивалент в этом документе.

Если нет такого эквивалента docker pull, то есть ли способ просто вытянуть изображение, используя kubectl cli.

Ответы [ 5 ]

1 голос
/ 19 июня 2019

Я думаю, что нет эквивалента kubectl ..., и некоторые из причин могут быть:

  • они не эквивалентны ?.Когда вы docker pull получаете изображение, вы планируете впоследствии использовать его на хосте докера.Когда вы kubectl ... развертываете, вы хотите, чтобы платформа планировала все.Например, если у вас много рабочих узлов, а реплики планируется запланировать только на два из них, то другие узлы не должны извлекать изображение.
  • kubectl - это инструменткоторый общается с сервером API для управления кластером.Было бы неправильно делать так, чтобы он также отвечал за образы контейнеров (см. Leaky Abstractions ), поскольку у вас есть инструмент более низкого уровня, который обращается к интерфейсу среды выполнения контейнера для этого: crictl.

    k8s-master:~$ crictl --help
    NAME:
       crictl - client for CRI
    
    USAGE:
       crictl [global options] command [command options] [arguments...]
    
    VERSION:
       v1.12.0
    
    COMMANDS:
         attach        Attach to a running container
         create        Create a new container
         exec          Run a command in a running container
         version       Display runtime version information
         images        List images
         inspect       Display the status of one or more containers
         inspecti      Return the status of one or more images
         inspectp      Display the status of one or more pods
         logs          Fetch the logs of a container
         port-forward  Forward local port to a pod
         ps            List containers
         pull          Pull an image from a registry
         ...
    

    рис .: www.aquasec.com / wiki / display / Containers / Kubernetes + Архитектура + 101 enter image description here

  • то, что происходит со временем работы контейнера под капотом, является сложным и продолжает развиваться.Подумайте об этом, люди начали создавать кластеры Kubernetes, а контейнерным движком был Docker.Затем Docker принял containerd, поэтому у нас был Kubernetes поверх Docker поверх containerd, что вызвало такие проблемы:

    Пользователи не увидят, как Kubernetes вытягивал изображения с помощью команды docker images... И наоборот, Kubernetes не увидит изображения, созданные с помощью команд docker pull, docker load или docker build ...

    source / more details: Интеграция с Kubernetes ContainerdИдет GA

    enter image description here

1 голос
/ 19 июня 2019

Короче - нет, нет.

А с чего бы это?Kubernetes - это инструмент оркестровки для Docker, он автоматически вытянет для вас модули, если они понадобятся, поэтому на самом деле не нужно иметь команду для извлечения контейнеров вручную.

0 голосов
/ 25 июня 2019

Это может быть немного сложно, но можно достичь результатов, аналогичных docker pull, используя kubectl.Вам просто нужно знать, как выйти из контейнеров с нулевым кодом выхода.

Идея состоит в том, чтобы получить несколько изображений на всех узлах в кластере Kubernetes.Для этого вы можете создать DaemonSet , который попытается создать блоки на каждом соответствующем узле в кластере.Чтобы получить несколько изображений одновременно, просто добавьте несколько initContainers в шаблон DaemonSet.ImagePullPolicy установлен на IfNotPresent, restartPolicy установлен на Never.Установите command индивидуально для каждого initContainer, чтобы он успешно завершился.Вам нужно что-то вроде sh -c "exit 0", просто убедитесь, что контейнер содержит двоичный файл sh, или используйте другую возможную команду, которая обычно дает нулевой код выхода: <appname_binary> version или <appname_binary> --help.

После применения этого DaemonSetдля кластера Kubernetes создает Pod из шаблонов DaemonSet на каждом узле и запускает каждый initContainer в Pod в порядке присутствия.Перед запуском каждого контейнера kubelet вытягивает изображение, необходимое для запуска этого контейнера.

Когда вы видите, что все модули DaemonSet успешно завершены - вы можете быть уверены, что на каждом узле у вас есть все изображения, необходимые для запуска этих контейнеров.

Вы можете играть с nodeAffinity или портит / допуски , если вы хотите запускать DaemonSet только на определенных узлах.

0 голосов
/ 19 июня 2019

Вы не найдете эквивалент docker pull в Kubernetes, потому что эта команда связана с управлением изображениями.Объяснение ниже.

Одной из возможностей Docker является возможность создания Images.Вы можете создать свое собственное изображение, используя Dockerfile (docker build .) или извлекая из Docker Hub , который содержит множество предварительно созданных изображений.

Если вы используете команду pull, она просто загрузит образ, не развернет ни один контейнер.

$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        5 months ago        1.84kB

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Как видите, $ docker pull будет отображать только загруженное изображение.Поскольку Docker также отвечает за управление изображениями, вы можете pull или push изображения в хранилище (DockerHub).

Чтобы создать контейнер в Docker, вам нужно использовать $ docker run.Эта команда автоматически загрузит образ и запустит контейнер.

$ docker run --name mynginx -p 80:80 -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
...

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
4abf804611a8        nginx               "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:80->80/tcp   mynginx

Вкратце:

Create добавляет записываемый контейнер поверх вашего изображения и настраивает его для выполнения любой указанной вами командыв вашем CMD.Идентификатор контейнера сообщается обратно, но он не запускается.

Start запустит все остановленные контейнеры.Сюда входят только что созданные контейнеры.

Run - это комбинация создания и запуска.Он создает контейнер и запускает его.

Kubernetes - система управления контейнером, поэтому он не отвечает за создание или редактирование изображений. Именно поэтому вы не найдете эквивалента docker pull (загрузить только изображение).

Команды типа kubectl apply -f <deployment> с изображением внутри файла YAML или kubectl run nginx --image=nginx основаны на изображениях из DockerHub(больше похоже на docker create).

Надеюсь, это помогло.

0 голосов
/ 19 июня 2019

Нет необходимости тянуть куберне в кли.

Почему?

Поскольку вы запускаете kubectl create -f template.yml, он запоминает изображение и проверяет, существует изображение или нет. Если он не существует, он автоматически вытягивает изображение.

...