매직코드
article thumbnail

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

 

Pod을 단독으로 만들면 Pod에 어떤 문제(서버가 죽어서 Pod이 사라졌다던가)가 생겼을 때 자동으로 복구되지 않는다. 이러한 Pod을 정해진 수만큼 복제하고 관리하는 것이 ReplicaSet이다.

 

이전 실습에서 pod와 minikube를 모두 삭제했기 때문에 실습환경을 다시 시작한다.

 

 

 

# 1. 도커실행
# 2. 디렉토리 이동
cd Desktop/kube

# 3. 미니큐브 실행
minikube start

 

이전에는 pod만 만들었다면 이번에는 replica set를 만들어보려고 한다.

컨테이너 하나 또는 두개 이상 포함하던게 pod이라면 이런 pod를 하나 또는 여러개 관리하는게 replica set이다.

replica set은 spec: 부분에 replica: 라는 명령어로 원하는 pod의 개수를 설정할 수 있게 한다.

 

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를 다시 생성하기도 한다.

 

# 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는 자동으로 제거된다.

 

 

 

# 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를 다루게 된다.

 


실습

다음 조건을 만족하는 ReplicaSet을 만들어보세요

ReplicaSet name : nginx

ReplicaSet selector : app:ngnix

replica: 3

Container name: nginx

Container image: nginx:latest

 

더보기
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

마무리

모든 실습을 종료할 때는 만들어준 Pod 및 ReplicaSet를 삭제하고 minikube를 stop 및 delete를 해준다.

메모리 공간 확보를 위해서다. 하지만 minikube 세팅이 완벽하고 앞으로 계속 사용 할 예정이라면 따로 미니큐브를 종료하지 않아도 된다.

오히려 minikube delete를 하는 경우에는 세팅을 처음부터 다시 해야해서 실무에서는 delete을 안하는게 좋다.

 

# yml 파일을 통해 만들었던 Pod, ReplicaSet 제거
kubectl delete -f echo-rs.yml
kubectl delete -f nginx-rs.yml

# 미니큐브 종료
minikube stop
minikube delete

 

 

profile

매직코드

@개발법사

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