Чистка среды Docker в кластере CoreOS с помощью CloudSlang
Ubuntu, VPS | Комментировать запись
CoreOS – это дистрибутив Linux, ориентированный на быстрый запуск кластерных сред при помощи контейнеров Docker и обнаружения сервисов (service discovery).
Однако образы Docker могут занимать довольно много дискового пространства. Базовые образы могут весить сотни мегабайт, а объём пользовательских образов часто достигает 1GB. Большое количество образов Docker в итоге засоряет сервер, в результате чего сервер может исчерпать дисковое пространство, если вовремя не удалить устаревшие или неиспользуемые образы.
CloudSlang – это открытая система управления развёрнутыми приложениями, автоматизирующая процессы при помощи рабочих потоков (workflows). Рабочий поток содержит список задач и логику навигации. Задача может вызвать операцию, содержащую экшн, который запускает сценарий Python, метод Java или другой поток. Язык CloudSlang позволяет определять потоки в виде текста; кроме того, для управления развернутыми приложениями вы можете либо использовать уже существующие рабочие потоки (Docker, OpenStack и различные утилиты), либо создать свои собственные потоки.
В этом руководстве показано, как выполнить очистку среды Docker в кластере CoreOS при помощи CloudSlang.
Примечание: Руководство не охватывает создание пользовательских рабочих потоков, потому редактировать файлы CloudSlang не придётся.
Требования
- Предварительно настроенный сервер Ubuntu 14.04 (который будет использоваться как сервер CloudSlang).
- Не-root пользователь с доступом к sudo.
- Заранее установленный Java 7+ на сервере CloudSlang (JDK не нужен, только JRE).
- Кластер CoreOS из трёх машин.
1: Установка unzip
Сначала нужно установить утилиту unzip на сервер CloudSlang.
Обновите список пактов:
sudo apt-get update
Установите unzip:
sudo apt-get install unzip
2: Загрузка CloudSlang
Загрузите CloudSlang CLI и предопределенные операции и потоки. CloudSlang CLI – это интерфейс командной строки, предназначенный для запуска процессов.
Загрузите архив CloudSlang CLI:
wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.7.29/cslang-cli-with-content.zip
Распакуйте архив:
unzip cslang-cli-with-content.zip
Это создаст каталог cslang. Просмотрите содержимое каталога:
ls ~/cslang
Как видите, каталог содержит три подкаталога:
- python-lib: внешние библиотеки Python.
- cslang: содержит файлы CloudSlang CLI . Каталог cslang/bin содержит файл по имени cslang, при помощи которого запускается CLI. Каталог cslang/lib содержит все необходимые зависимости приложения.
- content: содержит готовые потоки и операции CloudSlang. Поток, который будет использован в этом руководстве, находится в content/io/cloudslang/coreos и называется cluster_docker_images_maintenance.sl. Этот поток проверяет все машины в кластере и удаляет неиспользуемые образы Docker.
3: Добавление SSH-ключа
Для доступа к кластеру CoreOS системе CloudSlang необходим SSH-ключ. Создайте новую пару ключей на сервере CloudSlang и добавьте открытый ключ в кластер CoreOS.
Сначала создайте пару ключей, не защищённую паролем, следуя инструкциям статьи «Как настроить SSH-ключи». Получив ключи, добавьте открытый ключ на каждую машину кластера CoreOS.
Скопируйте открытый ключ с сервера CloudSlang:
cat ~/.ssh/id_rsa.pub
На экране появится длинный вывод, который начинается с ssh-rsa и заканчивается на username@hostname. Скопируйте его, чтобы использовать в следующей команде.
Подключитесь к одному из серверов CoreOS (стандартное имя – core) и запустите команду, добавив в неё свой открытый ключ:
echo "your_public_key" >> ~/.ssh/authorized_keys
Повторите это с каждым сервером кластера.
4: Запуск потока
Теперь нужно запустить поток и убедиться, что он работает должным образом.
Чтобы запустить поток, откройте каталог /cslang/bin на сервере CloudSlang.
cd ~/cslang/cslang/bin/
Запустите исполняемый файл cslang, чтобы открыть интерфейс:
./cslang
Через некоторое время появится экран приветствия CloudSlang.
0.7.26-SNAPSHOT
Welcome to CloudSlang. For assistance type help.
При помощи интерфейса запустите следующую команду, заменив your_coreos_server_ip IP-адресами серверов кластера CoreOS.
custom_prefix(cslang>)
run --f ../../content/io/cloudslang/coreos/cluster_docker_images_maintenance.sl --i coreos_host=your_coreos_server_ip,coreos_username=core,private_key_file=~/.ssh/id_rsa --cp ../../content/
Команда run запускает поток. Опция –f указывает путь к потоку. Опция –i задаёт данные: имя хоста и пользователя CoreOS, соответствующий закрытый ключ SSH. Опция –cp определяет путь к классам, если поток зависит от других операций и потоков. Данный поток имеет много зависимостей, а потому можно указать каталог content в качестве родительского; сканирование в данном случае рекурсивное, а значит, подкаталоги тоже сканируются.
Логика потока сначала извлекает IP-адрес машины кластера, затем осматривает машины и чистит неиспользуемые образы. Проверяя запущенные и остановленные контейнеры, поток определяет ненужные образы, а затем удаляет их.
Когда поток запущен, интерфейс отображает названия выполняемых задач. После выполнения потока CLI возвращает результаты потока.
В данном случае он вернёт либо SUCCESS (что значит, что все неиспользуемые образы Docker были удалены), либо FAILURE (при выполнении потока произошла ошибка). Кроме того, поток выводит number_of_deleted_images_per_host, сообщающий, сколько образов было удалено с каждого хоста в кластере.
Если всё прошло должным образом, на экране появится что-то вроде:
...
Flow : cluster_docker_images_maintenance finished with result : SUCCESS
Execution id: 101600001, duration: 0:02:06.180
Более подробную информацию о выполнении потока можно найти в файле execution.log в каталоге bin.
Теперь неиспользуемые образы Docker будут своевременно удалены, что предотвратит проблемы с дисковым пространством сервера.
Tags: CloudSlang, CoreOS, Docker, Oracle Java 7, Ubuntu 14.04