일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- FastAPI
- ansible
- asyncio
- EKS
- event loop
- K8S
- Deployment
- Django
- YAML
- asgi
- IAC
- intervals
- github
- Python
- ebs
- Kubernetes
- dockerfile
- POD
- elasticsearch
- 쿠버네티스
- WSGI
- docker
- terraform
- IAM
- EC2
- DevOps
- Service
- AWS
- 자바스크립트
- leetcode
- Today
- Total
궁금한게 많은 개발자 노트
[ k8s ] CSI Driver가 kube-system ns에 설치되는 이유 본문
Kubernetes에서 pod생성 시 persistent volume(PV)을 생성 및 연결하기 위해서는 pod가 생성될 노드에 AWS EBS CSI Driver를 설치해야 하며, 이후에도 EBS CSI Driver를 통해 AWS EBS Volume에 API호출해서 AWS EBS Volume의 수명 주기 관리가 가능합니다.
즉, Ansible을 통해 EBS CSI 드라이버를 설치하면, 드라이버 컴포넌트들은 Kubernetes 클러스터의 노드에 설치됩니다. 이 드라이버 컴포넌트는 Kubernetes 노드에 설치된 CSI 드라이버 레지스트리에 등록되며, Kubernetes는 이를 사용하여 EBS 볼륨을 프로비저닝하고 마운트합니다.
구체적으로 말하면, CSI 드라이버 컴포넌트는 Kubernetes 노드의 파일 시스템에 설치되며, Kubernetes의 Kubelet 서비스는 이 드라이버 컴포넌트를 시작하고 관리합니다. 드라이버 컴포넌트는 EBS CSI 드라이버 레지스트리에서 사용 가능한 드라이버로 등록됩니다. 따라서, Kubernetes 클러스터의 모든 노드에서 사용 가능한 EBS CSI 드라이버로 사용할 수 있습니다.
좀 더 상세히 Pod에서의 AWS EBS Volume에 대한 요청이 어떻게 AWS EBS Volume으로 전달되는지 살펴보려 합니다.
Pod에서 AWS EBS에 대한 요청은 Kube API Server를 통해 EBS CSI 드라이버로 전달됩니다. Pod에서 EBS 볼륨을 요청할 때, Pod 스펙에 EBS 볼륨 정보를 지정하면 API Server는 해당 정보를 EBS CSI 드라이버로 전달합니다. EBS CSI 드라이버는 이 정보를 사용하여 실제로 AWS EBS Volume API를 호출하여 EBS 볼륨을 생성하고 Pod에 마운트합니다.
그러기 위해서는 EBS CSI Driver가 클러스터 상에서 kube-system namespace에 설치되어야 합니다. 그 이유는 kubernetes의 시스템 구성 요소로서 역할을 수행하기 위해서는 kube-system namespace에 설치되어 다른 ns에서 CSI Driver에 대한 시스템 요청에 응답할 수 있는 위치이기 때문입니다.
kube-system 네임스페이스는 Kubernetes 클러스터의 시스템 구성 요소를 포함하는 네임스페이스입니다. 이 네임스페이스에는 Kubernetes 시스템 구성 요소인 API 서버, 스케줄러, 컨트롤러 매니저 등이 포함됩니다.
Amazon EBS CSI 드라이버도 Kubernetes 클러스터의 시스템 구성 요소 중 하나이며, ebs-csi-controller Pod는 Amazon EBS CSI 드라이버를 구현하는 컨트롤러 역할을 합니다. 이 컨트롤러는 Amazon EBS CSI 드라이버와 상호 작용하여 Amazon EBS 볼륨을 생성하고 마운트하는 등의 작업을 수행합니다.
따라서, ebs-csi-controller Pod가 kube-system 네임스페이스에 설치되는 것은 Kubernetes 클러스터의 시스템 구성 요소로서 필요한 위치이며, 이를 통해 Amazon EBS CSI 드라이버를 효과적으로 관리할 수 있습니다.
추가적으로 해당 노드에서 AWS EBS Volume API를 호출할 수 있는 IAM권한이 필요합니다.
이는 EBS CSI Driver를 설치하는 것만으로는 부족하며, AWS EBS Driver를 설치하면서 생성되는 ebs-csi-controller-sa 에 AmazonEBSCSIDriverPolicy 를 가지는 Role을 위임하여 해당 Node에서 생성되는 Pod가 PV, PVC에 대한 권한 및 AWS EBS Volume을 요청할 수 있는 권한을 부여합니다. (더 자세한 내용은 아레 Guide를 참고)
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/csi-iam-role.html
이렇게 생성된 서비스 계정은 Kubernetes Pod에서 Amazon EBS CSI 드라이버를 사용할 때 사용됩니다. Pod이 시작될 때, 이 서비스 계정에게 AWS API를 호출하는 데 필요한 권한이 부여됩니다.
IAM 역할을 만들고 해당 역할에 권한을 부여한 다음, 이를 서비스 계정과 연결하여 Kubernetes Pod에서 사용할 수 있습니다. 즉, IAM 역할을 만들고 이를 서비스 계정과 연결하여 Kubernetes Pod에서 Amazon EBS 볼륨을 사용하도록 구성할 수 있습니다.
'DevOps' 카테고리의 다른 글
[ k8s ] StatefulSet 배포 시 복수의 Persistent Volume Dynamic Provisioning (0) | 2023.06.12 |
---|---|
[ k8s ] elasticsearch설치 시 vm.max_map_count값 변경 (0) | 2023.04.24 |
[ k8s ] Kubernetes Persistent Volume 적용하기 (0) | 2023.04.18 |
[ k8s ] Volume, PV, PVC란? (0) | 2023.04.11 |
[ Docker ] docker cli 주요 명령어 및 옵션 (0) | 2023.03.14 |