Cronicle 을 통한 클라우드 인스턴스 Scheduling

leesj·2021년 9월 18일
0

Infra

목록 보기
2/9

클라우드 인스턴스의 스케쥴링을 위한 오픈소스 도구

사전작업

  • Ubuntu 20.04 LTS
  • docker install
  • cronicle container 생성
  • apt update
$ sudo apt-get update
$ sudo apt-get upgrade

Cronicle install

  • primary node 에서 진행 - primary 및 worker 노드에서 docker 컨테이너로 진행 시 대시보드 정상적으로 시작되지 않아 서버 자체에 인스톨로 진행

1) Docker 컨테이너로 설치 설치

$ docker run -it -d --net host --name cronicle -v /opt/cronicle/data:/opt/cronicle/data:rw -v /opt/cronicle/logs:/opt/cronicle/logs:rw --hostname vpc-prod-instance1 -p 3012:3012 intelliops/cronicle:latest
  • 내부로 접속해 설정 변경
# bin/control.sh setup
# bin/control.sh restart
$ docker start cronicle

2) Manual install

// node js 설치
$ sudo apt install nodejs
$ sudo apt install npm
// 일반 계정 권한으로 설치를 시도 할 경우 아래와 같이 설치가 진행되지 않는다.
ERROR: The Cronicle auto-installer must be run as root.

# curl -s https://raw.githubusercontent.com/jhuckaby/Cronicle/master/bin/install.js | node
Cronicle Installer v1.3
Copyright (c) 2015 - 2018 PixlCore.com. MIT Licensed.
Log File: /opt/cronicle/logs/install.log

Fetching release list...

Version 0.8.62 is already installed, and is the latest.
# mkdir -p /opt/cronicle
# cd /opt/cronicle
# curl -L https://github.com/jhuckaby/Cronicle/archive/refs/tags/v0.8.62.tar.gz | tar zxvf - --strip-components 1

# npm install
# node bin/build.js dist
  • 트러블슈팅
internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'async'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/opt/cronicle/bin/build.js:11:13)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
  • 해결
$ sudo npm install -g async
npm uninstall async
npm install -g async
npm link async
Welcome to Cronicle!
First time installing?  You should configure your settings in '/opt/cronicle/conf/config.json'.
Next, if this is a master server, type: '/opt/cronicle/bin/control.sh setup' to init storage.
Then, to start the service, type: '/opt/cronicle/bin/control.sh start'.
For full docs, please visit: http://github.com/jhuckaby/Cronicle
Enjoy!
  • 서버의 hostname 을 확인
# node -e 'console.log(require("os").hostname());'
# /opt/cronicle/bin/storage-cli.js get global/servers/0
# /opt/cronicle/bin/storage-cli.js vi global/servers/0

Worker node 작업

1) Docker 작업

  • cronicle 은 sudo 권한으로 실행되기때문에 sudo 로 실행하지 않으면 컨테이너가 시작되지 않는다.
  • 더불어 볼륨을 설정 해 준 /opt/cronicle/data, /opt/cronicle/logs 디렉터리의 권한을 777 로 변경해주어 어떤 계정에서도 읽고쓰기가 가능하도록 설정
$ sudo docker run -it -d --net host  --name cronicle -v /opt/cronicle/data:/opt/cronicle/data:rw -v /opt/cronicle/logs:/opt/cronicle/logs:rw --hostname [WORKERNODE_HOSTNAME] -p 3012:3012 intelliops/cronicle:latest

Primary node의 Secret key 복사

  • Primary 에서 worker node 를 등록하기 위해서는 primary<>worker 간 config.json 내의 secret_key 의 value가 일치해야 함
// Primary server 에서 수행
$ vi /opt/cronicle/conf/config.json
copy secret_key value
// Worker server 에서 수행
// 컨테이너로 실행 한 경우
$ docker exec --user root -i -t [CONTAINER_ID] /bin/bash
$ vi /opt/cronicle/conf/config.json
// 컨테이너 실행 아닌 경우 동일 경로에 붙여넣기

위에서 복사한 secret_key 를 붙여넣음
  • secret_key 복사가 완료 되면 아래와 control.sh 통해 daemon 을 시작
# /opt/cronicle/bin/control.sh start

/opt/cronicle/bin/control.sh start: Starting up Cronicle Daemon...
/opt/cronicle/bin/control.sh start: Cronicle Daemon started

UI 에서 신규 서버로 worker node 를 등록

  • primary 서버에서 admin 탭 > Servers 에서 컨테이너를 실행시킨 worker 노드를 신규 서버로 등록

재부팅시 컨테이너 자동재시작 1) - docker 설정

  • 이 설정은 인스턴스 shutdown 시 .pid 파일에 pid 가 남아있어 cronicle container 가 정상적으로 실행되지 못함
  • shutdown 리부팅시 pid 파일을 먼저 삭제 하거나 Service 등록하는 것으로 해결 필요할듯
$ docker update --restart unless-stopped [CONTAINER_ID]

재부팅시 컨테이너 자동재시작 2) - init.d 를 활용

$ sudo cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
$ sudo chmod 775 /etc/init.d/cronicled

Or, if you have Debian-style Linux (i.e. Ubuntu), type this:

$ sudo update-rc.d cronicled defaults

For multi-server clusters, you'll need to repeat these steps on each server.

방화벽 작업

워커노드에서는 마스터 노드와 통신을 위해 3012 포트가 오픈되어 있어야 함

Upgrade cronicle

0개의 댓글