Добро пожаловать в это руководство по использованию Mirantis Container Runtime(MCR) в Kubernetes и Docker Swarm. Сайт Mirantis Container Runtime(MCR) ранее известный как Docker Engine (Enterprise), — это безопасная среда выполнения контейнеров, которая является основой для Mirantis Kubernetes Engine и Container Cloud. Она обеспечивает повышенную безопасность с помощью реестра Mirantis Secure Registry, включающего Content Trust и шифрование по стандарту FIPS 140-2.

Установка Mirantis Container Runtime(MCR) стала проще благодаря внедрению сценария автоматизации. Однако все еще существуют обстоятельства, когда требуется выполнить установку вручную. Например, установка Mirantis Container Runtime(MCR) для подготовки сервера/узла к добавлению в существующий кластер Mirantis Kubernetes Engine, который изначально не управлялся Mirantis Container Cloud.

Mirantis Container Runtime MCR

Mirantis Container Runtime(MCR) предоставляет множество функций и возможностей. Вот некоторые из них:

  • Внутренняя безопасность: По умолчанию он безопасен. Контейнеры развертываются с ограниченным доступом к узлу, сквозным шифрованием, безопасной взаимной аутентификацией TLS и криптографической идентификацией узла.
  • Несколько операционных систем и инфраструктур: Он сертифицирован для работы на различных операционных системах, включая RHEL, Ubuntu, CentOS и Windows.
  • Сертифицированные плагины: Существуют сертифицированные плагины, которые позволяют расширить функциональность Mirantis Container Runtime(MCR). К ним относятся: Calico, Kubernetes ingress solutions, например Istio e.t.c.
  • Принудительное использование подписанных образов: Для проверки подлинности контейнеров перед их развертыванием требуется надлежащая цифровая подпись образов. Это предотвращает использование пользователями образов из неизвестных источников.

Пройдя это руководство до конца, вы получите необходимые знания об использовании Mirantis Container Runtime в Kubernetes и Docker Swarm.

Системные требования

Это руководство будет работать со следующими устройствами:

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

  • 8 ГБ оперативной памяти для узлов менеджера
  • 4 ГБ оперативной памяти для рабочих узлов
  • 2 vCPU для управляющих узлов
  • 25 ГБ свободного дискового пространства

Требования к производственному оборудованию для узлов MKE

  • 16 ГБ оперативной памяти для узлов менеджера
  • 4 vCPU для управляющих узлов
  • 25-100 ГБ свободного дискового пространства. Рекомендуется использовать SSD.

Шаг 1 — Подготовка сервера

В этом руководстве показано, как установить Mirantis Container Runtime(MCR) на несколько дистрибутивов Linux из репозитория.

Начните с удаления предыдущих установок docker:

  • На CentOS/Rhel
sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-selinux \
                runc \
                docker-engine-selinux \
                docker-engine
  • На Ubuntu
sudo apt-get remove docker docker-engine docker-ce docker-ce-cli docker.io
  • На SLES
sudo zypper rm docker docker-engine runc
##OR
sudo rpm -e docker-engine

Шаг 2 — Добавление репозитория Mirantis MCR

Добавьте репозиторий Mirantis Container Runtime(MCR) Repository в свою систему.

  • На Rhel/CentOS

Удалите доступное репо докера:

sudo rm /etc/yum.repos.d/docker*.repo
sudo yum install -y yum-utils
export DOCKERURL="https://repos.mirantis.com"

Включить Экстры Рел репо для установки пакетов container-selinux

##On Rocky Linux 8
sudo -E sh -c 'echo "$DOCKERURL/rocky" > /etc/yum/vars/dockerurl'
sudo sh -c 'echo "8" > /etc/yum/vars/dockerosversion'

##On RHEL 8
sudo -E sh -c 'echo "$DOCKERURL/rhel" > /etc/yum/vars/dockerurl'
sudo sh -c 'echo "8" > /etc/yum/vars/dockerosversion'

##On CentOS 8
sudo -E sh -c 'echo "$DOCKERURL/centos" > /etc/yum/vars/dockerurl'
sudo sh -c 'echo "8" > /etc/yum/vars/dockerosversion'

Теперь добавьте стабильный репозиторий MCR:

sudo -E yum-config-manager \
    --add-repo \
    "$DOCKERURL/centos/docker-ee.repo"
  • На Ubuntu

Начните с установки необходимых пакетов:

sudo apt install \
  apt-transport-https \
  ca-certificates \
  curl \
  software-properties-common

Экспортируйте переменные:

DOCKER_EE_URL="https://repos.mirantis.com"

Добавьте ключи GPG для репозитория:

curl -fsSL "${DOCKER_EE_URL}/ubuntu/gpg" | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mirantis.gpg

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

  • Ubuntu 24.04 / 22.04
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] $DOCKER_EE_URL/ubuntu jammy stable"
  • Ubuntu 20.04
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] $DOCKER_EE_URL/ubuntu focal stable"
  • Ubuntu 18.04
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] $DOCKER_EE_URL/ubuntu bionic stable"
  • На SLES

Экспортируйте переменные:

DOCKER_EE_BASE_URL="https://repos.mirantis.com"
DOCKER_EE_URL="${DOCKER_EE_BASE_URL}/sles/<SLES_VERSION>/<ARCH>/stable-<DOCKER_VERSION>"

Не забудьте заменить значения для:

  • SLES_VERSION — 15 или 12.3.
  • ARCH — x86_64.
  • DOCKER_VERSION — 20.10, есть и более старые версии, такие как 19.03, 18.09, 18.03 и т.д.

Используя переменные, настройте репозиторий:

sudo zypper addrepo $DOCKER_EE_URL docker-ee-stable

Импортируйте ключи GPG:

sudo rpm --import "${DOCKER_EE_BASE_URL}/sles/gpg"

Шаг 3 — Установите Mirantis Container Runtime(MCR)

После того как репозиторий настроен, перейдите к установке Mirantis Container Runtime(MCR) с помощью команды:

##On CentOS/RHEL
sudo yum -y install docker-ee docker-ee-cli containerd.io

##On Ubuntu
sudo apt update
sudo apt install docker-ee docker-ee-cli containerd.io

##On SLES
sudo zypper refresh
sudo zypper install docker-ee docker-ee-cli containerd.io

Вы также можете установить определенную версию для производственных целей:

##On CentOS/RHEL
sudo yum -y install docker-ee-<VERSION_STRING> docker-ee-cli-<VERSION_STRING> containerd.io

##On Ubuntu
sudo apt-get install docker-ee=<VERSION_STRING> docker-ee-cli=<VERSION_STRING> containerd.io

##On SLES
sudo zypper install docker-ee-<VERSION_STRING> docker-ee-cli-<VERSION_STRING> containerd.io

Замените VERSION_STRING с соответствующей версией для установки.

Шаг 4 — Тестирование Mirantis Container Runtime(MCR)

После установки запустите демон докера.

sudo systemctl enable --now docker

Проверьте, запущен ли он:

systemctl status docker

Добавьте своего пользователя в группу Docker.

sudo usermod -aG docker $USER
newgrp docker

Протестируйте, запустив контейнер hello-world.

docker run hello-world

Образец вывода:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
Status: Downloaded newer image for hello-world:latest

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/

Шаг 5 — Использование MCR с Kubernetes

MCR можно использовать для обеспечения контейнерной среды выполнения для подсистем Kubernetes. Можно использовать MCR с Kubernetes напрямую, без MKE. Просто включите cri-dockerплагин.

sudo systemctl enable --now cri-docker.service

Проверьте статус:

$ systemctl status cri-docker.socket
● cri-docker.socket - CRI Docker Socket for the API
   Loaded: loaded (/usr/lib/systemd/system/cri-docker.socket; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2024-06-02 06:11:59 EDT; 10s ago
   Listen: /run/cri-docker.sock (Stream)
    Tasks: 0 (limit: 23505)
   Memory: 4.0K
   CGroup: /system.slice/cri-docker.socket

Из приведенного выше результата мы можем определить сокет по умолчанию:

Listen: /run/cri-docker.sock

Приступаем к использованию Mirantis Container Runtime(MCR). На новом кластере Kubernetes вы можете использовать MCR, как показано на рисунке. Я предполагаю, что у вас уже установлен Kubeadmin и все необходимые кубелеты.

Для этого вы можете воспользоваться приведенным ниже руководством.

  • Развертывание кластера Kubernetes на AlmaLinux 8 с помощью Kubeadm
  • Установка кластера Kubernetes на Ubuntu 20.04 с помощью kubeadm

Создание и извлечение образов контейнеров

sudo kubeadm config images pull --cri-socket /run/cri-docker.sock 

Использование MCR на новом кластере Kubernetes

Теперь загрузите управляющий узел. Приведенный ниже пример можно использовать для контроллера с одним узлом.

sudo kubeadm init \
  --pod-network-cidr=192.168.0.0/16 \
  --cri-socket /run/cri-docker.sock

Пример вывода:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.205.9:6443 --token 4oga4y.6uhgxfvf2cm0hc3g \
	--discovery-token-ca-cert-hash sha256:7adf6b202bf0541bd0612b918477d979b6ed671bdcacf0d3910e521f66abc153 

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

sudo kubeadm reset

После инициализации файл сертификата

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Проверьте, запущены ли узлы:

 kubectl get nodes

Также проверьте, настроена ли конечная точка выполнения:

 sudo cat /var/lib/kubelet/kubeadm-flags.env

Перенос существующих узлов на MCR

Иногда вы можете оказаться в ситуации, когда вам нужно перенести существующие узлы из dockershim в MCR.

Закрепите узел:

kubectl cordon <NODE_NAME>

Продвигайтесь и осушайте узел:

kubectl drain <NODE_NAME> --ignore-daemonsets

Откройте приведенный ниже файл на узле:

sudo vim /var/lib/kubelet/kubeadm-flags.env

Измените строку:

--container-runtime-endpoint
#TO
unix:///var/run/cri-docker.sock

Наконец, отредактируйте YAML-представление для сокета узла:

sudo KUBECONFIG=/etc/kubernetes/admin.conf kubectl edit no <NODE_NAME>

В этом файле измените kubeadm.alpha.kubernetes.io/cri-socket

##FROM
/var/run/dockershim.sock 

##TO
unix:///var/run/cri-docker.sock

Перезапустите кубелет и снимите оцепление с узла:

sudo systemctl restart kubelet
kubectl uncordon <NODE_NAME>

Шаг 6 — Установка лицензии Mirantis CR

Получите лицензию на сайте Mirantis Container Runtime(MCR) страница. Перейдите по ссылке, полученной по электронной почте, чтобы загрузить файл лицензии.

Скопируйте данные файла и вставьте их в корневой каталог в файл под названием docker.lic.

sudi vim /var/lib/docker/docker.lic

После того как файл будет создан, перезапустите MCR.

sudo systemctl restart docker

Проверьте установку.

sudo docker info | grep -i license