Как установить и настроить кластер Docker Swarm в CentOS 8
На этой странице
- Предпосылки
- Установите Docker на оба узла
- Настройка брандмауэра
- Инициализация кластера Docker Swarm
- Добавить рабочий узел в кластер Docker Swarm
- Запуск службы в Docker Swarm
- Проверка Docker Swarm
- Заключение
Docker — это инструмент с открытым исходным кодом, который можно использовать для создания, развертывания и запуска приложений с использованием контейнера. Контейнер позволяет упаковать приложение со всеми необходимыми зависимостями и отправить его как единый пакет.
Docker Swarm — это инструмент кластеризации, используемый для управления хостом Docker. Он позволяет превратить группу хостов Docker в единый логический виртуальный сервер. Таким образом, вы можете масштабировать приложение по горизонтали и увеличивать количество экземпляров контейнера. Docker swarm предлагает очень полезные функции, включая самовосстановление контейнера, балансировку нагрузки, масштабирование контейнера вверх и вниз, обнаружение сервисов и последовательные обновления.
В этом посте мы покажем вам, как настроить кластер Docker Swarm на CentOS 8.
Предпосылки
- Два сервера под управлением CentOS 8.
- Пароль root настраивается на каждом сервере.
Установите Docker на оба узла
Во-первых, вам нужно будет установить Docker на оба узла. По умолчанию последняя версия Docker не включена в стандартный репозиторий CentOS 8. Поэтому вам нужно будет добавить репозиторий Docker в вашу систему.
Вы можете добавить его с помощью следующей команды:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
После создания репозитория Docker установите Docker с помощью следующей команды:
dnf install docker-ce --nobest
После установки Docker запустите службу Docker и включите ее запуск при перезагрузке системы с помощью следующей команды:
systemctl start docker
systemctl enable docker
Вы также можете проверить статус Docker с помощью следующей команды:
systemctl status docker
Вы должны получить следующий результат:
? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-03-12 03:55:24 EST; 6s ago Docs: https://docs.docker.com Main PID: 2173 (dockerd) Tasks: 8 Memory: 44.7M CGroup: /system.slice/docker.service ??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Failed to built-in GetDriver graph btrfs> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Your kernel does not support cgroup bl> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Your kernel does not support cgroup bl> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Loading containers: start." Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Default bridge (docker0) is assigned with> Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Loading containers: done." Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver> Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon has completed initialization" Mar 12 03:55:24 workernode systemd[1]: Started Docker Application Container Engine. Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"
Теперь проверьте установленную версию Docker с помощью следующей команды:
docker --version
Вы должны увидеть следующий вывод:
Docker version 20.10.5, build 55c4c88
Настроить брандмауэр
Далее вам нужно будет разрешить порты 2376, 2377, 7946 и 80 через брандмауэр на обоих узлах. Вы можете разрешить их с помощью следующей команды:
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp
Затем перезагрузите firewalld, чтобы применить изменения:
firewall-cmd --reload
Инициализировать кластер Docker Swarm
Далее вам нужно будет инициализировать кластер Docker Swarm на узле менеджера. Вы можете сделать это с помощью следующей команды:
docker swarm init --advertise-addr 45.58.32.185
Вы должны получить следующий результат:
Swarm initialized: current node (cq8xpscsls2ctqhdha8lhdrph) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Вы можете использовать команду, показанную в приведенном выше выводе, в рабочем узле Docker, чтобы присоединить узел к кластеру.
Вы можете проверить информацию о кластере Docker Swarm с помощью следующей команды:
docker info
Вы должны получить следующий результат:
Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.1-docker) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.5 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: active NodeID: cq8xpscsls2ctqhdha8lhdrph Is Manager: true ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl Managers: 1 Nodes: 1 Default Address Pool: 10.0.0.0/8 SubnetSize: 24 Data Path Port: 4789 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 10 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Force Rotate: 0 Autolock Managers: false Root Rotation In Progress: false Node Address: 45.58.32.185 Manager Addresses: 45.58.32.185:2377
Теперь вы можете проверить узел Docker Swarm с помощью следующей команды:
docker node ls
Вы должны получить следующий результат:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5
Добавить рабочий узел в кластер Docker Swarm
Далее вам нужно будет добавить рабочий узел к узлу менеджера Docker Swarm. Вы можете сделать это с помощью следующей команды на рабочем узле:
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377
Вы должны получить следующий результат:
This node joined a swarm as a worker.
На узле Docker Manager проверьте рабочий узел с помощью следующей команды:
docker node ls
Вы должны увидеть, что рабочий узел добавлен в Docker Swarm:
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5 bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5
Запускаем сервис в Docker Swarm
Здесь мы создадим новый веб-сервис Nginx и масштабируем его с помощью двух контейнеров. Вы можете создать его, выполнив следующую команду на узле Manager:
docker service create -p 80:80 --name webservice --replicas 2 nginx
Вы должны получить следующий результат:
agyxlaswxakrbboakkyydsh0k overall progress: 2 out of 2 tasks 1/2: running [==================================================>] 2/2: running [==================================================>] verify: Service converged
Теперь вы можете проверить веб-сервис с помощью следующей команды:
docker service ls
Вы должны увидеть следующий вывод:
ID NAME MODE REPLICAS IMAGE PORTS agyxlaswxakr webservice replicated 2/2 nginx:latest *:80->80/tcp
Вы также можете проверить работающий контейнер с помощью следующей команды:
docker ps
Вы должны увидеть следующий вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c887cad1df2e nginx:latest "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 80/tcp webservice.2.jelyj9gmeb7ikl2scg7mz8yg8
Чтобы получить подробную информацию о веб-сервисе, выполните следующую команду:
docker service ps webservice
Вы должны увидеть следующий вывод:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS eye9zukwwrkq webservice.1 nginx:latest workernode Running Running 3 minutes ago jelyj9gmeb7i webservice.2 nginx:latest masternode Running Running 3 minutes ago
Проверка Docker Swarm
На данный момент мы развернули контейнер Nginx на узлах кластера, включая узел управления. Теперь вы можете получить доступ к своему веб-серверу Nginx, используя любой IP-адрес узла Worker или узла Manager:
Заключение
В приведенном выше руководстве вы узнали, как настроить кластер Docker Swarm в CentOS 8. Теперь вы можете добавить любое количество рабочих узлов в кластер Docker Swarm и масштабировать свое приложение.