

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

# preBootstrapCommands를 사용하여 Amazon EKS 워커 노드에 SSM 에이전트 및 CloudWatch 에이전트를 설치합니다
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## 요약
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

이 패턴은 Amazon EKS 클러스터를 생성하는 동안 Amazon Web Services(AWS) 클라우드의 Amazon Elastic Kubernetes Service(Amazon EKS) 워커 노드에 AWS Systems Manager Agent(SSM Agent) 및 Amazon CloudWatch 에이전트를 설치하기 위한 코드 샘플과 단계를 제공합니다. `eksctl` [구성 파일 스키마](https://eksctl.io/usage/schema/)(Weaveworks 설명서)의 `preBootstrapCommands` 속성을 사용하여 SSM 에이전트와 CloudWatch 에이전트를 설치할 수 있습니다. 그러면 Amazon Elastic Compute Cloud(Amazon EC2) 키 쌍을 사용하지 않고도 SSM 에이전트를 사용하여 워커 노드에 연결할 수 있습니다. 또한 CloudWatch 에이전트를 사용하여 Amazon EKS 워커 노드의 메모리 및 디스크 사용률을 모니터링할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ macOS, Linux 또는 Windows에 설치 및 구성된 [eksctl 명령줄 유틸리티](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+ macOS, Linux 또는 Windows에 설치 및 구성된 [kubectl 명령줄 유틸리티](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

**제한 사항 **
+ 장기 실행 스크립트를 `preBootstrapCommands`**** 속성에 추가하지 않는 것이 좋습니다. 이렇게 하면 스케일링 작업 중에 노드가 Amazon EKS 클러스터에 가입하는 것이 지연되기 때문입니다. 대신 [사용자 지정 Amazon Machine Image(AMI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html)를 생성하는 것이 좋습니다.
+ 이 패턴은 Amazon EC2 Linux 인스턴스에만 적용됩니다.

## 아키텍처
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**기술 스택**
+ Amazon CloudWatch()
+ Amazon Elastic Kubernetes Service(Amazon EKS)
+ AWS Systems Manager Parameter Store

**대상 아키텍처**

다음 다이어그램은 `preBootstrapCommands`를 사용하여 설치한 SSM 에이전트를 사용함으로써 Amazon EKS 워커 노드에 연결하는 사용자의 예를 보여줍니다.

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 `preBootstrapCommands` 속성과 함께 `eksctl` 구성 파일을 사용하여 Amazon EKS 클러스터를 생성합니다. 그러면 SSM 에이전트와 CloudWatch 에이전트가 설치됩니다.

1. 조정 활동으로 인해 나중에 클러스터에 합류하는 모든 새 인스턴스는 사전 설치된 SSM 에이전트 및 CloudWatch 에이전트를 사용하여 생성됩니다.

1. 사용자는 SSM 에이전트를 사용하여 Amazon EC2에 연결한 다음 CloudWatch 에이전트를 사용하여 메모리 및 디스크 사용률을 모니터링합니다.

## 도구
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 사용하면 AWS 리소스의 지표와 AWS에서 실행하는 애플리케이션을 실시간으로 모니터링할 수 있습니다.
+ [Amazon Elastic Kubernetes Service(Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치하거나 유지 관리할 필요 없이 AWS의 Kubernetes를 실행하는 데 도움이 됩니다.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)는 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)를 사용하면 대화형, 원클릭, 브라우저 기반 쉘 또는 AWS Command Line Interface(AWS CLI)를 통해 EC2 인스턴스, 온프레미스 인스턴스 및 가상 머신을 관리할 수 있습니다.
+ [eksctl](https://eksctl.io/usage/schema/)은 Amazon EKS에서 Kubernetes 클러스터를 생성하고 관리하기 위한 명령줄 유틸리티입니다.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)는 클러스터 API 서버와 통신하기 위gks 명령줄 유틸리티입니다.

## 에픽
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Amazon EKS 클러스터 생성
<a name="create-an-amazon-eks-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CloudWatch 에이전트 구성 파일을 저장합니다. | Amazon EKS 클러스터를 생성하려는 AWS 리전의 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)에 CloudWatch 에이전트 구성 파일을 저장합니다. 이렇게 하려면 AWS Systems Manager Parameter Store에서 [파라미터를 생성](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)하고 파라미터의 이름(예:`AmazonCloudwatch-linux`)을 기록해 두세요.자세한 내용은 이 패턴의 [추가 정보](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) 섹션에서 *예제 CloudWatch 에이전트 구성 파일* 코드를 참조하세요. | DevOps 엔지니어 | 
| eksctl 구성 파일 및 클러스터를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### SSM 에이전트와 CloudWatch 에이전트가 작동하는지 검증합니다.
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSM 에이전트를 테스트합니다. | AWS Systems Manager 설명서에서 [세션 시작](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli)에 설명된 방법 중 하나를 사용하여 SSH를 통해 Amazon EKS 클러스터 노드에 연결합니다. | AWS DevOps | 
| CloudWatch 에이전트를 테스트합니다. | CloudWatch 콘솔을 사용하여 CloudWatch 에이전트를 검증합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## 관련 리소스
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [서버에 CloudWatch 에이전트 설치 및 실행](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html)(Amazon CloudWatch 설명서)
+ [Systems Manager 파라미터 생성(콘솔)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)(AWS Systems Manager 설명서)
+ [CloudWatch 에이전트 구성 파일 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html)(Amazon CloudWatch 설명서)
+ [세션 시작(AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli)(AWS Systems Manager 설명서)
+ [세션 시작 Amazon EC2 콘솔)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console)(AWS Systems Manager 설명서)

## 추가 정보
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**예제 CloudWatch 에이전트 구성 파일**

다음 예제에서 CloudWatch 에이전트는 Amazon Linux 인스턴스의 디스크 및 메모리 사용률을 모니터링하도록 구성되어 있습니다.

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**예제 eksctl 구성 파일**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**추가 코드 세부 정보**
+ `preBootstrapCommands` 속성의 마지막 줄에서 `AmazonCloudwatch-linux`는 AWS Systems Manager Parameter Store에서 생성된 파라미터의 이름입니다. Amazon EKS 클러스터를 생성한 동일한 AWS 리전의 파라미터 스토어에 `AmazonCloudwatch-linux`를 포함해야 합니다. 파일 경로를 지정할 수도 있지만 더 쉽게 자동화하고 재사용할 수 있도록 Systems Manager를 사용하는 것이 좋습니다.
+ `eksctl` 구성 파일에서 `preBootstrapCommands`를 사용하는 경우 AWS Management Console에 두 개의 시작 템플릿이 표시됩니다. 첫 번째 시작 템플릿에는 `preBootstrapCommands`에 지정된 명령이 포함됩니다. 두 번째 템플릿에는 `preBootstrapCommands`에 지정된 명령과 기본 Amazon EKS 사용자 데이터가 포함됩니다. 이 데이터는 노드가 클러스터에 가입하도록 하는 데 필요합니다. 노드 그룹의 Auto Scaling 그룹은 이 사용자 데이터를 사용하여 새 인스턴스를 스핀업합니다.
+ `eksctl` 구성 파일의 `iam` 속성을 사용하는 경우 첨부된 AWS Identity 및 Access Management IAM) 정책에 필요한 추가 정책과 함께 기본 Amazon EKS 정책을 나열해야 합니다. *eksctl 구성 파일 및 클러스터 생성* 단계의 코드 스니펫에서 `CloudWatchAgentServerPolicy` 및 `AmazonSSMMangedInstanceCore`는 CloudWatc 에이전트와 SSM 에이전트가 예상대로 작동하도록 하기 위해 추가된 추가적인 정책입니다. `AmazonEKSWorkerNodePolicy`, `AmazonEKS_CNI_Policy`, `AmazonEC2ContainerRegistryReadOnly` 정책은 Amazon EKS 클러스터가 올바르게 작동하는 데 필요한 필수 정책입니다.