AWS. EKS CDK Troubleshooting - KubectlV23Layer

created Nov 08, 2022 | updated Nov 08, 2022

AWS CDK를 사용해서 EKS를 관리하고 있는데, 노드 그룹 추가하면서 EKS 업데이트 오류가 발생했다. 현재 사용 중인 EKS 버전은 v23이다.

비용 최적화로 노드(EC2 인스턴스)를 많이 쓰기 어렵고, 네트워크 IP 관리로 IP도 작은 대역을 받아야 한다. 적은 리소스로 시작하고 증설하는 것을 고려해야 하니 IP 고갈 상황을 가정하고 서브넷과 노드를 추가하는 것을 테스트하다 발견하게 되었다.

Incompatible Kubectl Version


처음 맞이한 오류는 kubectl version 오류였다.

이 오류로 v22부터 KubectlLayer를 추가해줘야 한다는 사실을 알게 되었다. 해결하기 위한 방법은 KubectlLayer만 추가하면 되었기 때문에 의외로 간단했다.

Error Message

Received response status [FAILED] from custom resource. 
Message returned: 
Error: b'configmap/aws-auth configured\nerror: error retrieving RESTMappings to prune: invalid resource extensions/v1beta1, Kind=Ingress, Namespaced=true: no matches for kind "Ingress" in version "extensions/v1beta1"\n'
Logs: /aws/lambda/eks-cluster-name-awscdkawse-Handler886CB40B-g4KR4U875rYD at invokeUserFunction (/var/task/framework.js:2:6) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async onEvent (/var/task/framework.js:1:365) at async Runtime.handler (/var/task/cfn-response.js:1:1474) (RequestId: 6fae4ba7-ef6d-4613-a129-7c2bc1566fe7)

Solution

  • lambda-layer-kubectl-v23 설치
npm install @aws-cdk/lambda-layer-kubectl-v23
  • eks cluster 생성 시 kubectlLayer 지정
import { KubectlV23Layer } from '@aws-cdk/lambda-layer-kubectl-v23';
const cluster = new eks.Cluster(this, 'EksCluster', {
  // 생략..
  kubectlLayer: new KubectlV23Layer(this, 'KubectlLayer'),  // 생략..
});

FileNotFoundError


그런데 두 번째 오류가 발생했다. aws 디렉토리를 못찾는다는 오류였다.

Error Message

[ERROR] FileNotFoundError: [Errno 2] No such file or directory: 'aws': 'aws'
Traceback (most recent call last):
  File "/var/task/index.py", line 14, in handler
    return apply_handler(event, context)
  File "/var/task/apply/__init__.py", line 37, in apply_handler
    subprocess.check_call(cmd)
  File "/var/lang/lib/python3.7/subprocess.py", line 358, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/var/lang/lib/python3.7/subprocess.py", line 339, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/var/lang/lib/python3.7/subprocess.py", line 800, in __init__
    restore_signals, start_new_session)
  File "/var/lang/lib/python3.7/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)

Solution

KubectlLayer 추가로 발생하는 오류였는데, 오류 내용과 리서치로는 해결 방법을 찾기가 어려웠다.

다른 곳에 코드 수정이 필요할 수도 있지만, 일단 cdk 버전을 업데이트하기로 했다. 그리고 오류가 해결되었다.

  • cdk 및 packages 버전 업데이트
npx ncu -u
rm package-lock.json
rm -rf ./node_modules
npm install

결론


  • AWS CDK를 사용해 v22 이상의 EKS를 생성 및 관리하고 있다면, KubectlLayer를 추가해야 한다.
  • KubectlLayer는 CDK 버전이 맞지 않으면 오류가 발생한다. CDK v2.50.0에서는 정상 동작한다.

현재 내 버전 정보

$ node -v                                                                                                                                                                                          ✔ │ 09:08:07 PM 
v16.16.0

$ cdk version                                                                                                                                                                                      ✔ │ 11:23:02 PM 
2.50.0 (build 4c11af6)

참고


※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

유리아쥬 제모스 스틱 레브르 립밤 4g x 10개, 12개, 무향솔가 어드밴스드 칼슘 컴플렉스 타블렛, 120개입, 1개커세어 코리아 정품 DARK CORE PRO 무선 충전 RGB 게이밍 마우스 / 다용도 에코백 사은품 증정, 혼합색상, RGP0076