쿠버네티스를 사용하여 Amazon EKS 작업자 노드에 SSM 에이전트를 설치합니다. DaemonSet - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

쿠버네티스를 사용하여 Amazon EKS 작업자 노드에 SSM 에이전트를 설치합니다. DaemonSet

작성자: 마헨드라 레바나시다파 (AWS)

환경: PoC 또는 파일럿

기술: 컨테이너 및 마이크로서비스, 인프라 DevOps

AWS 서비스: Amazon EKS, AWS Systems Manager

요약

참고, 2021년 9월: 최신 Amazon EKS 최적화 AMI는 SSM 에이전트를 자동으로 설치합니다. 자세한 내용은 2021년 6월 AMI 릴리스 정보를 참조하세요..

Amazon Elastic Kubernetes Service(Amazon EKS)에서는 보안 지침으로 인해 워커 노드에 Secure Shell(SSH) 키 페어가 연결되어 있지 않습니다. 이 패턴은 수동으로 설치하거나 노드의 Amazon 머신 이미지 (AMI) 를 교체하는 대신 Kubernetes DaemonSet 리소스 유형을 사용하여 모든 작업자 노드에 AWS Systems Manager Agent (SSM Agent) 를 설치하는 방법을 보여줍니다. DaemonSet 작업자 노드의 크론 작업을 사용하여 SSM 에이전트 설치 일정을 잡습니다. 이 패턴을 사용하여 워커 노드에 다른 패키지를 설치할 수도 있습니다.

클러스터에서 문제를 해결할 때 필요에 따라 SSM 에이전트를 설치하면 SSH 키 페어 없이 워커 노드와 SSH 세션을 설정하거나, 로그를 수집하거나, 인스턴스 구성을 살펴볼 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

  • Amazon Elastic Compute Cloud(Amazon EC2) 워커 노드가 있는 기존 Amazon EKS 클러스터입니다.

  • 컨테이너 인스턴스는 SSM 서비스와 통신하는 데 필요한 권한을 가져야 합니다. AWS Identity 및 Access Management (IAM) 관리 역할 AmazonSSM은 EC2 인스턴스에서 SSM 에이전트를 실행하는 데 필요한 권한을 ManagedInstanceCore 제공합니다. 자세한 내용은 AWS Systems Manager 설명서를 참조하세요.

제한 사항

  • 이 패턴은 Fargate 플랫폼에서 지원되지 DaemonSets 않으므로 AWS Fargate에는 적용할 수 없습니다.

  • 이 패턴은 Linux 기반 워커 노드에만 적용됩니다.

  • DaemonSet 포드는 권한 모드에서 실행됩니다. Amazon EKS 클러스터에 권한 모드에서 포드를 차단하는 웹후크가 있는 경우 SSM 에이전트는 설치되지 않습니다.

아키텍처

다음 사항은 이 패턴에 대한 아키텍처를 나타낸 다이어그램입니다.

쿠버네티스를 사용하여 Amazon EKS DaemonSet 작업자 노드에 SSM 에이전트를 설치합니다.

도구

도구

  • kubectl은 Amazon EKS 클러스터와 상호 작용하는 데 사용하는 명령줄 유틸리티입니다. 이 패턴은 Amazon EKS DaemonSet 클러스터에 a를 kubectl 배포하는 데 사용되며, 이 클러스터는 모든 작업자 노드에 SSM 에이전트를 설치합니다.

  • Amazon EKS를 사용하면 자체 Kubernetes 컨트롤 플레인이나 노드를 설치, 운영 및 유지 관리할 필요 없이 AWS에서 Kubernetes를 쉽게 실행할 수 있습니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템입니다.

  • AWS Systems Manager Session Manager를 사용하면 대화형, 원클릭, 브라우저 기반 쉘 또는 AWS Command Line Interface(AWS CLI)를 통해 EC2 인스턴스, 온프레미스 인스턴스 및 가상 머신(VM)을 관리할 수 있습니다.

코드

다음 코드를 사용하여 Amazon EKS 클러스터에 SSM 에이전트를 설치할 DaemonSet 구성 파일을 생성합니다. 에픽 섹션의 지침을 따르세요.

cat << EOF > ssm_daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: labels: k8s-app: ssm-installer name: ssm-installer namespace: kube-system spec: selector: matchLabels: k8s-app: ssm-installer template: metadata: labels: k8s-app: ssm-installer spec: containers: - name: sleeper image: busybox command: ['sh', '-c', 'echo I keep things running! && sleep 3600'] initContainers: - image: amazonlinux imagePullPolicy: Always name: ssm command: ["/bin/bash"] args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"] securityContext: allowPrivilegeEscalation: true volumeMounts: - mountPath: /etc/cron.d name: cronfile terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumes: - name: cronfile hostPath: path: /etc/cron.d type: Directory dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler terminationGracePeriodSeconds: 30 EOF

에픽

작업설명필요한 기술

EKS 클러스터에 액세스하려면 kubectl을 설치하고 구성합니다.

Amazon EKS 클러스터에 액세스하도록 아직 kubectl을 설치 및 구성하지 않은 경우, Amazon EKS 설명서의 kubectl 설치를 참조하세요.

DevOps
작업설명필요한 기술

DaemonSet 구성 파일을 생성합니다.

이 패턴의 앞부분에 있는 코드 섹션의 코드를 사용하여 Amazon EKS 클러스터에 배포할 이라는 DaemonSet ssm_daemonset.yaml 구성 파일을 생성합니다.

에서 시작한 DaemonSet 포드에는 기본 컨테이너와 컨테이너가 있습니다init. 기본 컨테이너에는 sleep명령이 있습니다. init 컨테이너에는 /etc/cron.d/ 경로에 SSM 에이전트를 설치하기 위한 cron 작업 파일을 생성하는 command 섹션이 포함되어 있습니다. 크론 작업은 한 번만 실행되며, 크론 작업이 생성된 파일은 작업이 완료된 후 자동으로 삭제됩니다.

초기화 컨테이너가 완료되면 기본 컨테이너는 60분 동안 기다린 후 종료됩니다. 60분 후 새 포드가 시작됩니다. 이 포드는 SSM 에이전트가 없는 경우 SSM 에이전트를 설치하거나 SSM 에이전트를 최신 버전으로 업데이트합니다.

필요한 경우 포드를 하루에 한 번 다시 시작하거나 더 자주 실행하도록 sleep 명령을 수정할 수 있습니다. 

DevOps

Amazon EKS DaemonSet 클러스터에 배포합니다.

이전 단계에서 생성한 DaemonSet 구성 파일을 Amazon EKS 클러스터에 배포하려면 다음 명령을 사용합니다.

kubectl apply -f ssm_daemonset.yaml

이 명령은 워커 노드에서 포드를 DaemonSet 실행하여 SSM 에이전트를 설치하기 위한 a를 생성합니다.

DevOps

관련 리소스