Чистка среды Docker в кластере CoreOS с помощью CloudSlang

Published by Leave your thoughts

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: , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>