Amazon ECS 컨테이너 에이전트를 수동으로 업데이트하는 방법(비 Amazon ECS 최적화 AMI) - Amazon Elastic Container Service

Amazon ECS 컨테이너 에이전트를 수동으로 업데이트하는 방법(비 Amazon ECS 최적화 AMI)

Amazon ECS 컨테이너 에이전트를 수동으로 업데이트하는 방법(비 Amazon ECS 최적화 AMI)

참고

에이전트 업데이트는 Windows 컨테이너 인스턴스에 적용되지 않습니다. 새로운 컨테이너 인스턴스를 시작하여 Windows 클러스터의 에이전트 버전을 업데이트하는 것을 권장합니다.

  1. SSH를 통해 컨테이너 인스턴스에 로그인합니다.

  2. 에이전트가 ECS_DATADIR 환경 변수를 사용하여 해당 상태를 저장하는지 확인합니다.

    ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR

    출력:

    "ECS_DATADIR=/data",
    중요

    이전 명령이 ECS_DATADIR 환경 변수를 반환하지 않으면 에이전트를 업데이트하기 전에 이 컨테이너 인스턴스에서 실행 중인 태스크를 모두 중지해야 합니다. ECS_DATADIR 환경 변수를 사용하는 새 버전의 에이전트는 해당 상태를 저장하며 태스크가 실행되는 동안 에이전트를 업데이트해도 문제가 발생하지 않습니다.

  3. Amazon ECS 컨테이너 에이전트를 중지합니다.

    ubuntu:~$ docker stop ecs-agent
  4. 에이전트 컨테이너를 삭제합니다.

    ubuntu:~$ docker rm ecs-agent
  5. /etc/ecs 디렉터리와 Amazon ECS 컨테이너 에이전트 구성 파일이 /etc/ecs/ecs.config에 있는지 확인합니다.

    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  6. /etc/ecs/ecs.config 파일을 편집하고 이 파일에 최소한 다음과 같은 변수 선언이 포함되어 있는지 확인합니다. 컨테이너 인스턴스가 기본 클러스터에 등록되지 않도록 하려면 클러스터 이름을 ECS_CLUSTER의 값으로 지정합니다.

    ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default

    이들을 비롯한 기타 에이전트 런타임 옵션에 대한 자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 섹션을 참조하세요.

    참고

    필요할 경우 (시작 시 Amazon EC2 사용자 데이터를 사용하여 컨테이너 인스턴스에 다운로드할 수 있는) Amazon S3에 에이전트 환경 변수를 저장할 수 있습니다. 프라이빗 리포지토리의 인증 자격 증명과 같은 민감한 정보에는 이 방법을 권장합니다. 자세한 정보는 Amazon S3에 컨테이너 인스턴스 구성 저장태스크에 대한 프라이빗 레지스트리 인증 단원을 참조하십시오.

  7. Amazon Elastic Container Registry Public에서 최신 Amazon ECS 컨테이너 에이전트 이미지를 가져옵니다.

    ubuntu:~$ docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest

    출력:

    Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
  8. 컨테이너 인스턴스에서 최신 Amazon ECS 컨테이너 에이전트를 실행합니다.

    참고

    Docker 재시작 정책 또는 프로세스 관리자(예: upstart 또는 systemd)를 사용하여 컨테이너 에이전트를 서비스 또는 데몬으로 취급하고 종료 후에 다시 시작되도록 합니다. 자세한 내용은 Docker 설명서에서 컨테이너 자동 시작재시작 정책을 참조하세요. 이를 위해 Amazon ECS 최적화 AMI는 ecs-init RPM을 사용합니다. GitHub에서 이 RPM의 소스 코드를 확인할 수 있습니다.

    다음의 에이전트 실행 명령 예제는 각 옵션을 표시하기 위해 여러 줄로 구분되어 있습니다. 이들을 비롯한 기타 에이전트 런타임 옵션에 대한 자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 섹션을 참조하세요.

    중요

    운영 체제에서 SELinux를 사용하는 경우 docker run 명령에 --privileged 옵션이 필요합니다. 또한 SELinux 사용 컨테이너 인스턴스의 경우에는 :Z 옵션을 /log/data 볼륨 마운트에 추가하는 것이 좋습니다. 그러나 명령을 실행하기 전에 이러한 볼륨에 대한 호스트 마운트가 존재해야 하며 그렇지 않으면 no such file or directory 오류가 발생합니다. SELinux 사용 컨테이너 인스턴스에서 Amazon ECS 에이전트를 실행하는 데 문제가 있는 경우 다음 조치를 취하세요.

    • 컨테이너 인스턴스에서 호스트 볼륨 마운트 지점을 생성합니다.

      ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
    • 아래의 docker run 명령에 --privileged 옵션을 추가합니다.

    • 아래의 docker run 명령에 대한 /log/data 컨테이너 볼륨 마운트(예: --volume=/var/log/ecs/:/log:Z)에 :Z 옵션을 추가합니다.

    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest
    참고

    Error response from daemon: Cannot start container 메시지가 표시되는 경우 sudo docker rm ecs-agent 명령을 사용하여 실패한 컨테이너를 삭제하고 에이전트를 다시 실행해볼 수 있습니다.