AWS에서 Drene Autoscaler 구축
한 기계에 설치하여 여러 대의 기계를 에이전트(실제 운행 작업의 노드)로 사용하거나kubernetes를 사용하는 선택https://docs.drone.io/installation/github/이 있으면 다른 선택Drone Autoscale이 존재한다.이는 작업의 대기 상태에 따라 에이전트(AWS의 경우 EC2)의 수를 자동으로 증감한 것이다.drone은kubernetes에서도 움직일 수 있기 때문에 비슷한 일이 발생할 수 있지만 autoscaller는 솔직한 느낌을 주거나kubernetes의 지식이 필요하지 않아도 가볍다.
라이선스
drone은 5000builds peryear 이전에 Starter 프로그램으로 무료로 사용할 수 있습니다.
어, Autoscale FAQ에 그런 얘기는 없었네.어느 것이 정확합니까?
Open Source Edition에서는 사용할 수 없습니다.Open Source Edition은 Single 노드이기 때문에 그렇습니다.Open Source Edition의 설명에는 현재https://drone.io부터 링크가 없는 것 같습니다.
프로비저닝
drone 서버와drone autooscaller를 쉽게 하기 위해 EC2 실례적인 설정을 고려했습니다.레지스트리는 ECR을 사용합니다.
다음은 docker-compose입니다.yml 쓰면 움직일 것 같아서.
docker-compose.yml
version: '3.7'
services:
server:
image: drone/drone:1
volumes:
- serverdata:/data
ports: [ "80:80" ]
restart: always
environment:
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_SERVER_HOST=your.drone.server
- DRONE_GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
- DRONE_GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
- DRONE_RPC_SECRET=${DRONE_SERVER_SECRET}
- DRONE_USER_CREATE=username:${DRONE_ADMIN_USER},machine:false,admin:true,token:${DRONE_ADMIN_TOKEN}
- DRONE_AGENTS_ENABLED=true
- DRONE_SERVER_PROTO=http
- DRONE_LOGS_TRACE=true
- DRONE_GIT_ALWAYS_AUTH=true # github enterpriseの場合は必要
autoscaler:
image: drone/autoscaler
links:
- server:your.drone.server
volumes:
- autoscalerdata:/data
ports: [ "8080:8080" ]
restart: always
environment:
- DRONE_SERVER_PROTO=http
- DRONE_SERVER_HOST=your.drone.server
- DRONE_SERVER_TOKEN=${DRONE_ADMIN_TOKEN}
- DRONE_AGENT_TOKEN=${DRONE_SERVER_SECRET}
- DRONE_LOGS_TRACE=true
- DRONE_INTERVAL=30s
- DRONE_POOL_MIN_AGE=2h
- DRONE_POOL_MIN=0
- DRONE_POOL_MAX=4
- DRONE_AMAZON_SUBNET_ID=${DRONE_AMAZON_SUBNET_ID}
- DRONE_AMAZON_SECURITY_GROUP=${DRONE_AMAZON_SECURITY_GROUP}
- DRONE_AMAZON_IMAGE=${DRONE_AMAZON_IMAGE}
- DRONE_AMAZON_IAM_PROFILE_ARN=${DRONE_AMAZON_IAM_PROFILE_ARN}
- DRONE_AMAZON_SSHKEY=${DRONE_AMAZON_SSHKEY}
- DRONE_AMAZON_REGION=ap-northeast-1
- DRONE_AMAZON_INSTANCE=t2.small
- DRONE_AMAZON_DEVICE_NAME=/dev/xvda
- AWS_IAM=true
volumes:
serverdata:
autoscalerdata:
필요한 환경 변수는엔비 등에 써.DRONE_LOGS_TRACE
DRONE_SERVER_HOST
DRONE_SERVER_HOST
는autaoscaller와 서버가 교환하는 물건이지만, 그렇게 에이전트에게 전달되기 때문에 에이전트에서도 도착할 수 있는 영역을 지정해야 합니다.여기는public의 영역DRONE_SERVER_HOST
을 지정하였으며,links는 autooscaller에서 이름을 해결할 수 있습니다.DRONE_SERVER_SECRET
DRONE_RPC_SECRET
,authoscaller 측은 DRONE_AGENT_TOKEN
의 환경 변수입니다.autooscaller가 에이전트를 시작할 때 그렇게 납품한 것 같습니다.DRONE_ADMIN_USER
, DRONE_ADMIN_TOKEN
DRONE_USER_CREATE
와 같은 환경 변수가 있으면 서버가 시작될 때user가 생성됩니다.autooscaller 측도adminuser의token이 서버에 API 호출을 해야 하기 때문에 같이 지정합니다 (autooscaller 측DRONE_SERVER_TOKEN
.DRONE_POOL_MIN_AGE
내에 이 실례를 삭제하지 않습니다.넘으면 삭제.지금까지는 건물과 별 상관이 없는 것 같아요.처음엔 마지막 빌딩이 끝나고DRONE_POOL_MIN_AGE
지나가면 지워질 것 같았는데 그런 일은 없었어요.ec2:CreateTags
ec2:DescribeInstances
ec2:RunInstances
ec2:TerminateInstances
EC2 실례를 만들면 autooscaller는 에이전트 노드pull &run 에이전트의 docker 이미지를 보여줍니다.따라서 2376 포트를 통해 autooscaller에서 에이전트에 접근할 수 있습니다.이곳은 이해하기 어려운 곳으로, FAQ에도 기재돼 있다.DRONE_AMAZON_IMAGE
DRONE_AMAZON_IMAGE
에서 아무것도 지정하지 않으면 해당 영역의 기본 AMI가 사용됩니다.마음에 드는 사람이 AMI를 직접 만들어 보세요.docker가 설치되어 있으면 자동으로 docker를 시작하면 OK.AMI는 DRONE_AMAZON_DEVICE_NAME
에 특정 값을 지정해야 할 수 있습니다.다른 device name의 경우 인스턴스가 시작되면 즉시 중지됩니다.DRONE_AMAZON_IAM_PROFILE_ARN
ECR 방문은 여기를 참조하십시오.
호스트
/var/run/docker.sock
를 마운트하고 미리 step로 그림을 pull합니다.호스트 디렉터리를 마운트하려면 창고가trusted이어야 합니다.서비스에서 privte imge를 사용하려면 이pull을 사용한 후 일반 stepdetach: true
를 사용하면 됩니다https://docs.drone.io/user-guide/pipeline/services/#detached-steps.steps:
- name: pull
image: docker:18
commands:
- apk --update add python3 && pip3 install awscli
- $(aws ecr get-login --region ap-northeast-1 --no-include-email)
- docker pul account.dkr.ecr.ap-northeast-1.amazonaws.com/image
volumes:
- name: docker
path: /var/run/docker.sock
https://docs.drone.io/cli/
https://autoscale.drone.io/cli/
DRONE_TOKEN=http://localhost
DRONE_AUTOSCALER=http://localhost:8080
DRONE_TOKEN=${DRONE_ADMIN_TOKEN}
위의 설정에서는 EC2에서 drone cli를 사용할 수 있습니다.감상
AWS 액세스 키를 발매하고 싶지 않고, 보안 단체를 최대한 엄격하게 보호하려고 하는데, 워낙 정보가 부족하고 다양한 지식이 없어 어렵기 때문이다.drone의 느낌을 주거나 전체적인 동작을 연상케 하는 구조라면 구축하기가 쉬울 것 같아요.
Reference
이 문제에 관하여(AWS에서 Drene Autoscaler 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/krtx/items/a979efd20a9207f0489a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)