바로 직전 포스팅에서 Kubernetes 클러스터 구축을 마쳤으니 Pod에 대한 실습을 하려한다. 실습 하기전에 아직 Pod에 대해 모자라기때문에 Pod에 대한 공부를 하면서 포스팅 해보았다 !!
A. Kubernetes 클러스터 내부에서 Pod에 할당되는 IP 주소는 기본적으로 클러스터 내부 네트워크에서만 접근이 가능하다. 이는 Kubernetes가 클러스터 내에서 각 Pod를 관리하고 통신할 수 있게 하기 위해 제공하는 가상 네트워크이다.
좀 더 자세히 설명하면, Kubernetes는 각 Pod에 고유한 IP 주소를 할당하는데 이 주소는 클러스터 내부에서만 접근 가능하다. 같은 클러스터에 속한 다른 Pod나 서비스는 각 Pod에 할당된 고유한 IP 주소를 통해 통신한다!
그리고 Pod의 IP 주소는 외부에 노출되지 않는다. 즉, 클러스터 외부에서는 Pod로 접근할 수 없다는 것이다!
A. 맞다!! 만약 파드에 문제가 생기면 시스템이 이를 감지해서 파드를 삭제하고 다시 재생성하게 된다. 그때 IP 주소는 변경된다. 즉, 파드의 고유한 IP는 휘발성을 갖고 있다.
A. 라벨은 Kubernetes 객체(파드, 서비스 등)에 붙이는 키-값 쌍의 메타데이터이다. 이를 통해 리소스를 그룹화하거나 식별할 수 있다. 또, 라벨을 사용하면 Kubernetes는 특정 조건에 맞는 리소스를 선택하거나 관리할 수 있으며, Service와 같은 리소스가 라벨을 사용해 여러 파드를 논리적으로 묶어 트래픽을 라우팅하는 데 사용된다!
이렇게 말하니 잘 안 들어온다. 예시를 들어보겠다!
식별할 수 있다 → app=web 또는 env=production 같은 라벨을 붙여서 해당 리소스가 어떤 역할을 하는지 설명할 수 있다!
그룹화하여 특정 작업을 수행할 수 있다 → 동일한 app=web 라벨을 가진 파드를 하나의 그룹으로 묶고, 이를 대상으로 관리 작업을 수행한다.
여러 파드를 논리적으로 묶어 트래픽을 라우팅한다 → app=web 라벨을 가진 모든 파드로 트래픽을 전달할 수 있다.
YAML 파일로 라벨을 적용하는 예시를 들어보겠다!
# pod-with-label.yml
apiVersion: v1 # Kubernetes API 버전
kind: Pod # 리소스 타입: Pod
metadata:
name: labeled-pod # 파드의 이름
labels:
app: web # 라벨 정의, 이 라벨을 통해 파드를 그룹화하거나 선택할 수 있음
spec:
containers:
- name: nginx-container # 컨테이너의 이름
image: nginx:latest # 컨테이너에서 사용할 이미지 (Nginx 최신 버전)
ports:
- containerPort: 80 # 컨테이너가 외부에 노출할 포트 (Nginx 기본 포트 80)
A. 스케줄러라는 Kubernetes의 핵심 컴포넌트가 파드를 적절한 노드에 배치하는 과정이다. 클러스터에는 여러 개의 노드가 있고, 파드는 이 노드들 중 하나에서 실행된다. 스케줄러는 파드를 실행할 노드를 선택하며, 여러 조건과 제약 사항을 고려해 파드를 가장 적합한 노드에 배치한다!
쉽게 설명하면, 어떤 노드는 CPU가 많이 사용 중이고, 다른 노드는 메모리가 부족하다든지 여러 조건의 다양한 노드가 존재한다. 만약 파드를 실행해야 할 상황이 오면 Kubernetes 스케줄러는 실행해야 할 파드에 가장 적합한 노드를 찾고 그 노드 위에 파드를 실행시켜주는 것이다!
YAML 파일을 통한 노드 스케줄 예시를 들어보겠다!
# pod-with-nodeselector.yml
apiVersion: v1 # Kubernetes API 버전
kind: Pod # 리소스 타입: Pod
metadata:
name: scheduled-pod # 파드의 이름
spec:
containers:
- name: nginx-container # 컨테이너의 이름
image: nginx:latest # 컨테이너에서 사용할 이미지 (Nginx 최신 버전)
ports:
- containerPort: 80 # 컨테이너가 외부에 노출할 포트 (Nginx 기본 포트 80)
nodeSelector:
disktype: ssd # 'disktype=ssd' 라벨을 가진 노드에서만 이 파드를 실행함
# 노드에 'disktype: ssd'라는 라벨이 있어야 이 파드가 스케줄링됨