Rackspace недавно объявила о публичном бета-тестировании своего предложения Docker Carina. Это является частью стратегических усилий по созданию конкурентоспособного внутреннего контейнерного решения, которое интегрируется с набором инструментов и услуг Rackspace, особенно с известной «Фанатической поддержкой».
До сих пор вы могли запускать кластеры Docker в инфраструктуре Rackspace, предоставляя виртуальные машины или серверы без поддержки и создавая собственный кластер Docker. С Carina, сложность выполнения этого, а также накладные расходы на инфраструктуру, значительно уменьшаются.
В этом посте я расскажу о Carina, о том, как ее использовать и как интегрировать ее в свой конвейер непрерывного развертывания с помощью Codeship.
Как работает Карина Rackspace?
Поддержка развертывания Carina — это OpenStack Magnum , который обеспечивает оркестровку контейнеров в качестве первоклассного ресурса. Это позволяет развертываниям OpenStack создавать узлы Magnum вместе с традиционными узлами Nova, используя либо Docker Swarm, Kubernetes, либо Apache Mesos в качестве механизма оркестровки.
Конечным результатом является однородный, автоматизированный и масштабируемый кластер Docker, на котором работает ваш любимый механизм оркестровки контейнеров, поверх LXC, работающего на «голых железных» серверах.
Все это доступно через отдельный интерфейс; API Carina позволяет управлять механизмом масштабирования и оркестровки хоста, а доступ к кластеру и создание контейнера обрабатываются с помощью стандартного API Docker. На этой ранней стадии Карина поддерживает только Docker Swarm.
Карина называет хосты в кластере Docker «сегментами». Отдельный термин используется для различия между операционными системами с установленным Docker Engine, работающими на виртуальных машинах или на серверах (хостах) с открытым исходным кодом, и Docker Engine, работающими непосредственно в контейнере поверх LXC. С помощью этого метода команда контейнеров OpenStack может значительно увеличить скорость.
Учитывая состояние этой бета-версии и тенденцию Rackspace склоняться к простым, удобным для пользователя интерфейсам, которые жертвуют настройкой для удобства использования, трудно сказать, какая часть Carina является неполной и какая намеренно не поддерживается.
В настоящее время вы можете автоматически масштабировать кластер Carina, но не можете устанавливать ограничения или триггеры для этого. Многие такие функции существуют с разумными настройками по умолчанию, но без возможности расширенной настройки. Надеемся, что эти аспекты приложения могут быть построены в будущем без ущерба для удобства использования.
Используя Карину
Carina поддерживает как веб-интерфейс, так и интерфейс командной строки, поддерживаемый API. Вы можете узнать, как установить CLI в документации по началу работы . Чтобы начать использовать веб-интерфейс, посетите сайт Carina . Оба интерфейса обеспечивают одинаковый уровень контроля над вашим кластером, однако интерфейс командной строки имеет более традиционный вид основного набора инструментов Docker.
Создать аккаунт в Rackspace бесплатно, а бета-версия Carina в настоящее время может свободно экспериментировать до определенного размера. Чтобы использовать CLI, вам нужно установить имя пользователя Rackspace и ключ API в ENV или в командной строке:
1
2
|
export CARINA_USERNAME=myuse export CARINA_APIKEY=abcdef1234 |
Теперь вы можете взаимодействовать с вашими кластерами Carina:
01
02
03
04
05
06
07
08
09
10
11
12
|
bfosberry~$ carina list ClusterName Flavor Nodes AutoScale Status testcluster container1-4G 1 false active bfosberry~$ carina grow --nodes= 2 testcluster testcluster container1-4G 1 false growing bfosberry~$ carina list ClusterName Flavor Nodes AutoScale Status testcluster container1-4G 3 false active bfosberry~$ carina get testcluster testcluster container1-4G 3 false active bfosberry~$ carina delete testcluster testcluster container1-4G 3 false deleting |
Большинство команд поддерживают синхронный режим, в котором при указании флага --wait
команда блокируется до завершения удаленного действия.
1
2
|
bfosberry~$ carina create --nodes= 2 --autoscale --wait testcluster2 testcluster2 container1-4G 2 true active |
Независимо от управления кластером, вы можете взаимодействовать с базовым механизмом оркестровки Docker так же, как при использовании Docker Machine.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
bfosberry~$ eval `carina env testcluster2` bfosberry~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08 : 50 : 38 -bfosberry~$ docker info Containers: 3 Images: 2 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 1 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1: 104.130 . 22.20 : 42376 └ Containers: 3 └ Reserved CPUs: 0 / 12 └ Reserved Memory: 0 B / 4.2 GiB └ Labels: executiondriver= native - 0.2 , kernelversion= 3.18 . 21 - 1 -rackos, operatingsystem=Debian GNU/Linux 7 (wheezy) (containerized), storagedriver=aufs CPUs: 12 Total Memory: 4.2 GiB Name: f78aba1baa5c bfosberry~$ docker run -it ubuntu root @1038df1314a7 :/# exit bfosberry~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1038df1314a7 ubuntu "/bin/bash" 28 seconds ago Exited ( 0 ) 18 seconds ago 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1/naughty_mestorf f78aba1baa5c swarm: 1.0 . 0 "/swarm manage -H=tcp" 5 minutes ago Up 5 minutes 2375 /tcp, 104.130 . 22.20 : 2376 -> 2376 /tcp 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1/swarm-manager ff87c8a61e49 swarm: 1.0 . 0 "/swarm join --addr=1" 5 minutes ago Up 5 minutes 2375 /tcp 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1/swarm-agent cbe07f4d6f56 cirros "/sbin/init" 5 minutes ago 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1/swarm-data |
В какой-то момент я создал несколько кластеров, которые оказались в состоянии ошибки. В моей учетной записи не было немедленного повторного попытки, журнала ошибок и автоматически сгенерированного билета поддержки. В панели управления также не было механизма, чтобы обратиться за помощью, но это бета.
Как только продукт выйдет из бета-версии, он должен стать более заметным и доступным. В целом, служба поддержки Rackspace очень отзывчива, а команда Carina активна в своем IRC-канале, поэтому обязательно обратитесь за поддержкой.
Интеграция с вашим CD-конвейером
Поскольку Carina предоставляет стандартную конечную точку Docker, получить доступ и внедрить изменения довольно просто. Я приведу краткий пример того, как получить и поделиться доступом к вашему кластеру Docker в конвейере CD с помощью Carina; однако имейте в виду, что этот рабочий процесс не применяется, если какой-либо контейнер PAAS, например Rancher или Deis, выполняется поверх кластера Docker.
В этом сценарии вы можете просто развернуться в соответствующем PAAS, не взаимодействуя напрямую с Carina. В этом примере я буду использовать платформу Codeship Docker для своего конвейера CD.
Чтобы развернуть ваше приложение непосредственно в кластере Docker, вам необходимо сначала получить доступ к своей учетной записи Carina, а затем снять учетные данные Docker для прямого подключения. Затем вы можете вносить изменения непосредственно в ваш кластер, такие как извлечение изображений, создание и уничтожение контейнеров.
Настройка доступа Карины
Давайте начнем с сохранения наших учетных данных Carina и их шифрования с использованием нашего ключа AES проекта.
1
2
3
|
# carina.env CARINA_USERNAME=myuser CARINA_APIKEY=abcdef12345 |
1
2
|
$ jet encrypt carina.env carina_env.encrypted $ git add carina_env.encrypted |
Если вы не планируете удалять carina.env
, возможно, стоит добавить это в наш .gitignore
чтобы мы не случайно зафиксировали его в нашем репо.
1
2
3
|
# .gitignore carina.env *.aes |
Теперь мы можем ссылаться на эти зашифрованные данные среды на нашем этапе развертывания, добавив их в соответствующую службу. При этом все шаги, выполняемые в службе развертывания, будут иметь учетные данные, которые мы зашифровали как часть среды.
1
2
3
4
|
# codeship-services.yml carina_deploy: build: ./ encrypted_env_file: carina_env.encrypted |
Нам также нужно будет создать образ Docker с двоичным carina
который позволит нам проверять учетные данные кластера Docker. Используя этот образ, мы можем внести изменения в наш кластер Docker, используя стандартные команды Docker.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
FROM debian:jessie # install deps RUN apt-get update && apt-get install -y apt-transport-https wget # install Docker RUN echo 'deb https://apt.dockerproject.org/repo debian-jessie main' > /etc/apt/sources.list.d/docker.list RUN apt-get update && apt-get install -y --force-yes docker-engine # install carina RUN wget -O /usr/bin/carina https: //github.com/getcarina/carina/releases/download/v0.9.1/carina-linux-amd64 RUN chmod +x /usr/bin/carina |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
$ root @952340f468c5 :/# carina credentials --path= "/tmp/carain" mycluster $ root @952340f468c5 :/# source '/tmp/carina/docker.env' $ root @952340f468c5 :/# docker info Containers: 5 Images: 3 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 1 5a00874f-6b1d-4c9e-bd92-411b9cd3a167-n1: 104.130 . 22.20 : 42376 └ Containers: 5 └ Reserved CPUs: 0 / 12 └ Reserved Memory: 0 B / 4.2 GiB └ Labels: executiondriver= native - 0.2 , kernelversion= 3.18 . 21 - 1 -rackos, operatingsystem=Debian GNU/Linux 7 (wheezy) (containerized), storagedriver=aufs CPUs: 12 Total Memory: 4.2 GiB Name: f78aba1baa5c |
Обернув эти команды Carina и любые команды Docker в скрипт, вы можете запустить это из своего конвейера развертывания.
1
2
3
|
# codeship-steps.yml - service: carina_deploy command: deploy_myapp |
Наконец, это развертывание может быть выполнено с использованием jet steps
. Используя простой скрипт и двоичный файл Carina, ваш конвейер непрерывного развертывания может обновлять кластер Docker, останавливая и запуская контейнеры и вытягивая обновленные образы.
Будущее Карины
В своей нынешней форме Carina — это очень эффективный и простой инструмент обеспечения кластеров Docker. Однако для продвинутых пользователей это не особенно полезно. Ему не хватает расширенной поддержки, позволяющей использовать его высокоэффективными способами, а также доступа к командной строке для ручной реализации плагинов и изменений.
Большая часть возможностей Carina будет реализована через пользователей, работающих под управлением таких платформ, как Rancher и Deis, а также Rackspace, постепенно интегрирующих другие свои сервисы. Это обеспечит очень однородную платформу для запуска приложений, а не только контейнеров.
По своим возможностям Carina отстает от других платформ Docker, поэтому по мере развития продукта будет интересно посмотреть, как они планируют поддерживать экосистему плагинов и новые функции, такие как CRIU. Планируется обеспечить поддержку реестра, поэтому, если Rackspace сможет создать мощную базу талантов поддержки Docker и предоставить поддерживаемую платформу Docker, это может стать реальным конкурентом для будущего продукта Tutum GA.
Как платформа, Карина имеет много обещаний. При правильном направлении продукт может стать конкурентоспособным как среди провайдеров производительности, так и для удобных для пользователей контейнерных хостингов.
Ссылка: | Интеграция Carina с вашим конвейером непрерывной интеграции от нашего партнера JCG Брендана Фосберри в блоге Codeship Blog . |