AWS에서 Drene Autoscaler 구축

9883 단어 droneDockerAWS
Drone는 현대 CI 서비스를 구현하는 OSS입니다.CircleaCI 및 TravvisCI 바람의 CI를 직접 구축할 수 있습니다.
한 기계에 설치하여 여러 대의 기계를 에이전트(실제 운행 작업의 노드)로 사용하거나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:
필요한 환경 변수는엔비 등에 써.
  • 서버/autioscaller의DRONE_LOGS_TRACE
  • 잘 모르는 곳에 멈춰야 하기 때문에 일지를 많이 써야 한다.
  • autooscaller의DRONE_SERVER_HOST
  • autaoscallerDRONE_SERVER_HOST는autaoscaller와 서버가 교환하는 물건이지만, 그렇게 에이전트에게 전달되기 때문에 에이전트에서도 도착할 수 있는 영역을 지정해야 합니다.여기는public의 영역DRONE_SERVER_HOST을 지정하였으며,links는 autooscaller에서 이름을 해결할 수 있습니다.
  • volume
  • drone은 기본적으로 sqlite를 사용합니다.그 서류 놓는 데야.
  • 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.
  • minage의 행위
  • 에이전트가 시작된 후 DRONE_POOL_MIN_AGE 내에 이 실례를 삭제하지 않습니다.넘으면 삭제.지금까지는 건물과 별 상관이 없는 것 같아요.처음엔 마지막 빌딩이 끝나고DRONE_POOL_MIN_AGE 지나가면 지워질 것 같았는데 그런 일은 없었어요.
  • IAM Role 및 에이전트의 부팅 및 보안 그룹
  • 액세스 키와 액세스 기밀을 지정합니다.또는 AWSIAM = EC2 IAM Role이 실제로 사용됩니다.필요한 동작은 다음과 같다.
    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을 사용하려고 ECR을 사용할 수 있는 IAM Role을 만들어 그 ARN을 이 환경 변수로 지정했습니다.에이전트 노드가 시작되면 IAM Role이 할당됩니다.
    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
    
  • CLI
  • 호스트와 autooscaller의 문서 정보가 다릅니다.autooscaller를 사용하면 autooscaller가 비교적 참고 가치가 있다.
    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의 느낌을 주거나 전체적인 동작을 연상케 하는 구조라면 구축하기가 쉬울 것 같아요.
  • 포럼
  • https://discourse.drone.io
  • 좋은 웹페이지 즐겨찾기