Въведение
Предпоставки
Разгръщане
Инсталирайте 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 GB, но това може да е недостатъчно, за да отговори на изискванията за ресурси на вашето приложение. Въпреки че Vultr улеснява надграждането на размера на сървъра, след като той вече е бил стартиран, все пак трябва внимателно да прецените кой размер на сървъра трябва да работи оптимално вашето приложение.
В Additional Features
секцията трябва да изберете Enable Private Networking
опцията. Докато другите опции не се изискват, за да следвате това ръководство, трябва да помислите дали всяка от тях има смисъл в контекста на вашето приложение.
Ако преди това сте активирали Multiple Private Networks
опцията във вашия акаунт, ще трябва да изберете съществуваща или да създадете нова частна мрежа за вашите сървъри. Ако не сте го активирали, можете да игнорирате този раздел. За информация относно ръчното конфигуриране на частни мрежи вижте това ръководство .
Пропуснете Firewall Group
раздела засега. Само сървърът, действащ като мениджърски възел в рояка на Docker, ще се нуждае от открити портове и това трябва да бъде конфигурирано след внедряването на сървъра.
В най-долната част на страницата трябва да въведете Server Qty
поне две. Както бе споменато по-рано, може да имате нужда от повече от два сървъра, но два са достатъчни, за да следвате това ръководство.
Накрая в Server Hostname & Label
секцията въведете смислени и запомнящи се имена на хостове и етикети за всеки сървър. За целите на това ръководство, името на хоста и етикета на първия сървър ще бъде docker-manager
и Docker Manager
, respectively- и 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
, това означава, че не сте конфигурирали правилно частната мрежа на вашите сървъри. Инициализирайте eth0
с помощта dhcp
и инициализирайте eth1
с помощта на частния IP адрес, мрежова маска и шлюз, който този сървър е бил назначен по време на разполагането. Можете да получите достъп до тези подробности от интерфейса за настройки на вашия сървър. Когато бъдете подканени, не извършвайте ръчна конфигурация на мрежата.
Въведете нова парола за основния акаунт и след това изберете часова зона, подходяща за местоположението, на което сте избрали да разположите тези сървъри.
Ако възнамерявате да използвате 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
потребител с възможност за sudo за инсталиране и конфигуриране на Docker, но това ръководство следва тази конвенция.
Инсталирайте пакета 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 ще покаже команда, която можете да изпълните на други сървъри в частната мрежа, за да ги добавите като работни възли към този нов рояк. Запазете тази команда.
Добавете работен възел
Сега отидете до уеб конзолата на вашия Docker Worker
сървър, като влезете с docker
потребителя, ако сте го създали.
За да добавите този сървър като работен възел към току-що създадения от вас рояк, изпълнете командата, която сте запазили от изхода на командата за създаване на рояк. Ще изглежда подобно на следното:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker ще изведе дали възелът е успял да се присъедини към рояка. Ако срещнете проблеми с добавянето на работни възли към рояка, проверете отново конфигурацията на вашата частна мрежа и вижте това ръководство за отстраняване на неизправности.
Ако сте разположили повече от два сървъра в началото, можете да добавите останалите като работни възли към вашия рояк, като използвате командата по-горе, увеличавайки количеството ресурси, налични за вашето приложение. Като алтернатива можете да добавите допълнителни мениджърски възли, но това е извън обхвата на това ръководство.
Разположете Portainer със SSL, за да управлявате своя Docker рояк
В този момент вашият Docker рояк е готов за употреба. Можете обаче по избор да стартирате стек на Portainer на мениджърския възел във вашия рояк. Portainer предлага удобен уеб интерфейс за управление на вашия рояк и възлите в него.
Сега е време да създадете група защитна стена за вашия рояк. Освен ако приложението ви изрично не го изисква, излагайте портове само на вашите мениджърски възли . Излагането на портове на работните ви възли без внимателно обмисляне може да доведе до уязвимости.
Отидете до интерфейса за управление на защитната стена и създайте нова група защитна стена. Вашето приложение трябва да диктува кои портове да изложи, но трябва най-малкото да 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.