magicode
article thumbnail

쿠버네티스 안내서를 보고 작성한 포스팅입니다.

 

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

 

 

profile

magicode

@AI magic

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!