auto-scaler project

배찌 (배찌)·2023년 2월 20일
0

auto-scaler service

목록 보기
2/2

프로젝트 구성

클라우드를 모르는 사람을 위한 docker, kubernetes, MSA, MSA 적용 사례를 안내하고 kubernetes 일부 기능을 구현한것에 대한 설명

한계점

아무래도 혼자서 프로젝트를 진행하다 보니 auto-scaler를 구성하였지만, 그에 올라가는 서비스를 MSA를 적용해서 만들어 내기에는 물리적인 한계가 있었다.

아쉬운 점

구성을 하다보니 하나 빼먹은것이 바로 CI/CD 파이프 라인을 구성하는 것이였다.
찾아보니 jenkins를 추가하여 구성하여 CI/CD 파이프 라인을 구성안이 있었는데 조금만 더 빨리 알아챘으면 했을것을... 이라고 생각이 들더라

아래는 아키텍처와 GUI 환경이다



사용된 명령어

manager node와 worker node 공통적인 명령어(centos7)

yum -y update
yum -y install wget
wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo 
yum install -y docker-ce
systemctl start docker
systemctl enable docker
firewall-cmd --permanent --add-port=2377/tcp 
firewall-cmd --reload

여기서 wget하여 받은 내용은 docker-ce 버전을 받기위한 레포지터리를 추가하는 것이다.
그리고 기본적으로 swarm은 2377포트을 사용하여 기본적으로 통신한다. 포트는 바꿀수 있다.

다음은 Manager node 명령이다

docker swarm init --advertise-addr <master node ip>

이렇게하면 토큰이 발행된다 나의 경우 다음과 같이 발행되엇다

docker swarm join --token SWMTKN-1-6bafe6qvmrs6fx502ziz7adg51kyz10kz8yhmnbykenewtxvdq-0v2m8mk8hpa77qtkn2tcb4x2p 10.0.0.10:2377

이 내용을 그대로 worker node에 적으면 manager node에서 다음과 같은 결과물이 나올것이다.

지금부터는 master node에서 진행이 된다.
설치는 open-souce로 나온 내용을 토대로 진행하고 뒤에 추가로 weave-scope를 추가하여 GUI에서 컨트롤 할수 있게 하였다.

Master node

mkdir -p /go/src
cd /go/src
git clone https://github.com/thomasjpfan/docker-scaler.git
export SLACK_WEBHOOK_URL=[SLACK_WEB_URL]

/go/src를 만들어준 이유는 centos7에서 부족한 레포지터리를 생성하여 문제를 완하한것이다.
SLACK_WEBHOOK_URL은 SLACK으로 Monitro service에서 log을 보내줄것이다. 그렇기때문에 SLACK에서 로그를 분석하여 추가적인 조치가 필요할때 진행을 할수가 있다.

overlay network를 생성한다
여기서 overlay network란 vxlan을 사용하여 가상 네트워크를 만들어 낸다. 주소 체계는 ipv6로 구성되어 있고, overlay network로 분리된 네트워크는 서로 연결할수가 없게 된다.

docker network create -d overlay proxy 
docker stack deploy \
    -c stacks/docker-flow-proxy-mem.yml \
    proxy

나는 딱히 수정할 내용이 없어서 내용을 수정하지 않았지만 실상에서 사용된다면 내용수정이 상당히 많이 수정이 필요할거라고 예상이 된다.

docker network create -d overlay scaler
docker stack deploy \
    -c stacks/docker-scaler-service-scale-tutorial.yml \
    scaler

Alert Manager를 설정하고, 암호화를 진행한다.

echo "global:
  slack_api_url: '$SLACK_WEBHOOK_URL'
route:
  receiver: 'slack'
  group_by: [service, scale, type]
  group_interval: 5m
  repeat_interval: 5m
  routes:
  - match_re:
      scale: up|down
      type: service
    receiver: 'scale'
  - match:
      alertname: scale_service
    group_by: [alertname, service, status]
    repeat_interval: 10s
    group_interval: 1s
    group_wait: 0s
    receiver: 'slack-scaler'

receivers:
  - name: 'slack'
    slack_configs:
      - send_resolved: true
        title: '[{{ .Status | toUpper }}] {{ .GroupLabels.service }} service is in danger!'
        title_link: 'http://172.30.1.250/monitor/alerts'
        text: '{{ .CommonAnnotations.summary }}'
  - name: 'slack-scaler'
    slack_configs:
      - title: '{{ .GroupLabels.alertname }}: {{ .CommonAnnotations.request }}'
        color: '{{ if eq .GroupLabels.status \"error\" }}danger{{ else }}good{{ end }}'
        title_link: 'http://172.30.1.250/monitor/alerts'
        text: '{{ .CommonAnnotations.summary }}'
  - name: 'scale'
    webhook_configs:
      - send_resolved: false
        url: 'http://scaler:8080/v1/scale-service'
" | docker secret create alert_manager_config -

이 부분 설명하기엔 기본적인 템플릿을 가져온거라 딱히 할말이 없다...

docker service create -d --replicas 1 \
  --name demo \
  -l com.df.scaleUpBy=3 \
  -l com.df.scaleDownBy=2 \
  -l com.df.scaleMin=1 \
  -l com.df.scaleMax=7 \
--network proxy \
  alpine:3.6 sleep 100000000000

docker service를 생성한다.

-d는 백그라운드에서 실행

--replicas 1은 1개의 relica를 생성

--name demo는 생성할 Service의 이름을 demo로 지정

-l com.df.scaleUpBy=3은 Scale Up By 3으로 지정

-l com.df.scaleDownBy=2: Scale Down By 2를 지정

-l com.df.scaleMin=1은 Scale 최소 갯수를 1로 지정

-l com.df.scaleMax=7은Scale 최대 갯수를 7로 지정

alpine:3.6는 사용할 Image
그리고 연결된 네트워크는 proxy 로만 이루어져 있는데 그이유는 proxy가 중계 서버를 진행하여 보안을 강화하기 위한 방편이다. 그에 대한 내용은 리버스 프록시에 대해서 자세히 공부하면 알게 될것이다.
sleep은 일정 시간 동안만 컨테이너가 실행되도록 지정하는 명령어이다. 이곳에서는 100000000000이나 줘서 약 317년 동안 꺼지지 않으니 끄지 않겟다는것이다. 응용해본다면 잠시 동안 서비스가 진행되어야 하는 데몬을 올려야할때 그때 요긴하게 사용될것같다.

이제 모든 설치가 완료되어 swarm에서 컨테이너가 왓다갓다하는지 궁금할것이다 그렇다면 다음 명령어를 설치하여 GUI를 켜보자

docker service create \
  --name=viz \
  --publish=8080:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  dockersamples/visualizer

여기서 constraint=node.role==manager는 manager 노드에서는 이 서비스가 진행되라는 의미이다. 딱히 다른의미는 없다.

여기서 나는 이제 오케스트레이션을 추가하여 GUI에서 편하게 트래픽량을 감시하고. terminal창을 오픈하여 설정을 추가하거나 변경할수 있는 시스템을 구성하고자 했다.
그리하여 추가된것이 바로 weave-scope이다.
만약 내가 weave-scope를 빨리 알았다면 대부분의 서비스를 weave-scope로 전환했을지도 모르겟다.

아래는 설치 방법이다.
manager와 worker 공통적으로 설정

sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
firewall-cmd --add-port=4040/tcp --permananet
firewall-cmd --reload

manager node 명령어

scope launch

worker node 명령어

scope launch <manager node>

이렇게하면 정상적으로 연결되어 화면에서 볼수 있다.

profile
Never give up Impossible is nothing

0개의 댓글