평소에 pause container는 어떻게 궁금했었는데, LuLu님 블로그에 pause container실행 과정을 분석해주셨습니다. kubelet, conatinerd 코드를 분석하면서 과정 하나하나 설명되어 있습니다.
- 블로그 링크: https://mateon.tistory.com/127
1. pause contianer가 network namespace를 생성할까?
위 블로그 내용을 읽고 공부를 해보니 제가 잘못 알고 있었던 내용이 있었습니다. pause container가 network namespace를 생성하고 유지하는줄 알았는데, CRI가 network namespace를 생성하고 pause container가 network namespace를 유지하는 것이었습니다.
CRI가 containerd일 경우 network namespace는 RunPodSandBox함수에서 생성합니다.
RunPodSandBox함수는 100줄이 넘고 호출하는 함수가 매우 많습니다. 하지만, 함수 이름이 해석하기 매우 쉽게 되있어서 코드를 분석하지 않고도 함수가 무엇을 하는지 짐작할 수 있습니다. 저는 chatGPT를 사용해서 RunPodSandBox함수가 무엇을 하는지 분석해달라고 했습니다.
2. pause container의 컨테이너 이미지는 어디에 설정될까?
pause 컨테이너는 pod의 network namespace 유지, 좀비 프로세스 죽이는 역할을 합니다. 그래서 infra container라는 이름을 갖습니다. pause 컨테이너는 컨테이너이기 때문에 컨테이너 이미지가 필요한데, kubelet 실행시 --pod-infra-container-image 인자로 설정됩니다. 아래는 EKS 워커노드의 kubelet 설정입니다.
ps -ef | grep kubelet
3. pause container 컨테이너 이미지 pull 에러가 발생하면?
pause container 컨테이너 이미지가 없다면 pod는 생성오류가 발생합니다.
2024년 2월쯤에 containerd 업데이트 영향으로, EKS에서 pause container 컨테이너 이미지가 노드에서 삭제되는 오류가 있었습니다. 가비지 컬렉터에 의해 pause container 컨테이너 이미지가 삭제되었고, ECR에서 이미지 pull에러가 발생했었습니다.
- github issue: https://github.com/awslabs/amazon-eks-ami/issues/1597
EKS에서 containerd 업데이트 영향을 점검하지 못해서 발생한 버그였고, pause container 컨테이너 이미지가 더이상 가비지 컨테이너로 삭제되지 않도록 패치했습니다. 사용자는 AMI를 업그레이드 해야 위 문제를 해결할 수 있었습니다.
'전공영역 공부 기록' 카테고리의 다른 글
맥북 Linux VM에서 perf사용 방법 (0) | 2024.09.21 |
---|---|
AWS ALB에 여러 도메인 인증서(ACM)를 적용한 경험 (2) | 2024.09.11 |
컨테이너 원리 - pivot_root(chroot 취약점을 해결) (1) | 2024.09.08 |
Istio ServiceEntry설정할 때 IP만 사용하려면? (0) | 2024.09.04 |
AWS security group 체이닝이 불가능한지 확인하는 방법 (0) | 2024.09.04 |