vSphere Integrated Containers это проект для запуска контейнерных приложений в корпоративной инфраструктуре. Данная платформа совмещает в себе преимущества от использования технологий виртуализации и контейнеризации приложений: каждый контейнер разворачивается на отдельной минимальной виртуальной машине используя полностью совместимые с docker образы и интерфейс разработчиков.
vSphere Integrated Containers состоит из трёх основных частей:
- Harbor – реестр контейнеров. Корпоративное хранилище образов docker с поддержкой ролевой системы доступа, проверкой образов на наличие уязвимостей, возможностью подписи и репликации образов.
- VIC Engine – модуль, обеспечивающий интеграцию технологий контейнеризации и виртуальной инфраструктуры организации.
- Admiral – портал управления. Единый портал, предоставляющий полный набор инструментов для управления проектами и пользователями, реестрами и безопасностью, хостами и контейнерами.
Для получения общего предствавления о том, что такое VIC, прочитайте статью “VIC: обзор”
Официальная документация VIC: https://vmware.github.io/vic-product/assets/files/html/1.3
Harbor – корпоративный реестр контейнеров
Основные возможности:
- отдельные реестры по проектам;
- ролевая модель доступа;
- сканирование образов на наличие уязвимостей (Clair);
- подпись образов;
- RESTful API
Все проекты на Harbor имеют либо публичные, либо закрытые реестры. С реестра с публичным доступом образ контейнера может загрузить любой зарегистрированный пользователь. Закрытые реестры – рабочие хранилища в рамках Ваших проектов.
Пример подключения к нашему частному реестру (доступен только из внутренней сети):
docker login vic.zabedu.ru -u vic-developer@vsphere.local Password: Login Succeeded
Если docker ругается на сертификат, то нужно скачать сертификат реестра, поместить в /etc/docker/certs.d/vic.zabedu.ru/ и перезапустить службу docker:
service docker restart
В реестре проекта с открытым публичным доступом (у нас он называется zabedu) уже находится несколько образов, чтобы Вы могли сразу начать работу с контейнерами. Доступны базовые образы rhel и rhel-atomic, загруженные из официального каталога Red Hat: https://access.redhat.com/containers/
Работая с docker очень важно понимать откуда Вы взяли образ, что у него внутри, кто автор образа, как часто обновляется образ? Даже если Вы используете “свежий” образ от известного поставщика, это совсем не гарантирует отсутствия в нём уязвимостей. В Harbor встроен сканер безопасности Clair и каждый образ при загрузке в реестр сканируется на наличие известных уязвимостей. Пример результата сканирования приведен на картинке.
Команды работы с реестром Harbor ничем не отличаются от стандартных, например:
# подключаемся и загружаем образ из нашего публичного реестра docker login vic.zabedu.ru -u vic-developer@vsphere.local docker pull vic.zabedu.ru/zabedu/rhel # ... # работаем с образом, например, делаем build нового образа # docker build # ... # загружаем полученный образ в реестр своего проекта docker tag ad75b3733bd5 vic.zabedu.ru/pto/rhel-app1:1.0 docker push vic.zabedu.ru/pto/rhel-app1:1.0 # отключаемся, если нужно docker logout vic.zabedu.ru
VIC Engine – docker в среде vSphere
Работая с контейнерами в VIC, Вы будете использовать не локальную службу docker, а передавать команды на удаленный сервер VCH (virtual container hosts). Сервер VCH создаёт системный администратор, он выделяет Вам все необходимые ресурсы и определяет тип доступа к VCH, который может быть простой или с проверкой подлинности клиента. Во втором случае Вам предоставят комплект сгенерированных ключей безопасности.
Пример скрипта env.sh для передачи команд сервису docker на VCH. В данном скрипте определены функция и дополнительные переменные, которые будут использоваться ниже при вызове этой функции.
#!/bin/bash function docker_vic() { # Запуск команд без проверки подлинности клиента # docker --tls $* # Запуск команд с проверкой подлинности клиента, наш вариант docker -H vch01.zabedu.ru:2376 \ --tlsverify \ --tlscacert="vch-pto/ca.pem" \ --tlscert="vch-pto/cert.pem" \ --tlskey="vch-pto/key.pem" $* } VIC_HOST=vic.zabedu.ru VIC_PROJECT=pto VIC_PATH=rhel7 VIC_IMAGE=rhel VIC_USER=vic-developer@vsphere.local
При вызове описанной в скрипте функции docker_vic команда передаётся на удалённый сервер VCH. Вот пример скрипта, использующего env.sh для выполнения команды docker info на VCH:
#!/bin/bash . $(pwd)/env.sh || exit 1 docker_vic info
Поскольку развертывание образа будет выполнять сервер VCH, то он тоже должен быть подключен к нашему реестру контейнеров:
#!/bin/bash . $(pwd)/env.sh || exit 1 docker_vic login $VIC_HOST --username $VIC_USER
Для начала можно запустить простой контейнер с RHEL:
#!/bin/bash . $(pwd)/env.sh || exit 1 docker_vic run --name $VIC_IMAGE -it $VIC_HOST/$VIC_PROJECT/$VIC_PATH/$VIC_IMAGE:latest bash
То, что контейнер успешно запущен, видно по изменившемуся приглашению командной строки:
[root@0a7d7d3c0194]# uname -r 4.4.111-1.ph1-esx
Обратите внимание на версию ядра, здесь “ph1” обозначает Photon OS 1.0, на данной системе основаны образы виртуальных машин, в которой будут работать все Ваши контейнеры.
В следующем примере (wordpress.sh) создаётся контейнер wordpress с базой данных в отдельном контейнере. Данные контейнеров сохраняются в предварительно созданных томах и при пересоздании контейнеров не теряются (используются образы с Docker Hub, слегка доработанный пример из документации VIC):
#!/bin/bash . $(pwd)/env.sh || exit 1 DB_PASSWORD=wordpress DB_USER=wordpress WEB_CTR_NAME=web DB_CTR_NAME=db # create a persistent volume for the database docker_vic volume create --opt Capacity=4G --opt VolumeStore=default db-data docker_vic volume create --opt Capacity=2G --opt VolumeStore=default html-data # start the database container - specify a subdirectory on the volume as the data dir docker_vic run -d --name $DB_CTR_NAME \ -v db-data:/var/lib/mysql --cpus 1 -m 2g \ -e MYSQL_ROOT_PASSWORD=somewordpress \ -e MYSQL_DATABASE=$DB_PASSWORD \ -e MYSQL_USER=$DB_USER \ -e MYSQL_PASSWORD=wordpress mysql:5.7 # start the web container - note it resolves the database container by name over db-net docker_vic create --name $WEB_CTR_NAME -p 8080:80 \ -v html-data:/var/www/html --cpus 2 -m 4g \ -e WORDPRESS_DB_HOST=$DB_CTR_NAME:3306 \ -e WORDPRESS_DB_USER=$DB_USER \ -e WORDPRESS_DB_PASSWORD=$DB_PASSWORD wordpress docker_vic start $WEB_CTR_NAME # check that the containers are up and look at the IP address and port of the web container docker_vic ps | grep "$WEB_CTR_NAME\|$DB_CTR_NAME"
Приложение лучше оформить в формате docker-compose.yml, который можно будет импортировать как шаблон на портал VIC.
Admiral – портал управления
Работа с порталом Admiral предоставляет разработчикам следующие возможности:
- просмотр списка развернутых контейнеров и создание новых: Deployments -> Conteiners
- просмотр списка и создание развернутых приложений (развертывания из шаблонов): Deployments -> Applications
- просмотр списка и создание сетей: Deployments -> Networks
- просмотр списка и создание томов: Deployments -> Volumes
- просмотр списка подключенных (доступных в рамках проекта) хостов docker и VCH: Infrastructure -> Container Hosts
- просмотр и создание шаблонов приложений, возможен импорт docker-compose и создание в конструкторе: Library -> Templates
- просмотр списка и поиск образов в реестре проекта: Library -> Project repositories
- просмотр списка и поиск образов в публичных реестрах (список реестров и возможность их использования задается администратором): Library -> Public repositories
Создание новых шаблонов и работа с контейнерами через портал не входят в содержание данной статьи.