1. Container
쿠버네티스에서는 하나의 독립적인 서비스를 제공할 수 있는 컨테이너들을 모아서 Pod로 관리합니다. 예를 들어 Pod안에는 애플리케이션 서버용 도커 컨테이너와 프록시 서버용 컨테이너 등과 관련된 것들을 모아서 관리할 수 있습니다. 쿠버네티스에서는 이 Pod가 애플리케이션의 디플로이 단위가 되며, 포드 단위로 컨테이너의 작성, 시작, 정지, 삭제 등과 같은 조작을 합니다.
특징으로는 다음과 같은 내용들이 있습니다.
- 동일한 Pod의 컨테이너는 반드시 동일한 노드 상에 동시에 디플로이 된다.
- 컨테이너는 서비스가 연결될 수 있도록 Port를 가지고 있는데, 같은 Pod안에서 Port는 중복될 수 없습니다.
- Pod안의 여러 컨테이너에서 가상 NIC(Private IP)를 공유하는 구성을 취하기 떄문에 컨테이너끼리 localhost를 경유하여 통신할 수 있습니다.
- Pod가 생성될 때 고유 IP가 할당되며, 클러스터 내에서만 접근할 수 있음
Pod 예시(yaml)
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container1
image: kubetm/p8000
ports:
- containerPort: 8000
- name: container2
image: kubetm/p8080
ports:
- containerPort: 8080
- 위의 Pod는 두 개의 컨테이너를 가지며, container1은 8000포트, container2는 8080번 포트가 열려있습니다.
2. Label
라벨을 사용하면 Pod와 같은 쿠버네티스 리소스에 버전명이나 애플리케이션명, 스테이지 환경인지 실제 환경인지와 같은 임의의 라벨을 설정하여, 클러스터 안에서 편하게 관리할 수 있음 쿠버네티스의 리소스에 설정한 라벨을 LabelSelector라는 기능을 사용하여 필터링할 수 있습니다.
라벨은 Key-Value 형으로 설정하며, Key와 Value 둘 다 문자열로 지정합니다. 한 Pod에 여러 개의 Label을 추가할 수 있습니다.
Pod 예시(yaml)
apiVersion: v1
kind: Pod
metadata:
name: pod-2
labels:
type: web
lo: dev
spec:
containers:
- name: container
image: kubetm/init
- labels에서 type: web, lo: dev로 설정되어 있습니다.
서비스 예시(yaml)
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: web
ports:
- port: 8080
- 위와 같이 selector에서 Key-Value값을 입력하면 해당 내용과 매칭되는 Label이 지정된 Pod와 연결되게 됩니다.
3. NodeSchedule
Pod는 결국 다수의 Node 중 하나의 Node에 올라가야하는데 이 때 사용자가 직접 Node를 선택하는 방법과 쿠버네티스가 자동으로 선택하는 방법이 있습니다. 직접 선택하는 경우 nodeSelector를 이용하여 Key-Value 형태로 Node를 지정할 수 있습니다.
직접 노드를 선택하는 경우 다음과 같이 nodeSelector에 Node를 명시합니다.
apiVersion: v1
kind: Pod
metadata:
name: pod-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
쿠버네티스가 판단해서 노드를 지정하는 경우에는 Node의 가용 자원을 보고 스케쥴러가 판단합니다.
예를 들어 Node1에는 1기가, Node2에는 3.7기가의 메모리가 남아있는 경우에 새로 생성할 Pod가 3기가의 메모리를 요구한다면 스케쥴러가 알아서 해당 Pod를 Node2에 스케쥴링합니다.
쿠버네티스 Pod의 특징에 대하여 알아보았습니다.
참고
https://kubetm.github.io/k8s/03-beginner-basic-resource/pod/
http://www.yes24.com/Product/Goods/78875805
'About > Kubernetes' 카테고리의 다른 글
[k8s] 매니페스트 파일 작성 방법 (0) | 2022.01.04 |
---|---|
[k8s] 애플리케이션 설정 정보 관리(ConfigMap/Secrets) (0) | 2022.01.04 |
[k8s] Service - (ClusterIP, NodePort, LoadBalancer) (0) | 2022.01.04 |
[k8s] 쿠버네티스의 서버 구성(마스터와 노드) (1) | 2021.12.30 |
[k8s] 스케쥴링과 서비스 디스커버리 (2) | 2021.12.30 |