Cri-tools#

Cri-tools - набор инструментов, используется в DropApp для взаимодействия с контейнерным временем выполнения, которое соответствуют стандарту Container Runtime Interface (CRI). Он содержит утилиты для запуска и остановки контейнеров, создания и удаления образов контейнеров, а также для получения информации о контейнерах и их статусе. CRI — это интерфейс, который описывает стандартную спецификацию для взаимодействия между DropApp и контейнерным временем выполнения. Это позволяет расширять возможности DropApp и использовать различное время выполнения контейнеров, доступное на рынке с различными функциями и возможностями.

CLI интерфейса времени выполнения контейнера (CRI)#

crictl это интерфейс командной строки для сред выполнения контейнеров, совместимых с CRI. Это позволяет разработчикам среды выполнения CRI отлаживать свою среду выполнения без необходимости настраивать компоненты DropApp.

Список команд, их синтаксис и краткое описание приведены в таблице ниже.

Таблица. Список команд crictl

Синтаксис

Описание

attach

Прикрепить к запущенному контейнеру

create

Создать новый контейнер

exec

Запустить команду в работающем контейнере

version

Отобразить информацию о версии среды выполнения

images , image, img

Вывести список образов

inspect

Отобразить состояние одного или нескольких контейнеров

inspecti

Вернуть статус одного или нескольких образов

imagefsinfo

Вернуть информацию о файловой системе образа

inspectp

Отобразить состояния одного или нескольких pods

logs

Получить журналы контейнера

port-forward

Перенаправить локальный порт на pod

ps

Вывести список контейнеров

pull

Извлечь образ из реестра

run

Запустить новый контейнер внутри тестовой среды

runp

Запустить новый pod

rm

Удалить один или несколько контейнеров

rmi

Удалить один или несколько образов

rmp

Удалить один или несколько pods

pods

Вывести список pods

start

Запустить один или несколько созданных контейнеров

info

Отобразить информацию о среде выполнения контейнера

stop

Остановить один или несколько запущенных контейнеров

stopp

Остановить один или несколько запущенных pod

update

Обновить один или несколько запущенных контейнеров

config

Получить и установить параметры конфигурации crictl

stats

Показать статистику использования ресурсов контейнера(ов)

statsp

Показать статистику использования ресурсов pods

completion

Вывести код завершения оболочки bash

checkpoint

Вывести контрольную точку одного или нескольких запущенных контейнеров

help, h

Вывести список команд или справку для одной команды

Сценарии использования crictl состоят в применении команд, обозначенных в таблице и имеют следующий синтаксис:

crictl [global options] command [command options] [arguments...]

Например, команда crictl config --set debug=true устанавливает режим отладки при подаче последующих crictl команд.

Crictl по умолчанию подключается в Unix к unix:///var/run/dockershim.sock или unix:///run/containerd/containerd.sock или unix:///run/crio/crio.sock или unix:///var/run/cri-dockerd.sock

Конечная точка может быть установлена тремя способами:

  • установите глобальные флаги опций --runtime-endpoint( -r) и --image-endpoint( -i);

  • установите переменные окружения CONTAINER_RUNTIME_ENDPOINT_IMAGE_SERVICE_ENDPOINT;

  • установите конечную точку в файле конфигурации --config=/etc/crictl.yaml.

Если конечная точка среды выполнения не установлена, crictl по умолчанию будет пытаться подключиться с помощью cri-o.

Если конечная точка образа не задана, по умолчанию будет использоваться конечная точка времени выполнения:

cat /etc/crictl.yaml
runtime-endpoint: unix:///var/run/dockershim.sock
image-endpoint: unix:///var/run/dockershim.sock
timeout: 2
debug: true
pull-image-on-create: false

Сценарий использования crictl#

Примечание

Указанные далее хеши не существуют и приведены в качестве примера.

Чтобы использовать crictl:

  1. Загрузите crictl из репозитория, предоставленного разработчиком используя curl:

    VERSION="v1.26.0" # check latest version in /releases page
    curl -L https://<example>/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
    sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
    rm -f crictl-$VERSION-linux-amd64.tar.gz
    

    Примечание

    Выберите архив соответствующий текущему типу процессора в среде развертывания, в приведенном примере указан архив соответствующий архитектуре процессоров AMD.

  2. Запустите pod с конфигурационным файлом:

    cat pod-config.json
    {
    "metadata": {
    "name": "nginx-sandbox",
    "namespace": "default",
    "attempt": 1,
    "uid": "<UID>"
    },
    "log_directory": "/tmp",
    "linux": {
    }
    }
    
    crictl runp pod-config.json
    f00dd000dc00000ed000fbadd0db000b0000000c0d0d0c00ff000ce0c0a00f
    
  3. Убедитесь, что pods находится в состоянии Ready:

    crictl pods
    POD ID              CREATED             STATE               NAME                NAMESPACE           ATTEMPT
    f84dd361f8dc5       17 seconds ago      Ready               nginx-sandbox       default             1
    

    Это команда crictl, которая показывает список всех установленных pods (pods - это наборы программного обеспечения) в контейнере Docker. Команда crictl использует опцию pods, чтобы получить список всех установленных наборов программного обеспечения в контейнере Docker.

    Опция pods указывает имя хоста и порт контейнера Docker, где были установлены pods. Команда crictl выводит список всех установленных pods в указанном контейнере.

    Например, если контейнер Docker запущен на хосте hostname и порте контейнера port, то команда crictl выведет следующий список установленных pods:

    • default;

    • nginx-sandbox.

  4. Запустите рабочую среду pod с обработчиком времени выполнения:

    cat pod-config.json
    {
    "metadata": {
    "name": "nginx-runsc-sandbox",
    "namespace": "default",
    "attempt": 1,
    "uid": "<UID>"
    },
    "log_directory": "/tmp",
    "linux": {
    }
    }
    
    crictl runp --runtime=runsc pod-config.json
    c000000cb0caa00a000000e0c00a0e0d0d0000d0000afef000f000000000000c
    
    crictl inspectp c000000cb0caa00a000000e0c00a0e0d0d0000d0000afef000f000000000000c
    ...
    "runtime": {
    "runtimeType": "io.containerd.runtime.v1.linux",
    "runtimeEngine": "/usr/local/sbin/runsc",
    "runtimeRoot": "/run/containerd/runsc"
    },
    ...
    

    В приведенном примере показан запуск рабочей среды pod с runsc обработчиком.

  5. Извлеките образ busybox:

    crictl pull busybox
    Image is up to date for busybox@sha256:000c000bc0c0fd0a000d00dc0f0bcf0fff000b0df000dea0f00000e0f00d00
    
  6. Перечислите образы и убедитесь, что выбранный образ busybox загружен:

    crictl images
    IMAGE               TAG                 IMAGE ID            SIZE
    busybox             latest              8c811b4aec35f       1.15MB
    k8s.gcr.io/pause    3.1                 da86e6ba6ca19       742kB
    
  7. Создайте контейнер с файлом конфигурации:

    cat pod-config.json
    {
        "metadata": {
            "name": "nginx-sandbox",
            "namespace": "default",
            "attempt": 1,
            "uid": "<UID>"
        },
        "log_directory": "/tmp",
        "linux": {
        }
    }
    
    cat container-config.json
    {
    "metadata": {
        "name": "busybox"
    },
    "image":{
        "image": "busybox"
    },
    "command": [
        "top"
    ],
    "log_path":"busybox.0.log",
    "linux": {
    }
    }
    
    crictl create f00dd000dc00000ed000fbadd0db000b0000000c0d0d0c00ff000ce0c0a00f container-config.json pod-config.json
    0e000dd00a00d000c0f00001fbb0b0000c0000000e00fb00f000f0000a000d00
    
  8. Перечислите контейнеры и убедитесь, что созданный контейнер находится в статусе Created:

    crictl ps -a
    CONTAINER ID        IMAGE               CREATED             STATE               NAME                ATTEMPT
    3e025dd50a72d       busybox             32 seconds ago      Created             busybox             0
    
  9. Запустите стартовый контейнер:

    crictl start 0e000dd00a00d000c0f00001fbb0b0000c0000000e00fb00f000f0000a000d00
    0e000dd00a00d000c0f00001fbb0b0000c0000000e00fb00f000f0000a000d00
    
  10. Убедитесь, что контейнер находится в состоянии Running:

    crictl ps
    CONTAINER ID        IMAGE               CREATED              STATE               NAME                ATTEMPT
    3e025dd50a72d       busybox             About a minute ago   Running             busybox             0
    
  11. Выполните команду в контейнере:

    crictl exec -i -t 0e000dd00a00d000c0f00001fbb0b0000c0000000e00fb00f000f0000a000d00 ls
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    
  12. Создайте и запустите контейнер одной командой:

    cat pod-config.json
    {
    "metadata": {
    "name": "nginx-sandbox",
    "namespace": "default",
    "attempt": 1,
    "uid": "<UID>"
    },
    "log_directory": "/tmp",
    "linux": {
    }
    }
    
    cat container-config.json
    {
    "metadata": {
    "name": "busybox"
    },
    "image":{
    "image": "busybox"
    },
    "command": [
    "top"
    ],
    "log_path":"busybox.0.log",
    "linux": {
    }
    }
    
    crictl run container-config.json pod-config.json
    b00b0f00e000000eb00d00e00000eee0000000d000e00deac000000a0b0f0cf0
    
  13. Выведите список контейнеров и убедитесь, что busybox находится в состоянии Running:

    crictl ps
    CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
    b25b4f26e3429       busybox:latest      14 seconds ago      Running             busybox             0                   158d7a6665ff3
    

    Выше представлен вывод команды crictl ps, которая показывает информацию о контейнерах, запущенных на kubernetes. В данном случае, информация выводится о контейнере busybox, который запущен на основе образа busybox:latest.

    В выводе указаны следующие поля:

    • CONTAINER: уникальный идентификатор контейнера, который может быть использован для управления им;

    • IMAGE: имя образа, из которого был запущен контейнер;

    • CREATED: время создания контейнера;

    • STATE: текущее состояние контейнера (Running - запущен);

    • NAME: имя контейнера;

    • ATTEMPT: количество попыток запуска контейнера;

    • POD ID: идентификатор Pod, в котором запущен контейнер.

Команда crictl используется для управления контейнерами на кластерах. Она позволяет выполнять различные операции, такие как запуск, остановка, удаление контейнеров, а также получать информацию о них.