기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
쿠버네티스를 사용하여 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 에이전트를 설치합니다.](images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)
도구
도구
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 클러스터에 액세스하도록 아직 | DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
DaemonSet 구성 파일을 생성합니다. | 이 패턴의 앞부분에 있는 코드 섹션의 코드를 사용하여 Amazon EKS 클러스터에 배포할 이라는 DaemonSet 에서 시작한 DaemonSet 포드에는 기본 컨테이너와 컨테이너가 있습니다 초기화 컨테이너가 완료되면 기본 컨테이너는 60분 동안 기다린 후 종료됩니다. 60분 후 새 포드가 시작됩니다. 이 포드는 SSM 에이전트가 없는 경우 SSM 에이전트를 설치하거나 SSM 에이전트를 최신 버전으로 업데이트합니다. 필요한 경우 포드를 하루에 한 번 다시 시작하거나 더 자주 실행하도록 | DevOps |
Amazon EKS DaemonSet 클러스터에 배포합니다. | 이전 단계에서 생성한 DaemonSet 구성 파일을 Amazon EKS 클러스터에 배포하려면 다음 명령을 사용합니다.
이 명령은 워커 노드에서 포드를 DaemonSet 실행하여 SSM 에이전트를 설치하기 위한 a를 생성합니다. | DevOps |
관련 리소스
kubectl 설치(Amazon EKS 설명서)
세션 관리자 설정(AWS Systems Manager 설명서)