Вступ
Передумови
Розгортання
Встановіть на серверах Alpine Linux 3.9.0
Конфігурація сервера після встановлення
Встановіть Docker на свої сервери
Ініціалізуйте рій Docker з одним вузлом менеджера та одним робочим вузлом
Розгорніть Portainer з SSL, щоб керувати своїм роєм Docker
Вступ
Цей посібник покаже вам, як створити та налаштувати рій Docker за допомогою кількох серверів Alpine Linux 3.9.0 і Portainer. Зверніть увагу, що Vultr пропонує додаток Docker одним кліком, який наразі підтримує CentOS 7 x64 і Ubuntu 16.04 x64.
Передумови
Для початку вам знадобиться щонайменше два сервери VC2 під керуванням Alpine Linux 3.9.0. У вашій групі Docker один із цих серверів діятиме як manager node
інтерфейс із зовнішніми мережами та делегування завдань робочим вузлам. Інший сервер тоді діятиме як worker node
- виконуючи завдання, делеговані йому вузлом менеджера.
Зауважте, що ви можете запустити більше двох серверів, якщо ваша програма потребує резервування та/або більшої обчислювальної потужності, і кроки, наведені в цьому посібнику, будуть застосовуватися.
Розгортання
Відвідайте інтерфейс розгортання сервера Vultr .
Переконайтеся, що Vultr Cloud (VC2)
вкладка вибрана у верхній частині сторінки.
Ви можете вибрати будь-яке розташування з Server Location
розділу, однак усі сервери повинні бути в одному місці , інакше неможливо буде розгорнути на них рій Docker.
Виберіть ISO Library
вкладку Server Type
розділу та виберіть Alpine Linux 3.9.0 x86_64
зображення.
Виберіть відповідний варіант із Server Size
розділу. У цьому посібнику буде використовуватися SSD-сервер розміром 25 ГБ, але цього може бути недостатньо, щоб задовольнити вимоги до ресурсів вашої програми. Хоча Vultr дозволяє легко оновлювати розмір сервера після його запуску, вам все одно слід уважно розглянути, який розмір сервера потрібен для оптимальної роботи вашої програми.
У Additional Features
розділі необхідно вибрати Enable Private Networking
варіант. Хоча інші варіанти не є обов’язковими для виконання цього посібника, вам слід подумати, чи має кожен з них сенс у контексті вашої програми.
Якщо ви раніше ввімкнули цю Multiple Private Networks
опцію у своєму обліковому записі, вам потрібно буде вибрати існуючу або створити нову приватну мережу для своїх серверів. Якщо ви не ввімкнули його, ви можете проігнорувати цей розділ. Щоб отримати інформацію про ручне налаштування приватних мереж, перегляньте цей посібник .
Firewall Group
Наразі пропустіть розділ. Лише сервер, який виступає в якості вузла менеджера в зграї Docker, потребуватиме відкритих портів, і це слід налаштувати після розгортання сервера.
У самому низу сторінки ви повинні ввести Server Qty
принаймні два. Як згадувалося раніше, вам може знадобитися більше двох серверів, але двох достатньо, щоб дотримуватися цього посібника.
Нарешті, у Server Hostname & Label
розділі введіть значущі та запам’ятовуються імена хостів та мітки для кожного сервера. Для цілей цього посібника ім’я хоста та мітка першого сервера будуть docker-manager
і Docker Manager
, відповідно - і docker-worker
і Docker Worker
для другого відповідно.
Після подвійної перевірки всіх ваших конфігурацій ви можете натиснути Deploy Now
кнопку внизу сторінки, щоб запустити свої сервери.
Встановіть на серверах Alpine Linux 3.9.0
Оскільки ви вибрали ОС з бібліотеки ISO Vultr, вам потрібно буде вручну встановити та налаштувати Alpine Linux 3.9.0 на кожному сервері.
Давши Vultr хвилину або дві, щоб виділити ваші сервери, клацніть піктограму з потрійною крапкою more options
для Docker Manager
сервера в інтерфейсі керування сервером , а потім виберіть потрібний View Console
параметр.
Ви повинні бути перенаправлені на консоль із запитом входу. Якщо ні, зачекайте ще хвилину, поки Vultr завершить розгортання ваших серверів.
У цьому запиті входу введіть root
ім’я користувача. У живій версії Alpine Linux 3.9.0 (яка наразі працюють на ваших серверах) не потрібно, щоб суперкористувач вводив пароль під час входу.
Після успішного входу в кореневий обліковий запис ви побачите вітальне повідомлення, за яким слідуватиме підказка оболонки, яка виглядає так:
localhost:~#
Щоб запустити інсталятор Alpine Linux, введіть таку команду:
# setup-alpine
Спочатку виберіть відповідну розкладку клавіатури. У цьому посібнику буде використовуватися us
макет і варіант.
Встановлюючи ім’я хоста, виберіть те саме ім’я хоста, яке ви встановили для цього сервера під час розгортання. Якщо ви точно дотримувалися цього посібника, ім’я хоста має бути docker-manager
.
Повинні бути доступні два мережеві інтерфейси: eth0
і eth1
. Якщо ви бачите лише eth0
, це означає, що ви неправильно налаштували приватну мережу ваших серверів. Initialize , eth0
використовуючи dhcp
, і форматувати з eth1
допомогою приватного IP - адреса, маску підмережі та шлюз цей сервер був призначений під час розгортання. Ви можете отримати доступ до цих деталей з інтерфейсу налаштувань вашого сервера. Коли з’явиться запит, не виконуйте жодних налаштувань мережі вручну.
Введіть новий пароль для облікового запису root, а потім виберіть часовий пояс, відповідний для розташування, у якому ви вибрали для розгортання цих серверів.
Якщо ви збираєтеся використовувати проксі-сервер HTTP/FTP, введіть його URL-адресу, інакше не встановлюйте URL-адресу проксі-сервера.
Виберіть клієнт NTP для керування синхронізацією системного годинника. Цей посібник буде використовувати busybox
.
Коли попросять використовувати дзеркало сховища пакетів, виберіть його явно, ввівши його номер; автоматично визначити та вибрати найшвидший, ввівши f
; або вручну відредагуйте файл конфігурації репозиторію, ввівши e
, що не рекомендується, якщо ви не знайомі з Alpine Linux. У цьому посібнику буде використовуватися перше дзеркало.
Якщо ви плануєте використовувати SSH для доступу до своїх серверів або для розміщення файлової системи на основі SSH, виберіть сервер SSH. Цей посібник буде використовувати openssh
.
При запиті диска до використання, вибрати диск в vda
якості sys
типу.
Тепер на вашому сервері має бути встановлено Alpine Linux 3.9.0. Повторіть цей процес для всіх інших серверів, які ви розгорнули раніше, переконавшись, що ви замінили правильні значення для імені хоста та eth1
мережевого інтерфейсу.
Конфігурація сервера після встановлення
На даний момент на ваших серверах все ще працює активна версія ISO Alpine Linux 3.9.0. Щоб завантажитися з інсталяції SSD, перейдіть до інтерфейсу налаштувань вашого сервера, перейдіть до пункту Custom ISO
бічного меню та натисніть Remove ISO
кнопку. Це повинно перезавантажити сервер. Якщо це не так, то перезавантажтеся вручну.
Після завершення перезавантаження сервера поверніться до веб-консолі сервера Docker Manager
.
Увійдіть в обліковий запис root, використовуючи пароль, який ви встановили раніше під час процесу встановлення.
Увімкніть сховище пакетів спільноти, розкоментувавши третій рядок /etc/apk/repositories
використання vi
. Подібним чином можна ввімкнути сховища краю та тестування, але вони не зобов’язані дотримуватися цього посібника.
Синхронізуйте локальний індекс пакетів сервера з віддаленим сховищем, яке ви вибрали раніше, ввівши таку команду оболонки:
# apk update
Потім оновіть застарілі пакети:
# apk upgrade
Як і раніше, повторіть цей процес налаштування для кожного сервера, який ви розгорнули раніше.
Встановіть Docker на свої сервери
Перш ніж інсталювати сам пакет Docker, ви можете створити окремого docker
користувача. Ви можете зробити це за допомогою такої команди:
# adduser docker
Примітка. Цей новий користувач і всі користувачі, додані до нової docker
групи, матимуть привілеї root після встановлення пакета Docker. Дивіться таку проблему зі сховища Moby Github:
Due to the --privileged
in docker, anyone added to the 'docker' group is root equivalent. Anyone in the docker group has a back door around all privilege escalation policy and auditing on the system.
This is different from someone being able to run running sudo to root, where they have policy, and audit applied to them.
Якщо ви хочете надати користувачеві дозвіл sudo docker
, спочатку встановіть sudo
пакет:
# apk add sudo
Потім створіть sudo
групу:
# addgroup sudo
Нарешті, додайте docker
користувача до sudo
групи:
# adduser docker sudo
Тепер ви можете виконати крок 4 цього посібника, щоб завершити налаштування sudo.
На цьому етапі ви готові встановити пакет Docker. Зауважте, що docker
для встановлення та налаштування Docker необов’язково мати окремого користувача з можливістю sudo , але цей посібник дотримується цієї конвенції.
Встановіть пакет Docker за допомогою такої команди:
# apk add docker
Потім увімкніть сценарій ініціалізації Docker:
# rc-update add docker
Нарешті, запустіть демон Docker:
# rc-service docker start
Ви можете перевірити, чи працює Docker, за допомогою цієї команди:
# docker info
Як і минулого разу, повторіть цей процес встановлення Docker для кожного сервера, який ви розгорнули на початку.
Ініціалізуйте рій Docker з одним вузлом менеджера та одним робочим вузлом
Вирішивши всі ці налаштування, ви нарешті готові створити рій Docker.
Створіть рій і додайте вузол менеджера
Перейдіть назад до веб-консолі вашого Docker Manager
сервера. Ви налаштуєте цей сервер як вузол менеджера у вашому рою. Якщо ви вирішили створити docker
користувача раніше, увійдіть, використовуючи цей обліковий запис, а не суперкористувач.
Введіть таку команду, але замініть 192.0.2.1
її приватною (не загальнодоступною) IP-адресою, призначеною вашому Docker Manager
серверу:
$ docker swarm init --advertise-addr 192.0.2.1
Docker will display a command you can execute on other servers in the private network to add them as worker nodes to this new swarm. Save this command.
Add a worker node
Now navigate to the web console of your Docker Worker
server, signing in with the docker
user if you created it.
To add this server as a worker node to the swarm you just created, execute the command you saved from the output of the swarm creation command. It will look similar to the following:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker will output whether the node was able to join the swarm. If you encounter issues adding worker nodes to the swarm, double check your private network configuration and refer to this guide for troubleshooting.
If you deployed more than two servers at the beginning, you can add the rest as worker nodes to your swarm using the command above, increasing the amount resources available to your application. Alternatively, you can add additional manager nodes, but that's beyond the scope of this guide.
Deploy Portainer with SSL to manage your Docker swarm
At this point your Docker swarm is ready for use. You may, however, optionally launch a Portainer stack on the manager node in your swarm. Portainer offers a convenient web interface for managing your swarm and the nodes therein.
It's now time to create a firewall group for your swarm. Unless your application specifically requires it, only expose ports on your manager nodes. Exposing ports on your worker nodes without careful consideration can introduce vulnerabilities.
Перейдіть до інтерфейсу керування брандмауером і створіть нову групу брандмауера. Ваша програма має вказувати, які порти надавати, але ви повинні, принаймні, відкрити порт 9000
для Portainer. Застосуйте цю групу брандмауера до Docker Manager
сервера.
Хоча це не є обов’язковим, настійно рекомендується захистити Portainer за допомогою SSL. Заради цього посібника ви будете використовувати лише самопідписаний сертифікат OpenSSL, але вам слід розглянути можливість використання Let's Encrypt у виробництві.
Перейдіть до веб-консолі Docker Manager
сервера, увійдіть за допомогою docker
користувача та скористайтеся такими командами, щоб створити самопідписаний сертифікат OpenSSL:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Створіть новий файл ~/portainer-agent-stack.yml
, з таким вмістом:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
AGENT_CLUSTER_ADDR: tasks.agent
CAP_HOST_MANAGEMENT: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- /:/host
networks:
- agent_network
deploy:
mode: global
portainer:
image: portainer/portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify --ssl --sslcert /certs/portainer.pem --sslkey /certs/portainer.key
ports:
- target: 9000
published: 9000
protocol: tcp
mode: host
volumes:
- portainer_data:/data
- /home/docker/certs:/certs
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
Після зміни цього файлу конфігурації стека Docker відповідно до ваших вимог ви можете розгорнути його:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
Щоб переконатися, що Portainer працює, виконайте таку команду, давши Docker хвилину або дві на розгортання стека:
$ docker ps
Ви побачите два контейнери із зображеннями portainer/portainer:latest
та portainer/agent:latest
, що підтверджує, що Portainer запущено правильно.
Тепер ви можете налаштувати та керувати своїм роєм Docker, відвідавши публічну IP-адресу свого Docker Manager
сервера на порту 9000
за допомогою HTTPS.