메뉴 닫기

[AWS] 다수의 계정에서 사용중인 EKS 클러스터 버전 정리 스크립트

EKS로 구성된 시스템을 많이 운영중인데, EKS버전 서비스 지원 종료에 따른 업데이트 이슈가 있어서 최근 버전 정리를 시작했다.

게시물 작성일 기준 현재 EKS 1.17은 EOS가 되었고, 1.18 업데이트가 다가오고 있다.

EKS 릴리스, 지원 종료 일정

Amazon EKS Kubernetes 릴리스 일정
Kubernetes 버전업스트림 릴리스Amazon EKS 릴리스Amazon EKS 지원 종료
1.162019년 9월 8일2020년 4월 30일2021년 9월 27일
1.172019년 12월 9일2020년 7월 10일2021년 11월 2일
1.182020년 3월 23일2020년 10월 13일2022년 2월 18일
1.192020년 8월 26일2021년 2월 16일2022년 4월
1.22020년 12월 8일2021년 5월 18일2022년 6월
1.212021년 4월 8일2021년 7월 19일2022년 9월
AWS 문서에서 업데이트 일정을 주기적으로 확인하는 것이 가장 정확하다. 가끔식 지원종료 일정이 바뀐다.


EOS 이후에는 클러스터가 자동으로 업데이트 될 수 있기 때문에, 미리 일정을 잡아서 업데이트를 수행하거나, EOS이후 최대 3개월 동안 해당 클러스터에 대해서 업데이트를 진행하지 않도록 AWS 측에 Support Case를 접수해야한다.
물론 자동으로 업데이트가 EOS되는 날 바로되는 것은 아니지만, 언제든지 시작될 수 있다.

관리하는 AWS 계정이 워낙 많다보니 EKS를 사용하는 시스템이 꽤 있기에, AWS CLI를 활용해서 EKS 클러스터 명과 버전을 출력할 수 있도록 스크립트를 작성해 보았다.
각 계정별로 조회 권한이 있는 유저의 액세스 키를 발급해서, .aws/credentials 파일에 프로파일 별로 관리중이다.
아래 스크립트는 현재 credentials파일에 있는 프로파일에 대해 명령어를 실행하도록 for loop를 태웠다.

EKS 클러스터 이름 나열 스크립트

#!/bin/bash

CONFIG_FILE="$HOME/.aws/credentials"

for profile in $(awk '/^\[/ { gsub("[[]|]", ""); print $1 }' < $CONFIG_FILE);
    do
        echo $profile
        aws eks list-clusters --region ap-northeast-2 --profile $profile
    done

AWS CLI 명령어를 사용하면 EKS list-clusters 명령어를 사용해 계정내 클러스터의 이름을 확인할 수 있다.
하지만 문제는 여기서 출력하는 데이터는 단순히 클러스터의 이름만 출력 해준다.
버전을 출력 하려면, describe-cluster 명령어를 사용하고, –name 옵션에 클러스터 명을 집어 넣어야 버전 정보가 같이 나오게 된다.

EKS 클러스터 버전 나열 스크립트

"#!/bin/bash

CONFIG_FILE=""""$HOME/.aws/credentials""""
output=""""EKS.csv""""
echo ""Profile, ClusterName, EKS Version"" > $output
for profile in $(awk '/^\[/ { gsub(""[[]|]"", """"); print $1 }' < $CONFIG_FILE);
    do
           echo $profile
            aws eks list-clusters --region ap-northeast-2 --profile $profile --output text | awk '{print $2}' | while read line; do
            aws --profile $profile --region ap-northeast-2 eks describe-cluster --name $line | jq --arg profile ""$profile"" -r '$profile + (.cluster | "",\(.name),\(.version)"")' >> $output
            done
    done"

그래서 위에서 출력된 클러스터 이름을 가지고 다시한번 반복문을 돌려서, 해당 클러스터의 버전을 표시할 수 있도록 위와 같이 업데이트 해보았다.

포맷팅을 위해서 AWK 와 JQ를 혼용해서 사용하였다.
해당 스크립트를 실행하려면, 리눅스 환경에서 실행해야 하며(윈도우에서는 WSL) aws-cli, jq와 awk가 설치되어 있어야 한다.

스크립트에 대해서 조금 더 설명하자면, output이라고 되어있는 변수명의 파일에 출력을 저장하도록 설정되어 있고, 클러스터 이름 출력을 파이프에 태워서-> describe-cluster 명령어에서 클러스터 명과 버전을 파일에 >> 추가 하도록 작성했다.

단순히 현재 계정의 EKS 클러스터 리스트를 보려면, 아래와 같이 aws cli명령어로 가능하고,

aws eks list-clusters --region ap-northeast-2

EKS 클러스터의 버전을 보려면, 아래와 같이 describe-cluser에 위에서 찾은 클러스터 명을 입력해주어야한다.

aws eks describe-cluster --name eks-cluster-name --region ap-northeast-2

그럼 이만.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.

%d 블로거가 이것을 좋아합니다: