replicaset은 실행되는 pod의 개수를 보장합니다.
( pod 설명 -> https://fierycoding.tistory.com/96 )
즉 일정 개수의 pod를 유지하기 위한 컨트롤러입니다.
replicaset과 pod는 "ownerReferences" 라는 필드를 통해 느슨한 결합 관계를 가집니다.
이 느슨한 결합으로 인해 replicaset을 지워도 해당 replicaset에 연결되어 있던 pod들은 유지됩니다.
( 일종의.. 오너 컨트롤러만 제거된 것이기 때문에 pod는 그 어느 컨트롤러에도 종속되지 않은 상태로 변경 )
replicaset과 pod를 연결해주려면 라벨을 서로 일치시켜주면 됩니다.
yaml 파일 예시
파일명 : nginx-replicaset-test.yaml
apiVersion: apps/v1
kind: ReplicaSet # 배포 유형 : Replicaset
metadata:
name: web
labels:
env: dev
role: web
spec:
replicas: 4 # 항상 4개의 pod를 가용하도록 한다
# 아래 selector.matchLabels는 replicaset이 가질 라벨을 의미한다
selector:
matchLabels:
role: web
# 아래 template은 pod에 대한 정보이다
template:
metadata:
# 아래 labels는 pod가 가질 라벨을 의미한다
labels:
role: web
spec:
containers:
- name: testnginx
image: nginx
kubectl apply -f ./nginx-replicaset-test.yaml
배포해보면 의도한대로 네 개의 pod가 생성됩니다.
그 중 아무 pod나 골라 ownerReferences를 확인해봅니다.
kind: Replicaset, name: web 을 통해 우리가 의도한 컨트롤러와 매칭되어 있는 것을 확인할 수 있습니다.
해당 pod의 정보를 수정해 replicaset에서 떼어 내도록 하겠습니다.
kubectl edit pods web-4z7wg
해당 pod의 labels 값을 임의로 변경해줍니다.
role: web -> role: isolated
다시 pod 리스트를 확인하면 위와 같이 5개의 pod를 확인할 수 있습니다.
왜냐하면 좀 전에 배포한 replicaset 컨트롤러는 4개의 pod가 보장되어야 하는데,
하나의 pod가 metadata.labels 값 변경으로 인해 ownerReferences를 잃었으므로 해당 replicaset은 하나의 pod이 더 필요해진 셈입니다. 따라서 자동으로 pod이 하나 더 생성되었습니다.
CPU 사용량에 따라 최대로 생성할 수 있는 pod 개수를 지정해줍니다.
최소 pod 개수는 처음 설정한 replicas 값을 따릅니다. (이 포스트의 예시를 따르자면 4개가 minimum이 됩니다)
kubectl autoscale rs web --max=8
쿠버네티스는 Replicaset 기능이 필요한 경우, Replicaset을 단독으로 사용하기보다는 Deployment(앞으로 다룰 내용)를 대용하길 권장합니다. (Deployment가 Replicaset을 소유, 관리합니다)
쿠버네티스 기초실습 (GCP 기반) - 2 - Pod (0) | 2022.10.01 |
---|---|
쿠버네티스 기초실습 (GCP 기반) - 1 (1) | 2022.08.24 |
pub/sub 이해하기 (JS 예시) (0) | 2021.10.25 |
경력 0개월차 개발자의 고래 해체 작업 썰 - 3 [ECS task-definitions] (0) | 2021.10.04 |
경력 0개월차 개발자의 고래 해체 작업 썰 - 2 [Postgre 데이터 Dump] (0) | 2021.09.08 |
댓글 영역