В этой статье мы рассмотрим процесс установки и настройки режима Docker Swarm на сервере Ubuntu 16.04.
Docker Swarm является стандартным инструментом кластеризации для Docker, преобразующий набор хостов Docker в один последовательный кластер, называемый Swarm. Docker Swarm обеспечивает доступность и высокую производительность работы, равномерно распределяя ее по хостингам Docker внутри кластера.
Установка Docker Swarm:
Перед началом обновите Ваш системный репозиторий до последней версии с помощью следующей команды:
sudo apt-get update -y && sudo apt-get upgrade -y
После обновления следует выполнить перезагрузку системы. Необходимо еще установить среду Docker. По умолчанию Docker не доступен в репозитории Ubuntu 16.04, поэтому сначала необходимо создать хранилище Docker и начать установку с помощью следующей команды:
sudo apt-get install apt-transport-https software-properties-common ca-certificates -y:
Добавляем GPG ключ для Docker:
wget https://download.docker.com/linux/ubuntu/gpg && sudo apt-key add gpg
Добавляем репозиторий Docker и обновляем с помощью команды:
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" >> /etc/apt/sources.list sudo apt-get update -y
Установка среды Docker с помощью следующей команды:
sudo apt-get install docker-ce -y
После установки запустите службу Docker во время загрузки с помощью следующей команды:
sudo systemctl start docker && sudo systemctl enable docker
Для запуска Docker необходимы root права, а для других юзеров доступ получается только с помощью sudo. При необходимости запустить docker без использования sudo, есть возможность создать Unix и включить в него необходимых пользователей за счет выполнения следующих строк кода:
sudo groupadd docker && sudo usermod -aG docker dockeruser
Затем выйдя из системы, делаем вход через dockeruser.
sudo ufw allow 2376/tcp && sudo ufw allow 7946/udp && sudo ufw allow 7946/tcp && sudo ufw allow 80/tcp && sudo ufw allow 2377/tcp && sudo ufw allow 4789/udp
Затем перезагрузите брандмауэр, включив его при загрузке
sudo ufw reload && sudo ufw enable
Выполните перезагрузку “Докера”:
sudo systemctl restart docker
Создавая Docker Swarm кластер, необходимо определиться с IP-адресом, за счет которого ваш узел будет действовать в качестве диспетчера:
docker swarm init --advertise-addr 192.168.0.103
Вы должны увидеть следующий вывод:
Swarm initialized: current node (iwjtf6u951g7rpx6ugkty3ksa) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-5p5f6p6tv1cmjzq9ntx3zmck9kpgt355qq0uaqoj2ple629dl4-5880qso8jio78djpx5mzbqcfu 192.168.0.103:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Проверяем его состояние:
docker node lsЕсли все работает правильно, вы должны увидеть следующий вывод:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS iwjtf6u951g7rpx6ugkty3ksa * Manager-Node Ready Active Leader
Проверка статуса Docker Swarm Cluster осуществляется следующим образом:
code> docker info
Вывод должен быть следующим:
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.09.0-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: active NodeID: iwjtf6u951g7rpx6ugkty3ksa Is Manager: true ClusterID: fo24c1dvp7ent771rhrjhplnu Managers: 1 Nodes: 1 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Force Rotate: 0 Autolock Managers: false Root Rotation In Progress: false Node Address: 192.168.0.103 Manager Addresses: 192.168.0.103:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0 runc version: 3f2f8b84a77f73d38244dd690525642a72156c64 init version: 949e6fa Security Options: apparmor seccomp Profile: default Kernel Version: 4.4.0-45-generic Operating System: Ubuntu 16.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 992.5MiB Name: Manager-Node ID: R5H4:JL3F:OXVI:NLNY:76MV:5FJU:XMVM:SCJG:VIL5:ISG4:YSDZ:KUV4 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
Узел теперь настроен правильно, пришло время добавить его в Swarm Cluster. Сначала скопируйте вывод команды «swarm init» из вывода результата выше, а затем вставьте этот вывод в рабочий узел для присоединения к Swarm Cluster:
docker swarm join --token SWMTKN-1-5p5f6p6tv1cmjzq9ntx3zmck9kpgt355qq0uaqoj2ple629dl4-5880qso8jio78djpx5mzbqcfu 192.168.0.103:2377
Вы должны увидеть следующий вывод:
This node joined a swarm as a worker.
Теперь выполните следующую команду для вывода списка рабочего узла:
docker node ls
Вы должны увидеть информацию следующего вида:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS iwjtf6u951g7rpx6ugkty3ksa * Manager-Node Ready Active Leader snrfyhi8pcleagnbs08g6nnmp Worker-Node Ready Active
Docker Swarm Cluster запущен и работает, теперь можно запустить веб-сервис в Docker Swarm Mode. За счет следующей строки кода выполнится развертывание службы веб-сервера:
docker service create --name webserver -p 80:80 httpd
Приведенная выше строка создаст контейнер веб-сервера Apache и сопоставит его с 80 портом, позволив иметь полный доступ к необходимому веб-серверу Apache из удаленной системы. Теперь запускаем проверку работающего сервиса с помощью команды:
docker service ls
Вы должны увидеть следующий вывод:
ID NAME MODE REPLICAS IMAGE PORTS nnt7i1lipo0h webserver replicated 0/1 apache:latest *:80->80/tcp
Запустите службу масштабирования веб-сервера с помощью строки:
docker service scale webserver = 2
А также проверьте состояние с помощью команды:
docker service ps webserver
Вы должны увидеть следующий вывод:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 7roily9zpjvq webserver.1 httpd:latest Worker-Node Running Preparing about a minute ago r7nzo325cu73 webserver.2 httpd:latest Manager-Node Running Preparing 58 seconds ago
Веб-сервер Apache работает. Теперь вы можете получить доступ к веб-серверу:
Служба веб-сервера Apache теперь распределена по двум узлам. Docker Swarm обеспечивает доступность вашего сервиса. Если веб-сервер отключается на рабочем узле, то новый контейнер будет запущен на узле менеджера. Для проверки доступности следует остановить службу Docker на рабочем узле:
sudo systemctl stop docker
Запустите службу веб-сервера с помощью команды:
docker service ps webserver
Вы должны увидеть следующую информацию:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ia2qc8a5f5n4 webserver.1 httpd:latest Manager-Node Ready Ready 1 second ago 7roily9zpjvq \_ webserver.1 httpd:latest Worker-Node Shutdown Running 15 seconds ago r7nzo325cu73 webserver.2 httpd:latest Manager-Node Running Running 23 minutes ago
С помощью данной статьи, вы смогли установить и настроить кластер Docker Swarm для ОС Ubuntu 16.04. Теперь вы можете легко масштабировать свое приложение в кластере до тысячи узлов и пятидесяти тысяч контейнеров без существенной потери производительности.