CoreOS에서 ECS 클러스터 구축

7995 단어 CoreOS도커ECSAWS
ECS 클러스터를 만드는 데는 기본 EC2 인스턴스가 필요하지만, AMI로 공식적으로 ECS-optimized AMI을 권장합니다. ECS-optimized AMI는 Amazon Linux AMI에 새로운 Docker와 ecs-agent, ecs-init 스크립트를 함께 제공하는 사람입니다. 처음 튜토리얼에서 클러스터를 만들 때도이 AMI가 사용됩니다.

단, 실제로 EC2의 내용에 대해서는 (2016-06-15 시점)
  • Linux Kernel 3.10 이상에서
  • Docker 1.5.0 이상에서
  • ecs-agent 컨테이너가 서 있습니다

  • 그렇다면 무엇이든 좋은 것입니다. ECS-optimized AMI는 이를 충족하는 권장 구성일 뿐입니다.

    그렇다면 Docker 환경에 특화된 CoreOS를 사용해 봅시다.

    ECS 클러스터 준비



    아마도 클러스터를 만들고 싶다면 Management Console 또는 ecs-cli로 새 클러스터를 만들 수 있습니다.
    또는 기존 클러스터에 노드 추가 형태로 CoreOS 인스턴스를 추가할 수 있습니다.

    (없으면) IAM Role ecsInstanceRole 만들기



    ecs-agent가 ECS API에 액세스하므로 인스턴스에 권한을 부여해야 합니다.
    처음 튜토리얼에서 클러스터를 시작한 경우는 만들어지고 있다고 생각합니다만, 확실히 클러스터를 구축하는 경우는 이 Role 가 없기 때문에 만들 필요가 있습니다.

  • IAM -> Roles -> Create New Role 열기
  • AWS Service Role에서 Amazon EC2를 열고 AmazonEC2ContainerServiceforEC2Role를 선택합니다.
  • [Create Role]
  • 만든 Role을 열고 [Trusted Relationships] -> [Show policy document]가 다음과 같은지 확인합니다. 되지 않으면 덮어쓰기.
  • {
      "Version": "2008-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    CoreOS EC2 인스턴스 구축



    최소한의 ECS 클러스터 노드에 필요한 설정입니다. 인스턴스 유형 등은 원하는대로 설정하십시오.

  • AMI: Running CoreOS on EC2 에서 사용 중인 리전과 update channel 에 맞는 것을 선택하세요.

  • IAM Role: ecsInstanceRole 그렇지 않으면 ecs-agent가 시작되지 않습니다.

  • User Data: 다음과 같이 ecs-agent를 Systemd Unit으로 시작합니다. ECS_CLUSTER 는 방금 만든 or 추가할 기존 ECS 클러스터 이름이어야 합니다.
  • #cloud-config
    
    ---
    coreos:
      units:
        - name: docker-tcp.socket
          command: start
          enable: true
          content: |
            [Unit]
            Description=Docker Socket for the API
    
            [Socket]
            ListenStream=2375
            Service=docker.service
            BindIPv6Only=both
    
            [Install]
            WantedBy=sockets.target
        - name: amazon-ecs-agent.service
          command: start
          runtime: true
          content: |
            [Unit]
            Description=AWS ECS Agent
            Documentation=https://docs.aws.amazon.com/AmazonECS/latest/developerguide/
            Requires=docker.socket
            After=docker.socket
    
            [Service]
            Environment=ECS_CLUSTER=your-cluster-name
            Environment=ECS_LOGLEVEL=info
            Environment=ECS_VERSION=latest
            Restart=on-failure
            RestartSec=30
            RestartPreventExitStatus=5
            SyslogIdentifier=ecs-agent
            ExecStartPre=-/bin/mkdir -p /var/log/ecs /var/ecs-data /etc/ecs
            ExecStartPre=-/usr/bin/touch /etc/ecs/ecs.config
            ExecStartPre=-/usr/bin/docker kill ecs-agent
            ExecStartPre=-/usr/bin/docker rm ecs-agent
            ExecStartPre=/usr/bin/docker pull amazon/amazon-ecs-agent:${ECS_VERSION}
            ExecStart=/usr/bin/docker run --name ecs-agent \
                                        --env-file=/etc/ecs/ecs.config \
                                        --volume=/var/run/docker.sock:/var/run/docker.sock \
                                        --volume=/var/log/ecs:/log \
                                        --volume=/var/ecs-data:/data \
                                        --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \
                                        --volume=/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro \
                                        --publish=127.0.0.1:51678:51678 \
                                        --env=ECS_LOGFILE=/log/ecs-agent.log \
                                        --env=ECS_LOGLEVEL=${ECS_LOGLEVEL} \
                                        --env=ECS_DATADIR=/data \
                                        --env=ECS_CLUSTER=${ECS_CLUSTER} \
                                        amazon/amazon-ecs-agent:${ECS_VERSION}
    

    이 설정으로 직접 지어지며 Launch Configuration에 작성되어 Auto Scaling을 통해 지어집니다.

    인스턴스가 클러스터에 추가되었는지 확인



    ECS Management Console에서 대상 클러스터의 ECS Instances 탭을 열고 Container Instance가 추가되었는지 확인합니다.



    끝입니다.

    REF


  • Amazon EC2 Container Service (coreos.com)
  • Amazon ECS Container Instance IAM Role - Amazon EC2 Container Service
  • 좋은 웹페이지 즐겨찾기