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)