Поиск по сайту:

Как установить среду выполнения контейнера CRI-O в Ubuntu 22.04


CRI-O — это облегченная среда выполнения контейнеров, альтернатива Docker для Kubernetes. Это реализация Kubernetes CRI (интерфейс времени выполнения контейнера) и соответствие среде выполнения OCI (инициатива Open Container). CRI-O позволяет Kubernetes выполнять контейнеры напрямую без каких-либо дополнительных инструментов или корректировок кода.

CRI-O поддерживает несколько форматов образов, включая формат образа Docker. Также предоставляет функциональные возможности для управления образами контейнеров, такие как управление уровнем образа, файловыми системами наложения, управление жизненным циклом процесса контейнера, мониторинг и ведение журнала для контейнеров, а также обеспечивает изоляцию ресурсов.

Это руководство поможет вам установить среду выполнения контейнера CRI-O на сервере Ubuntu 22.04. Это также включает в себя настройку подключаемого модуля CNI с CRI-O и базовое использование \cri-tools\ для управления модулями и контейнерами.

Предпосылка

Прежде чем начать, вы должны иметь следующие требования:

  • Сервер Ubuntu 22.04. В этом руководстве используется сервер Ubuntu с именем хоста \server-ubuntu\ и IP-адресом сервера \192.168.5.10\.
  • Пользователь без полномочий root с правами root/администратора.

Установка среды выполнения контейнера CRI-O

CRI-O можно установить разными способами: установить с помощью команды APT или собрать и установить CRI-O из исходного кода. в этом примере вы установите среду выполнения контейнера CRI-O через сторонний репозиторий.

Перед началом установки выполните следующую команду, чтобы настроить переменную среды \$OS\ и \$CRIO_VERSION\. В этом примере мы установим CRI-O v1.24.0 для Ubuntu 22.04.

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

Теперь выполните следующую команду, чтобы добавить репозиторий CRI-O для сервера Ubuntu 22.04.

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

Добавьте ключ GPG для репозитория CRI-O, используя приведенную ниже команду.

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

Теперь обновите репозиторий Ubuntu и обновите индекс пакета. Вы должны увидеть, что репозиторий CRI-O добавлен в список индексов пакетов.

sudo apt update

После этого проверьте версию пакета CRI-O с помощью приведенной ниже команды. Как видите, вы установите последнюю версию пакета CRI-O v1.24.

sudo apt info cri-o

Теперь установите среду выполнения контейнера CRI-O с помощью приведенной ниже команды apt. Введите Y, чтобы подтвердить установку, и нажмите ENTER, чтобы продолжить, и установка начнется.

sudo apt install cri-o cri-o-runc

После завершения установки запустите службу CRI-O и включите ее с помощью приведенной ниже команды \systemctl\.

sudo systemctl start crio
sudo systemctl enable crio

Наконец, проверьте и проверьте службу CRI-O, используя приведенную ниже команду. Вы должны увидеть, что служба CRI-O включена и будет автоматически запускаться при загрузке системы. И текущий статус службы CRI-O работает.

sudo systemctl status crio

Установка плагина CNI (контейнерный сетевой интерфейс)

CNI (контейнерный сетевой интерфейс) требуется для среды выполнения контейнера CRI-O. Плагин CNI позволяет настроить сеть в контейнере и модулях. Вы установите плагин CNI из официального репозитория Ubuntu и настроите его с помощью среды выполнения контейнера CRI-O.

Пакет \containernetworking-plugins\ в основном доступен в дистрибутивах Linux. Чтобы установить его, запустите команду apt ниже, и установка начнется.

sudo apt install containernetworking-plugins

После завершения установки отредактируйте файл конфигурации CRI-O \/etc/crio/crio.conf\ с помощью следующей команды.

sudo nano /etc/crio/crio.conf

В разделе \[crio.network]\ раскомментируйте опции \network_dir\ и \plugin_dirs\. Кроме того, не забудьте добавить каталог подключаемых модулей CNI \/usr/lib/cni/\ в параметр \plugin_dirs\.

# The crio.network table containers settings pertaining to the management of
# CNI plugins.
[crio.network]

# The default CNI network name to be selected. If not set or "", then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = ""

# Path to the directory where CNI configuration files are located.
network_dir = "/etc/cni/net.d/"

# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
        "/opt/cni/bin/",
        "/usr/lib/cni/",
]

Когда вы закончите, сохраните и закройте файл.

Затем удалите конфигурацию моста CNI по умолчанию \/etc/cni/net.d/100-crio-bridge.conf\. Затем загрузите новую конфигурацию моста CNI в \/etc/cni/net.d/11-crio-ipv4-bridge.conf\.

Новая конфигурация моста CNI будет включать только IPv4 для модулей и контейнеров.

rm -f /etc/cni/net.d/100-crio-bridge.conf
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf

Теперь перезапустите службу CRI-O, чтобы применить новые изменения в настройках плагина CNI.

sudo systemctl restart crio

Наконец, проверьте и снова проверьте службу CRI-O, используя приведенную ниже команду. Вы должны увидеть, что служба CRI-O работает с новой конфигурацией моста CNI.

sudo systemctl status crio

Установка пакета CRI-Tools

Вы завершили установку среды выполнения контейнера CRI-O, и теперь она работает с правильным подключаемым модулем CNI. Теперь вы установите пакет cri-tools, который включает утилиту командной строки crictl, которую можно использовать для взаимодействия со средой выполнения контейнера CRI-O.

\cri-tools\ можно использовать с несколькими средами выполнения контейнеров, такими как containerd, dockershim, CRI-O и cri-dockerd.

Запустите приведенную ниже команду apt, чтобы установить пакет \cri-tools\. Установка начнется автоматически.

sudo apt install cri-tools

После завершения установки выполните приведенную ниже команду \crictl\, чтобы проверить текущую версию среды выполнения. вы увидите, что текущая среда выполнения контейнера, которую вы используете, — это CRI-O v1.24.

crictl version

Затем выполните приведенную ниже команду \crictl\, чтобы проверить состояние текущей среды выполнения контейнера и сетевого подключаемого модуля CNI. Вы должны увидеть, что среда выполнения контейнера CRI-O находится в состоянии \RuntimeReady\, а подключаемый модуль CNI - в состоянии \NetworkReady\.

crictl info

Команда crictl обеспечивает автодополнение для вашей оболочки, которое можно сгенерировать вручную. Запустите приведенную ниже команду crictl, чтобы сгенерировать завершение команды для оболочки Bash в \/etc/bash_completion.d/crictl\. Затем перезагрузите текущий сеанс Bash, используя файл конфигурации ~/.bashrc.

crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc

Теперь запустите команду \crictl\ и нажмите клавишу TAB, чтобы просмотреть все доступные варианты завершения команд.

crictl TAB

Создание пода и контейнера с помощью crictl

Теперь, когда cri-tools установлен в вашей системе, пришло время создать песочницу и контейнер Pod с помощью команды \crictl\. В этом примере мы создадим Pod для контейнера Nginx.

Создайте новый каталог \~/demo\ с помощью приведенной ниже команды.

mkdir ~/demo/

Теперь выполните приведенную ниже команду, чтобы создать новый файл конфигурации JSON и определить песочницу Pod для контейнера.

cat <<EOF | tee ~/demo/sandbox_nginx.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "linux": {
    },
    "log_directory": "/tmp"
}
EOF

Запустите тестовую программную среду Pod с помощью приведенной ниже команды \crictl\. И вы должны увидеть случайную строку вашего пода.

sudo crictl runp ~/demo/sandbox_nginx.json

Проверьте и проверьте работающие поды, используя приведенную ниже команду. Вы должны увидеть тестовую программную среду пода \nginx-sandbox\ с идентификатором пода \7b0618800e251\ в состоянии \Готово\. .

sudo crictl pods

Чтобы проверить сведения о поде, выполните приведенную ниже команду \crictl\ и обязательно измените идентификатор пода. В этом примере модуль \nginx_sandbox\ имеет IP-адрес \10.85.0.3\.

sudo crictl inspectp --output table 7b0618800e251

Теперь, когда песочница Pod готова, пришло время создать контейнер Nginx. Но сначала вы скачаете образ Nginx.

Запустите следующую команду crictl ниже, чтобы загрузить образ Nginx. Затем проверьте и проверьте список доступных изображений.

sudo crictl pull nginx
sudo crictl images

Теперь выполните следующую команду, чтобы создать новый файл JSON для определения контейнера Nginx.

cat <<EOF | tee ~/demo/container_nginx.json
{
  "metadata": {
      "name": "nginx"
    },
  "image":{
      "image": "nginx"
    },
  "log_path":"nginx.0.log",
  "linux": {
  }
}
EOF

Создайте новый контейнер в песочнице Pod \7b0618800e251\, используя приведенную ниже команду crictl. Вы должны увидеть случайную строку вашего нового идентификатора контейнера Nginx.

sudo crictl create 7b0618800e251 ~/demo/container_nginx.json ~/demo/sandbox_nginx.json

Запустите контейнер Nginx с помощью приведенной ниже команды и обязательно измените идентификатор контейнера.

sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746

После этого проверьте и проверьте работающий контейнер с помощью приведенной ниже команды. Вы должны увидеть, что контейнер Nginx \Выполняется\ внутри модуля \7b0618800e251\.

sudo crictl ps

Наконец, вы можете получить доступ к контейнеру Nginx через IP-адрес песочницы Pod \nginx_sandbox\. Запустите команду curl для \nginx_sandbox\ IP-адреса \10.85.0.3\, и вы увидите страницу index.html по умолчанию вашего контейнера Nginx.

curl 10.85.0.3

Заключение

Вы завершили установку и настройку среды выполнения контейнера CRI-O с подключаемым модулем CNI на сервере Ubuntu 22.04. Теперь вы можете использовать его в качестве среды выполнения контейнера для кластера Kubernetes. Вы также изучили основное использование команды crictl для создания стручков и контейнеров с помощью CRI-O Container Runtime.