- Поддержка нескольких форматов образов, включая существующий формат Docker
- Поддержка нескольких способов загрузки образов, включая доверие и проверку
- Управление образами контейнеров (управление слоями, наложением файловых систем и т. д.)
- Управление жизненным циклом контейнерного процесса
- Мониторинг и регистрация
- Изоляция ресурсов в соответствии с требованиями CRI
- Runtime: runc (или любая реализация спецификации времени выполнения OCI) и инструменты времени выполнения oci
- Image: Управление образами
- Storage: хранение и управление слоями образов с использованием контейнеров / хранилища
- Network: поддержка сети через использование CNI
Установим CRI-O на Ubuntu 20.04 | 18.04
Мы будем использовать готовые бинарные пакеты для установки среды выполнения контейнера CRI-O.
Выполните следующие действия, чтобы CRI-O на Ubuntu 20.04 | 18.04.
Шаг 1: Обновление системы
Убедитесь, что ваша система Ubuntu обновлена.
Если вы боитесь, что это может сломать вашу систему, вы можете пропустить этот шаг.
sudo apt update && sudo apt upgrade
Рекомендуется перезагрузить систему, чтобы убедиться, что она работает в обновленной версии.
sudo systemctl reboot
Шаг 2: Добавьте репозиторий CRI-O Kubic
Добавьте репозиторий Kubic, который содержит бинарные пакеты для систем на основе Debian.
Если вы используете CRI-O с Kubernetes, установите версию, соответствующую версии Kubernetes, которую вы хотите настроить.
Если у вас Kubernetes версия 1.17, установите CRI-O версию 1.17.
CRIO_VERSION=1.17
. /etc/os-release
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /' >/etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O- | sudo apt-key add -
Шаг 3. Установите CRI-O на Ubuntu 20.04 | Ubuntu 18.04
Когда репозиторий добавлен, обновите кэш apt и установите CRI-O в Ubuntu.
sudo apt update
sudo apt install cri-o-${CRIO_VERSION}
Примите приглашение установки клавишей y.
The following additional packages will be installed:
conmon containers-common containers-golang containers-image libgpgme11 runc
Suggested packages:
containernetworking-plugins
The following NEW packages will be installed:
conmon containers-common containers-golang containers-image cri-o-1.17 libgpgme11 runc
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 23.3 MB of archives.
After this operation, 107 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Запустите и включите сервис Crio:
sudo systemctl enable crio.service
sudo systemctl start crio.service
Статус сервиса можно проверить с помощью команды:
$ systemctl status crio
● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-06-07 20:16:50 CEST; 37s ago
Docs: https://github.com/cri-o/cri-o
Main PID: 2461 (crio)
Tasks: 13
Memory: 7.7M
CGroup: /system.slice/crio.service
└─2461 /usr/bin/crio
Jun 07 20:16:50 ubuntu systemd[1]: Starting Container Runtime Interface for OCI (CRI-O)...
Jun 07 20:16:50 ubuntu systemd[1]: Started Container Runtime Interface for OCI (CRI-O).
Шаг 4. Использование CRI-O на Ubuntu 20.04 | 18.04
Инструмент командной строки crioctl может быть установлен через пакет cri-tools.
sudo apt install cri-tools
Проверьте наличие команды crictl:
$ crictl info
{
"status": {
"conditions": [
{
"type": "RuntimeReady",
"status": true,
"reason": "",
"message": ""
},
{
"type": "NetworkReady",
"status": false,
"reason": "NetworkPluginNotReady",
"message": "Network plugin returns error: Missing CNI default network"
}
]
}
}
# crictl pull nginx
Image is up to date for docker.io/library/nginx@sha256:c870bf53de0357813af37b9500cb1c2ff9fb4c00120d5fe1d75c21591293c34d
# crictl pull hello-world
Image is up to date for docker.io/library/hello-world@sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
# crictl pull busybox
Image is up to date for docker.io/library/busybox@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Отобразим список доступных образов:
# crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/library/alpine latest a24bb4013296f 5.85MB
docker.io/library/busybox latest 1c35c44120825 1.44MB
docker.io/library/hello-world latest bf756fb1ae65a 20kB
docker.io/library/nginx latest 4392e5dad77db
cat >nginx.json<<EOF
{
"metadata": {
"name": "nginx-container",
"attempt": 1
},
"image": {
"image": "nginx"
},
"log_path": "nginx.log",
"linux": {
"security_context": {
"namespace_options": {}
}
}
}
EOF
cat >net-pod.json<<EOF
{
"metadata": {
"name": "networking",
"uid": "networking-pod-uid",
"namespace": "default",
"attempt": 1
},
"hostname": "networking",
"port_mappings": [
{
"container_port": 80
}
],
"log_directory": "/tmp/net-pod",
"linux": {}
}
EOF
Запустите под:
sudo crictl runp net-pod.json
sudo crictl create nginx.json net-pod.json
sudo crictl ps -a