Commit 6bd9f50d authored by JooHan Hong's avatar JooHan Hong

swarm app deploy init

parent c69b5abd
Pipeline #5270 passed with stages
in 45 seconds
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Docker Swarm 클러스터 기반의 배포검증
> www.hongsnet.net 서비스에 Docker Swarm 환경에서의 배포를 검증하여, 적용한다.
# 시작하기 전에
Docker Swarm의 경우 `Auto Scaling` 이 지원되지 않는다. 따라서 이 기능뿐만 아니라 객관적으로 봤을 때 `K8s`(쿠버네티스)가 확실히 인기있는 이유가 있어보인다.
# Docker Swarm system Overview
다음과 같이 4대로 구성검증을 수행한다.
* TB2-DOCKER-MANAGER01 ( Exclude Node )
* TB2-DOCKER-MANAGER02 + Node
* TB3-DOCKER-MANAGER03 + Node
* TB3-DOCKER-NODE01
Node의 현황은 다음과 같다.
```bash
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
2smb95jog1melt4ok0ptpn3n9 * TB2-DOCKER-MANAGER01 Ready Active Reachable 20.10.2
libu6alzhci724h31ji3z6fb7 TB2-DOCKER-MANAGER02 Ready Active Leader 20.10.2
2jy4lkwokf20w9gfe9cyqb3w7 TB3-DOCKER-MANAGER03 Ready Active Reachable 20.10.2
3h6eeb8p5f1fcwes0a8dpotzr TB3-DOCKER-NODE01 Ready Active 20.10.2
```
> Leader는 현재 TB2-DOCKER-MANAGER02 Host 이다.
네트워크의 구성의 경우 다음과 같이 swarm 네트워크가 overlay Driver로 구성되어 있다.
```bash
# docker network ls
NETWORK ID NAME DRIVER SCOPE
279270fdaeca bridge bridge local
3bf40dd45669 docker_gwbridge bridge local
40f4fa5b4f4f host host local
ymt3wq5s0ikc ingress overlay swarm
a205a35afbb6 none null local
```
네트워크, 서비스, 그리고 모든 컨테이너들을 **스택**(Stack)이라 부른다. 스택을 생성하기 위해서는 **docker stack** 명령어를 사용해야 하지만, 스택을 docker-stack.yml 파일로 수행하기를 원한다. 따라서 다음과 같이 명령어를 실행하면 된다.
```bash
# cat docker-stack.yml
version: '3'
services:
hongsnet-php74:
image: registry.hongsnet.net/joohan.hong/docker/php:centos7-httpd-php74
ports:
- 9800:80
volumes:
- "/DOCKERS/var_www_html:/var/www/html"
deploy:
mode: replicated
replicas: 5
update_config:
parallelism: 5
delay: 10s
restart_policy:
condition: on-failure
max_attempts: 3
window: 120s
```
```bash
# docker stack deploy --with-registry-auth --compose-file=docker-stack.yml php
Creating network php_default
Creating service php_hongsnet-php74
```
* 파일명은 반드시 docker-compose.yml 일 필요는 없다.
* --with-registry-auth 옵션은 Private Repository의 인증정보를 Node에 전달한다는 옵션인데, GitLAB의 Registry의 경우는 제대로 동작하지 않는다. 따라서 일단 Public 하게 권한을 열어서 테스트했다.
* php : 이 것은 스택의 이름으로써 임의대로 지정하면 된다.
그럼, 다음과 같이 **5 개**의(replicas: 5) 컨테이너가 실행된다.
```bash
# ./docker_service_ls.sh
ID NAME MODE REPLICAS IMAGE PORTS
ap48zdixh6wq php_hongsnet-php74 replicated 5/5 registry.hongsnet.net/joohan.hong/docker/php:centos7-httpd-php74 *:9800->80/tcp
```
이제 **Front-end**(HA-Proxy)에서 서비스에 접속테스트를 해본다.
```bash
# curl -s 172.24.0.238:9800
server_name 변수 값 : <b>172.24.0.238</b><br>remote_addr 변수 값 : <b>10.255.0.3</b><br>server_addr 변수 값 : <b>10.255.245.67</b><br>server_hostname 변수 값 : <b>004975e04c1f</b><br>script_name 변수 값 : <b>/index.php</b><br>s/w version 변수 값 : <b>Apache/2.4.6 (CentOS) PHP/7.4.14</b><br>
```
> DEMO Url : https://swarm.freehongs.net/
# Docker Swarm `확장`
**컨테이너 확장**을 위해 현재 5개에서 **Replicas를 10으로 늘려보자**.
```bash
# docker service update --replicas 10 php_hongsnet-php74
php_hongsnet-php74
overall progress: 10 out of 10 tasks
1/10: running [==================================================>]
2/10: running [==================================================>]
3/10: running [==================================================>]
4/10: running [==================================================>]
5/10: running [==================================================>]
6/10: running [==================================================>]
7/10: running [==================================================>]
8/10: running [==================================================>]
9/10: running [==================================================>]
10/10: running [==================================================>]
verify: Service converged
```
다음과 같이 5 -> **10개로 확장**되었다.
```bash
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ap48zdixh6wq php_hongsnet-php74 replicated 10/10 registry.hongsnet.net/joohan.hong/docker/php:centos7-httpd-php74 *:9800->80/tcp
```
# Docker Swarm `축소
그럼 현재 10개의 컨테이너를 **다시 5개로 축소**해보자.
```bash
# docker service update --replicas 5 php_hongsnet-php74
php_hongsnet-php74
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
```
다음과 같이 10 -> 5개로 축소되었다.
```bash
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ap48zdixh6wq php_hongsnet-php74 replicated 5/5 registry.hongsnet.net/joohan.hong/docker/php:centos7-httpd-php74 *:9800->80/tcp
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment