cat << EOF > /etc/modules-load.d/containerd.conf
overlay
EOF
modprobe overlay
Развёртывание containerd 1.x в изолированной среде
1. Добавление загрузки модуля overlay в систему
Модуль overlay добавляет в систему поддержку файловой системы OverlayFS. Эта файловая система используется для хранения слоёв образов, которые использует containerd.
Этот шаг можно пропустить, так как загрузка модуля overlay выполняется через systemd-юнит 'containerd.service', где присутствует строка 'ExecStartPre=-/sbin/modprobe overlay'. |
-
Выполните:
2. Скачивание компонентов containerd из внутреннего raw-репозитория
-
Если внутренний репозиторий требует аутентификации, то задайте учётные данные для скачивания компонентов containerd:
set +o history USER_PASS='ken:xxxxxxxxxxxxxxx' set -o history
-
Скачайте компоненты, предварительно изменив номера версий на актуальные:
CONTAINERD_VER='1.7.16' CONTAINERD_SERVICE_VER='231012' RUNC_VER='1.1.12' INTERNAL_REPO='http://nexus.example.org:8081/repository/evolut_raw' REPO_FOLDER='kubernetes/containerd' mkdir -p /root/tmp cd /root/tmp curl -LO -u $USER_PASS ${INTERNAL_REPO}/${REPO_FOLDER}/containerd-${CONTAINERD_VER}-linux-amd64.tar.gz curl -LO -u $USER_PASS ${INTERNAL_REPO}/${REPO_FOLDER}/containerd.service.${CONTAINERD_SERVICE_VER} curl -LO -u $USER_PASS ${INTERNAL_REPO}/${REPO_FOLDER}/runc.amd64-${RUNC_VER}
3. Установка containerd
-
Распакуйте containerd в каталог
/usr/local
:tar Cxvf /usr/local containerd-${CONTAINERD_VER}-linux-amd64.tar.gz
stdout:
bin/ bin/containerd-shim-runc-v2 bin/containerd-stress bin/containerd bin/containerd-shim-runc-v1 bin/ctr bin/containerd-shim
4. Добавление в систему systemd-юнит containerd
-
Добавьте в Systemd ранее скачанный юнит:
cp containerd.service.${CONTAINERD_SERVICE_VER} /etc/systemd/system/containerd.service systemctl daemon-reload
5. Установка runc
-
Скопируйте ранее скачанный runc в каталог
/usr/local/sbin/
:install -m 755 runc.amd64-${RUNC_VER} /usr/local/sbin/runc
6. Создание файла конфигурации containerd
-
Сгенерируйте конфиг по-умолчанию для containerd:
mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml
7. Конфигурирование containerd
-
Включите в конфиге использование 'Control Group':
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
-
Переключите версию pause-образа:
sed -i "s|pause:3.8|pause:3.9|" /etc/containerd/config.toml
Почему меняем образ pause:3.8 на pause:3.9?Потому что видел в логах инициализации кластера фразу: 'detected that the sandbox image "registry.k8s.io/pause:3.8" of the container runtime is inconsistent with that used by kubeadm. It is recommended that using "registry.k8s.io/pause:3.9" as the CRI sandbox image.'
Перепроверить!
-
Если требуется, то приведите опцию 'bin_dir' в секции '[plugins."io.containerd.grpc.v1.cri".cni]' к актуальному значению. В опции указан каталог, где будет установлен пакет cni-plugins и куда будут распаковываться устанавливаемые плагины, например cilium:
bin_dir = "/opt/cni/bin"
8. Перенастройка для работы с внутренним registry
Использованные материалы:
|
-
Выполните:
INTERNAL_REGISTRY='https://dockerhub.example.org' PRIVATE_REGISTRY='nexus.example.org:5022' PRIVATE_REGISTRY_HTTP='http://${PRIVATE_REGISTRY}' mkdir -p /etc/containerd/certs.d/_default cat << EOF > /etc/containerd/certs.d/_default/hosts.toml [host."${INTERNAL_REGISTRY}"] capabilities = ["pull", "resolve"] #skip_verify = true EOF mkdir -p /etc/containerd/certs.d/${PRIVATE_REGISTRY} cat << EOF > /etc/containerd/certs.d/${PRIVATE_REGISTRY}/hosts.toml [host."${PRIVATE_REGISTRY_HTTP}"] capabilities = ["pull", "resolve"] inscure_skip_verify = true EOF # Поиск строки .registry и замена следующей строки на # config_path = "/etc/containerd/certs.d" sed -i '/\.registry\]/{ n; s|config_path = .*|config_path = \"/etc/containerd/certs.d\"|g }' /etc/containerd/config.toml
9. Запуск containerd
-
Включите и запустите демон containerd:
systemctl enable --now containerd
10. Тестирование containerd
-
С комментариями
-
Одним скриптом
-
С помощью утилиты
ctr
убедитесь, что списки контейнеров и образов в containerd пусты:ctr c ls #ctr containers ls ctr i ls #ctr images ls
-
Скачайте 'Hello, World' для Docker’а:
ctr images pull --hosts-dir "/etc/containerd/certs.d" \ docker.io/hello-world:latest
stdout:docker.io/hello-world:latest: resolved |++++++++++++++++++++++++++++++++++++++| index-sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75: done |++++++++++++++++++++++++++++++++++++++| manifest-sha256:e2fc4e5012d16e7fe466f5291c476431beaa1f9b90a5c2125b493ed28e2aba57: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:c1ec31eb59444d78df06a974d155e597c894ab4cda84f08294145e845394988e: done |++++++++++++++++++++++++++++++++++++++| config-sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a: done |++++++++++++++++++++++++++++++++++++++| elapsed: 1.1 s total: 12.5 K (11.4 KiB/s) unpacking linux/amd64 sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75... done: 31.118275ms
-
Запустите тестовый контейнер 'Hello, World':
ctr run -rm docker.io/hello-world:latest hello-world
stdout:Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
-
Удалите ранее скачанный образ:
ctr i rm docker.io/hello-world:latest
-
Вновь убедитесь, что списки контейнеров и образов пусты:
ctr c ls ctr i ls
-
Выполните:
ctr c ls #ctr containers ls ctr i ls #ctr images ls ctr images pull --hosts-dir "/etc/containerd/certs.d" \ docker.io/hello-world:latest ctr run -rm docker.io/hello-world:latest hello-world ctr i rm docker.io/hello-world:latest ctr c ls ctr i ls