Статьи

Введение в CoreOS

Если вы читаете этот блог, то у вас есть общее представление о том, что такое контейнеры и почему вы хотите их использовать. Docker облегчает эксперименты с контейнерами и постепенно упрощает их развертывание и управление ими в производственных средах. Тем не менее, в том, что предлагает Docker (бесплатно), все еще есть много пробелов, и другие сделали все возможное, чтобы их заполнить.

CoreOS является одним из таких вариантов; это не просто система управления контейнерами, а целая операционная система (на основе Linux), предназначенная для запуска контейнеров.

Компоненты CoreOS

CoreOS состоит из трех важных компонентов, которые выполняют определенные функции.

Конфигурация и обнаружение сервиса

etcd — это глобально распределенное хранилище значений ключей, которое позволяет узлам в кластере обмениваться конфигурацией друг с другом, а также знать, какие службы доступны в кластере. Информация может быть готова из etc через утилиту командной строки или через конечную точку HTTP.

Управление приложениями и планирование

fleet — это кластерная система инициализации (первый процесс, запускающий все остальные процессы), которая взаимодействует с системой инициализации systemd работающей на каждом отдельном узле. Это означает, что вы можете инициировать и управлять отдельными процессами на каждом узле из центральной точки.

Приложения

В CoreOS нет менеджера пакетов; Все приложения выполняются внутри контейнеров. Это может быть использование собственного движка контейнеров Docker или CoreOS, rkt (ракета).

Начиная

Поскольку это целая операционная система, для начала работы с CoreOS вам потребуется установить ОС на пару узлов, чтобы протестировать ее должным образом. Если вы пользователь Mac или Windows, вам нужно использовать Vagrant или попробовать предварительно настроенный кластер на хостинг-провайдере, таком как AWS или Digital Ocean .

После установки CoreOS вам необходимо определить кластер в файле конфигурации, который соответствует формату «cloud-config»; он предлагает множество параметров конфигурации, которые вы можете отправить в кластер. Я экспериментирую с изображениями Бродяги, например. После установки вы найдете файл config.rb.sample который вы можете переименовать (в config.rb ) и изменить в соответствии с количеством экземпляров, которые вы хотели бы config.rb в кластере. Например:

1
$num_instances=3

Вы также должны откомментировать и изменить канал обновления CoreOS:

1
$update_channel='stable'

В процессе сборки сценарий Vagrant запишет конфигурацию облака по умолчанию в файл пользовательских данных, поэтому сделайте копию прилагаемого файла примера с помощью cp user-data.sample user-data .

Запустите кластер с Vagrant up, и когда кластер будет готов, вы можете подключиться к узлу с vagrant ssh core-01 -- -A .

! Новый призыв к действию

Развернуть приложение

Лучший способ узнать, как CoreOS может помочь вам, — это начать с более реального примера. Это знакомая территория с изображениями, контейнерами и командами Docker.

1
docker run --name mongo-db -d mongo

Эта команда запустит один экземпляр контейнера MongoDB с именем mongo-db . Хотя это стандартная практика Docker, она не поможет вам использовать всю мощь и гибкость CoreOS. Что делать, если экземпляр Mongo аварийно завершает работу или экземпляр перезапускается? Здесь на помощь приходит Fleet и его контроль над systemd .

Чтобы использовать systemd , вам нужно создать сервис, представляющий приложение, которое вы хотите запустить. Это называется модульным файлом. На одной из машин в вашем кластере создайте mongo.service в /etc/systemd/system .

1
2
3
4
5
ini [Unit] Description=MongoService After=docker.service Requires=docker.service
 
[Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill mongo-db ExecStartPre=-/usr/bin/docker rm mongo-db ExecStartPre=/usr/bin/docker pull mongo ExecStart=/usr/bin/docker run --name mongo-db -d mongo
 
[Install] WantedBy=multi-user.target

Включите и запустите службу:

1
sudo systemctl enable /etc/systemd/system/mongo.service sudo systemctl start mongo.service

И теперь вы можете использовать docker ps временем docker ps чтобы увидеть ваши работающие контейнеры. Это все еще относится к одному узлу в кластере; Чтобы запустить сервис в кластере и не беспокоиться о том, где именно он работает, нужно использовать автопарк.

1
fleetctl start mongo.service

И проверьте, начался ли контейнер:

1
fleetctl list-units

Прочитайте этот документ для более продвинутых идей для файлов модулей.

Распространение доступности

Если вы хотите, чтобы экземпляры в вашей службе работали на отдельных узлах, переименуйте файл службы в [email protected] и добавьте следующую строку в [email protected] файла:

1
ini ... [X-Fleet] Conflicts=mongo@*.service

И теперь вы можете запустить несколько экземпляров службы, по одному на каждой машине:

1
fleetctl start mongo@1 fleetctl start mongo@2

И снова используйте fleetctl list-units чтобы проверить, работают ли ваши экземпляры и где.

Все машины в кластере находятся в постоянном контакте с узлом, выбранным в качестве лидера в кластере. В случае сбоя одного узла системные модули, которые на нем работали, будут помечены для перепланирования, как при наличии подходящей замены. Вы можете смоделировать эту ситуацию, войдя в один узел, остановив процесс автопарка с помощью sudo systemctl stop fleet , подождав пару минут и перезапустив его с помощью sudo systemctl start fleet . Вы можете прочитать журналы флота sudo journalctl -u fleet чтобы лучше понять, что происходит.

Теперь вы можете добавить новую службу в конец файла конфигурации облака, чтобы убедиться, что она запускается при запуске systemd на компьютере.

1
units: - name: mongo.service command: start

Fleet предлагает больше вариантов конфигурации для расширенных настроек, таких как управление единицами по всему кластеру или планирование единиц на основе емкости или расположения машин.

Вне Основ

Вышеуказанные компоненты являются основными компонентами CoreOS, но есть несколько других полезных для контейнерных приложений, которые очень хорошо работают с CoreOS.

Kubernetes

Самая популярная система управления контейнерами, созданная Google, работает еще лучше на CoreOS и предлагает более высокий (и более наглядный) уровень управления контейнерами, который происходит в парке. Прочитайте руководство по установке CoreOS для более подробной информации.

Р (оо) к (е) т

Обсуждение rkt само по себе является полной статьей, но rkt — это встроенная среда выполнения Linux-контейнера. Это означает, что он не будет работать на MacOS или Windows без использования виртуальной машины. Он разработан, чтобы более точно вписаться в экосистему Linux, используя системы инициализации на системном уровне вместо использования собственных пользовательских методов (таких как Docker). Он использует стандарты appc , поэтому теоретически большинство ваших образов Docker также должны работать с rkt.

Как добраться до ядра

Если вы знакомы с Linux и концепциями систем инициализации, то вы, вероятно, найдете CoreOS замечательным инструментом для использования с вашими образами Docker. Проект (и команда) растет, недавно открыв офис в Европе благодаря новым источникам финансирования. Я хотел бы знать, как вы относитесь к работе с ним.

Ссылка: Введение в CoreOS от нашего партнера по JCG Криса Уорда в блоге Codeship Blog .