Amazon Web Services

AWS EKS Container Insight 알아보기 (3)

lleez5367·2021년 9월 26일·조회 14,379

Container Insights CloudWatch Agent 설치 

Amazon EKS 클러스터에서 지표를 수집할 수 있도록 CloudWatch 에이전트를 설치한다. 

1) CloudWatch을 위한 namespace 생성

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
namespace/amazon-cloudwatch created

$ k get ns 
NAME                              STATUS             AGE
amazon-cloudwatch       Active                72s

2) 클러스터 내 서비스 어카운트 생성 

docker-compose로 minio 서버를 띄우고 지정한 포트로 접속한다. 

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
serviceaccount/cloudwatch-agent created
clusterrole.rbac.authorization.k8s.io/cloudwatch-agent-role created
clusterrolebinding.rbac.authorization.k8s.io/cloudwatch-agent-role-binding created

$ k get serviceaccount -n amazon-cloudwatch 
NAME                          SECRETS             AGE
cloudwatch-agent       1                          51s
default                         1                          4m

3) CloudWatch Agent를 위한 ConfigMap 생성 

3-1) 다음 명령을 실행하여 ConfigMap YAML을 kubectl client host에 다운로드한다.

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml
% Total         % Received % Xferd  Average  Speed   Time   Time   Time   Current 
                                                        Dload     Upload  Total   Spent  Left    Speed
100     521     100      521     0     0     1371          0     --:--    --:--    --:--      1371
 

3-2) 다운 받은 YAML 파일의 {{cluster_name}} 부분을 사용 중인 클러스터 이름으로 변경한다.

Amazon EKS를 사용하고 있다면, CloudWatch agent가 EC2 태그를 통해 클러스터 이름을 찾아낼 것이므로, cluster_name을 삭제해도 된다. 

apiVersion: v1
data:
  cwagentconfig.json: |
      {
        "logs": {
          "metrics_collected": {
             "kubernetes": {
                "cluster_name": "{{cluster_name}}",
                "metrics_collection_interval": 60
              }
          },
          "force_flush_interval": 5
       }
    }
kind: ConfigMap
metadata:
     name: cwagentconfig
     namespace: amazon-cloudwatch 
 
3-3) ConfigMap 생성 
$ kubectl apply -f cwagent-configmap.yaml
configmap/cwagentconfig created 

4) CloudWatch Agent를 DaemonSet으로 배포 

4-1) 클러스터에서 StatsD를 사용하지 않는 경우 

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
daemonset.apps/cloudwatch-agent created 

4-2) StatsD를 사용하는 경우 

$ curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
ports:
   - containerPort: 8125
      hostPort: 8125
      protocol: UDP

$ kubectl apply -f cwagent-daemonset.yaml 

4-3) Agent가 정상적으로 배포되었는지 확인 

$ kubectl get pods -n amazon-cloudwatch 
NAME   READY      STATUS      RESTARTS          AGE
cloudwatch-agent-dhmx2     0/1      Pending   0  41s
cloudwatch-agent-l7qxf        1/1       Running   0  41s
cloudwatch-agent-r7tj6        0/1       Pending   0  41s
cloudwatch-agent-shqc9      1/1       Running   0  41s
Agent 설치가 완료되면 CloudWatch agent는 /aws/containerinsights/Cluster_Name/performance라는 로그 그룹을 생성하고 성능 로그 이벤트를 해당 로그그룹으로 보낸다. 
 
여기까지 CloudWatch Agent를 Amazon EKS 클러스터 내에 설치하는 과정이며, 이어서는 Container Insights 대시보드와 로그그룹을 통해 수집된 로그를 확인 해볼 것이다. 

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.