반응형
Label, Label Selector
Label은 쿠버네티스에서 오브젝트를 식별하고 그룹화하는 키-값 쌍이다. Label Selector는 이러한 label을 사용해 특정 리소스를 선택하는 메커니즘이다. 이를 통해 서비스나 다른 리소스들이 특정 pod를 선택해 트래픽을 전달 할 수 있다.
예
apiVersion: v1 # API 버전.
kind: Pod # 리소스 종류(Pod).
metadata:
name: pod-2 # 파드 이름.
labels: # 파드에 적용할 레이블.
type: web # 'type' 레이블 키에 'web' 값을 설정.
lo: dev # 'lo' 레이블 키에 'dev' 값을 설정.
spec:
containers:
- name: container # 컨테이너의 이름.
image: kubetm/init # 사용할 컨테이너 이미지.
설명: 위 예시에서 pod-2 이름을 가진 파드는 type: web, lo: dev 라는 레이블을 가지며, 이 레이블은 나중에 서비스가 해당 파드을 지정해서 선택할 수 있도록 사용된다.
Sevice와 Label Selector 예
apiVersion: v1 # API 버전.
kind: Service # 리소스 종류(Service).
metadata:
name: svc-1 # 서비스 이름.
spec:
selector: # 서비스가 트래픽을 전달할 파드를 선택하는 기준.
type: web # 'type' 레이블이 'web'인 파드를 선택.
ports:
- port: 8080 # 외부에서 이 서비스로 접근할 때 사용할 포트.
설명: svc-1 서비스는 type: web 레이블을 가진 파드에 트래픽을 전달한다. 이 경우, 가장 위에 있는 예시의 pod-2가 해당 레이블을 가지고 있으므로 서비스가 이 파드에 트래픽을 전달하게 된다.
Label의 여러 사용 사례
- Label은 서비스만을 위한 것이 아니다. Kubernetes에서 레이블은 다양한 목정을 위해 사용되며, 예를 들어 특정 작업(배포, 모니터링, 로그 수집)을 위한 파드를 그룹화하거나, 배포 단계 (개발, 스테이징, 프로덕션)를 표시할 때도 사용된다.
- 레이블 기반 업데이트 및 삭제 : 레이블을 사용하면 특정 레이블을 가진 파드를 한 번에 업데이트하거나 삭제할 수 있다. 예를 들어, "kubectl delete pod -l type=web" 명령어를 통해 특정 레이블을 가진 모든 파드를 삭제할 수 있다.
Node 스케줄링과 자원 관리
NodeSelector는 파드를 특정 노드에서만 실행하도록 할 수 있는 설정이다. 또한, 자원 요청(Requests)과 제한(Limits)을 통해 파드가 사용할 CPI 및 메모리 양을 제어할 수 있다.
NodeSelector를 사용한 Pod 예시
apiVersion: v1 # API 버전.
kind: Pod # 리소스 종류(Pod).
metadata:
name: pod-3 # 파드 이름.
spec:
nodeSelector: # 특정 노드에 파드를 배치하도록 지정.
kubernetes.io/hostname: k8s-node1 # 파드를 'k8s-node1' 노드에서만 실행.
containers:
- name: container # 컨테이너 이름.
image: kubetm/init # 사용할 컨테이너 이미지.
설명 : 이 파드는 k8s-node1 이라는 특정 노드에서만 실행된다. 특정 노드에만 파드를 배포하고 할 때 유용하다.
자원 요청 및 제한 설정 예시
apiVersion: v1 # API 버전.
kind: Pod # 리소스 종류(Pod).
metadata:
name: pod-4 # 파드 이름.
spec:
containers:
- name: container # 컨테이너 이름.
image: kubetm/init # 사용할 컨테이너 이미지.
resources: # 이 컨테이너가 사용할 자원 설정.
requests: # 파드가 요청하는 최소 메모리.
memory: 2Gi # 최소 2Gi 메모리를 요청.
limits: # 파드가 사용할 수 있는 최대 메모리.
memory: 3Gi # 최대 3Gi 메모리까지 사용 가능.
설명: 이 파드는 최소 2Gi 메모리를 요청하며, 최대 3Gi 메모리까지만 사용할 수 있도록 설정됐다. 이 설정은 자원 관리 효율성을 높이는 데 유용하다.
자원 관리
- 자원을 명시적으로 요청하고 제한을 설정하면, Kubernetes 스케줄러는 클러스터의 자원 상태에 따라 파드를 적절한 노드에 배치한다.
- 그러나, 만약 자원 요청이 클러스터에서 지원되지 않으면 파드가 실행되지 않고 "Pending" 상태에 머물게 된다.
- CPU와 메모리 요청과 제한의 의미
- Requests: 파드가 실행되기 위해 필요한 최고한의 자원이다. 스케줄러는 이를 기준으로 파드를 배치한다.
- Limits: 파드가 사용할 수 있는 최대 자원량이다. 파드가 설정된 제한을 초과하지 않도록 제어한다.
- Overcommitment: 노드에서 자원을 효율적으로 사용하기 위해, 실제로 사용할 자원보다 요청값을 낮게 설정하는 경우가 있는데, 이 경우 노드가 자원을 초과할 때 메모리 초과 등의 문제가 발생할 수 있다.
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 - 환경변수 활용(ConfigMap, Secret) (0) | 2024.10.10 |
---|---|
쿠버네티스 - Volume (0) | 2024.10.08 |
쿠버네티스 - Service (1) | 2024.10.04 |
쿠버네티스 - kubectl (기본 명령어) (1) | 2024.10.04 |
쿠버네티스 - Pod, Replication Controller (0) | 2024.10.04 |