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 대시보드와 로그그룹을 통해 수집된 로그를 확인 해볼 것이다.