-
[Kubernetes] 클러스터, 노드, 네임스페이스, 파드공부/쿠버네티스&헬름 2025. 1. 24. 23:49
클러스터
쿠버네티스 내 가장 큰 단위로 컨테이너를 실행하는 노드의 집합입니다.
노드
쿠버네티스의 노드는 컨테이너를 실행하는 물리 서버 또는 가상 머신입니다. 노드는 컨테이너가 실행되는 컴퓨터라고 생각하면 됩니다.
클러스터 구성요소
사용자는 kubectl ****명령어를 통해 쿠버네티스 클러스터와 통신하고 클러스터 내의 마스터 노드(컨트롤 플레인)는 API를 통해 클러스터 전체를 컨트롤하며 워커 노드(데이터 플레인)는 마스터 노드의 명령에 의해 워크로드를 생성하고 서비스합니다. 즉, 마스터 노드는 클러스터를 관리하는 역할이며 워커 노드는 실제 실행을 담당하는 역할입니다.
네임스페이스
클러스터 내의 논리적인 분리 단위입니다. 대규모 애플리케이션을 운영하다보면 비슷한 이름의 오브젝트가 존재할텐데 이 것들을 한 곳에 두면 서로 간의 충돌이나 오작동과 같이 다양한 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 클러스터 내의 오브젝트들을 네임스페이스를 통해 논리적인 분리로 관리의 용이성을 가져갈 수 있습니다.
네임스페이스는 독립적인 클러스터처럼 작동할 수 있고 동일한 이름의 오브젝트도 다른 이름을 가진 네임스페이스로 격리해 사용할 수 있습니다. 또한 네임스페이스는 논리적인 분리이므로 서로 다른 네임스페이스에 속한 파드끼리 통신이 가능합니다.
https://ecanarys.com/namespaces-in-kubernetes/ 네임스페이스의 사용 목적 첫 번째로는 네임스페이스는 클러스터 내에서 리소스를 논리적으로 분리하고 관리할 수 있습니다. 파드에 직접적으로 리소스를 할당하는 형태가 아닌 네임스페이스에 지정한 리소스만큼만 사용하도록 제한합니다. dev/prod 라는 네임스페이스가 있다고 가정할 때, dev 네임스페이스에는 cpu: 50, prod 네임스페이스는 cpu: 200 이라고 설정하면 dev 네임스페이스에 할당된 모든 오브젝트들은 cpu를 50까지만 사용할 수 있습니다.
마지막으로 사용자별 네임스페이스 접근을 제한할 수 있습니다.
네임스페이스 조회
💡
kube- 접두사로 시작하는 네임스페이스는 쿠버네티스 시스템 전용이므로, 사용자는 이를 생성하지 않습니다.
사용 중인 클러스터의 현재 네임스페이스를 나열할 수 있습니다.
kubectl get namespace NAME STATUS AGE default Active 1d kube-node-lease Active 1d kube-public Active 1d kube-system Active 1d
쿠버네티스는 초기에 네 개의 네임스페이스를 가지고 있습니다.
- default: 오브젝트를 위한 기본 네임스페이스
- kube-system: 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
- kube-public: 모든 사용자가 읽기 권한으로 접근할 수 있는 네임스페이스. 이 네임스페이스는 전체 클러스터에서 공개적으로 드러나고 읽을 수 있는 리소스를 위해 예약되어 있습니다.
- kube-node-lease: 각 노드와 연관된 리스 오브젝트를 가지고 있습니다. 노드 리스는 kubelet이 하트비트를 보내서 컨트롤 플레인이 노드의 장애를 탐지할 수 있게 합니다.
파드
파드는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이며 하나 이상의 컨테이너를 실행할 수 있는 그룹입니다. 1개의 컨테이너로 1개의 파드를 구성할 수도 있고 2개 이상의 컨테이너로 1개의 파드를 구성할 수 있습니다.
또한 파드에는 노드 IP와 별개로 고유한 IP가 할당됩니다. 각 컨테이너는 서로 다른 포트로 연결하여 통신할 수 있습니다.
https://www.geeksforgeeks.org/kubernetes-pods/ 궁금증
dev라는 네임스페이스에 A 노드의 파드와 B 노드의 파드가 속할 수 있는지?
네임스페이스는 클러스터 내에서 리소스를 논리적으로 분리하는 공간입니다. 마치 빌딩 안에 여러 개의 사무실이 있는 것과 같이, 하나의 클러스터 안에 여러 개의 네임스페이스를 만들어 각각 다른 팀이나 프로젝트에서 독립적으로 리소스를 관리할 수 있도록 합니다. 노드는 실제로 컨테이너를 실행하는 물리적인 서버나 가상 머신입니다. 어떤 네임스페이스의 Pod라도 자원이 허용하는 한 어떤 노드에서든 실행될 수 있습니다. 따라서 dev 네임스페이스에 A 노드의 Pod와 B 노드의 Pod가 함께 존재할 수 있습니다.
노드는 클러스터의 리소스를 관리하고 파드에게 할당하는 역할이고 네임스페이스도 리소스를 관리 및 할당할 수 있는데 어떤 차이점인지?
노드의 리소스 관리는 다음과 같습니다.
- 물리적 리소스 관리: 노드는 실제 서버 또는 가상 머신으로 CPU, 메모리, 디스크 등의 물리적인 리소스를 직접 관리
- 파드에게 리소스 할당: 노드는 자신이 관리하는 물리적 리소스를 파드에게 할당하여 파드가 실행될 수 있도록 함
- 리소스 쿼터: 노드는 각 파드에게 할당할 수 있는 최대 리소스(리소스 쿼터)를 설정하여 과도한 리소스 사용을 방지
네임스페이스의 리소스 관리는 다음과 같습니다.
- 논리적 리소스 분리: 네임스페이스는 클러스터 내에서 리소스를 논리적으로 분리하여 관리
- 리소스 쿼터: 네임스페이스에 속한 모든 파드가 사용할 수 있는 총 리소스를 제한하는 리소스 쿼터를 설정할 수 있음
- 리소스 할당: 네임스페이스는 직접적으로 리소스를 할당하는 것이 아니라, 네임스페이스에 속한 파드들이 클러스터의 전체 리소스 풀에서 자신에게 할당된 리소스를 사용하도록 제한
즉, 노드는 물리적인 자원을 직접 관리하고 할당하는 역할을 하며 네임스페이스는 논리적인 공간을 제공하고 해당 공간 내에서 리소스를 제한하는 역할을 합니다. 노드는 클러스터의 기본 단위로 실제로 워크로드를 실행하는 역할을 하며 네임스페이스는 클러스터 내에서 리소스를 효율적으로 관리하고 서로 다른 팀이나 프로젝트 간의 리소스 격리를 제공하므로 둘 다 필요합니다.
노드의 CPU 할당과 네임스페이스의 CPU 제한이 충돌할 때는 어떻게 되는지?
만약 노드에서 CPU 10을 파드에게 할당했는데 해당 파드의 네임스페이스에서는 cpu를 9까지만 제한한다고 하면 네임스페이스의 제한이 우선 적용됩니다. 쿠버네티스 스케줄러는 이러한 제한을 고려하여 파드를 스케줄링하고 파드가 사용할 수 있는 실제 CPU를 결정합니다.
네임스페이스 제한이 우선 적용되는 이유는 첫 번째로 리소스 격리 때문입니다. 네임스페이스는 각 팀이나 프로젝트가 독립적으로 리소스를 관리할 수 있도록 하는 중요한 기능입니다. 네임스페이스의 제한을 통해 각 팀이 할당받은 리소스를 초과하여 사용하는 것을 방지할 수 있습니다. 두 번째로는 클러스터 안정성 때문 입니다. 네임스페이스의 제한은 클러스터 전체의 안정성을 유지하는 데 중요한 역할을 합니다. 특정 네임스페이스에서 과도한 리소스 사용으로 인해 다른 네임스페이스의 성능이 저하되는 것을 방지할 수 있습니다.