쿠버네티스 안내서를 보고 작성한 포스팅입니다.
Pod을 단독으로 만들면 Pod에 어떤 문제(서버가 죽어서 Pod이 사라졌다던가)가 생겼을 때 자동으로 복구되지 않는다. 이러한 Pod을 정해진 수만큼 복제하고 관리하는 것이 ReplicaSet이다.
이전 실습에서 pod와 minikube를 모두 삭제했기 때문에 실습환경을 다시 시작한다.
<python />
# 1. 도커실행
# 2. 디렉토리 이동
cd Desktop/kube
# 3. 미니큐브 실행
minikube start
이전에는 pod만 만들었다면 이번에는 replica set를 만들어보려고 한다.
컨테이너 하나 또는 두개 이상 포함하던게 pod이라면 이런 pod를 하나 또는 여러개 관리하는게 replica set이다.
replica set은 spec: 부분에 replica: 라는 명령어로 원하는 pod의 개수를 설정할 수 있게 한다.
<python />
vi echo-rs.yml
# echo-rs.yml 파일 편집
apiVersion: apps/v1
kind:: ReplicaSet # ReplicaSet 생성
metadata:
name: echo-rs # ReplicaSet 이름
spec:
replicas: 1 # 원하는 Pod 개수
selector:
matchLabels:
app: echo
tier: app
template: # Pod 관련 정보
metadata:
labels:
app: echo
tier: app
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
# yml파일 실행으로 ReplicaSet 생성
kubectl apply -f echo-rs.yml
# 리소스 확인 (Pod, ReplicaSet 동시에 생성됨을 확인)
kubectl get po,rs

생성코드 단계에서 따로 kind: Pod를 해주지 않아도 replica: 라는 코드 덕분에 ReplicaSet가 만들어지면서 Pod도 같이 만들어졌다는 것을 확인할 수 있다. ReplicaSet을 만들면서 template: 아래쪽으로 Pod에 대한 기본정보를 입력했기 때문에 Pod에 변화가 생기면 ReplicaSet이 가지고 있는 조건에 맞는 Pod를 다시 생성하기도 한다.
<python />
# Pod labels 확인
kubectl get --show-labels
# Pod Label 제거
kubectl label pod/echo-rs-vgxfn app-
# Pod labels 재확인
kubectl get --show-labels
처음에 Pod는 만들어진 대로 label로 app과 tier를 가지고 있는데 그 중에 app을 삭제해봤다.
이 경우가 Pod가 손상되거나 없어지는 경우라고 볼 수 있는데 이런 때를 대비하여 ReplicaSet에서는 자동으로 기준에 맞는 Pod를 재생성한다.

지금 Pod의 상태는 ReplicaSet의 조건에 만족하는 Pod 하나, 조건에 만족하지 못하는 Pod 하나로 종 2개의 Pod가 ReplicaSet에 남아있다. 그런데 조건을 만족하지 못하는 Pod에 다시 app label을 추가하여 조건을 만족시키게 되면 replica:1로 설정했기 때문에 두개의 Pod 중 1개만 남기고 나머지 Pod는 자동으로 제거된다.
<python />
# app label 생성
kubectl label pod/echo-rs-vgxfn app=echo
# Pod label 확인
kubectl get pod --show-labels
replica: 에 원하는 Pod 개수를 적으면 자동으로 Pod가 생성된다.
그런데 label을 이용하여 Pod를 체크하기 때문에 label이 겹치지 않게 신경써서 정의해야 한다.
하지만 ReplicaSet이 단독으로 사용되는 경우는 거의 없고 다음에 포스팅 할 Deployment를 통해 ReplicaSet과 Pod를 다루게 된다.
1. 실습
다음 조건을 만족하는 ReplicaSet을 만들어보세요
ReplicaSet name : nginx
ReplicaSet selector : app:ngnix
replica: 3
Container name: nginx
Container image: nginx:latest
<python />
vi nginx-rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
kubectl apply -f nginx-rs.yml
kubectl get po,rs
2. 마무리
모든 실습을 종료할 때는 만들어준 Pod 및 ReplicaSet를 삭제하고 minikube를 stop 및 delete를 해준다.
메모리 공간 확보를 위해서다. 하지만 minikube 세팅이 완벽하고 앞으로 계속 사용 할 예정이라면 따로 미니큐브를 종료하지 않아도 된다.
오히려 minikube delete를 하는 경우에는 세팅을 처음부터 다시 해야해서 실무에서는 delete을 안하는게 좋다.
<python />
# yml 파일을 통해 만들었던 Pod, ReplicaSet 제거
kubectl delete -f echo-rs.yml
kubectl delete -f nginx-rs.yml
# 미니큐브 종료
minikube stop
minikube delete
'MLOps' 카테고리의 다른 글
11. 쿠버네티스 미니큐브로 간단한 실습 - Service (0) | 2022.03.04 |
---|---|
10. 쿠버네티스 미니큐브로 간단한 실습 - Deployment (MacOS) (0) | 2022.01.21 |
8. 쿠버네티스 미니큐브로 간단한 실습 - Pod (MacOS) (0) | 2022.01.17 |
7. 쿠버네티스 미니큐브로 간단한 실습 (MacOS) (0) | 2022.01.14 |
6. 쿠버네티스 실습 환경 구축 (minikube, MacOS) (0) | 2022.01.12 |