Добро пожаловать в это руководство по использованию 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) предоставляет множество функций и возможностей. Вот некоторые из них:
- Внутренняя безопасность: По умолчанию он безопасен. Контейнеры развертываются с ограниченным доступом к узлу, сквозным шифрованием, безопасной взаимной аутентификацией 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