Kubernetes 쿠버네티스 - ReplicaSet

salgu·2023년 2월 19일
0

kubernetes

목록 보기
6/16
post-thumbnail

ReplicaSet이란


  • ReplicaSet은 Pod 복제본을 생성하고 관리합니다.
  • ReplicaSet 오브젝트를 정의하고 원하는 Pod의 갯수를 replicas 속성으로 선언합니다.
  • 클러스터 관리자 대신 Pod 수가 부족하거나 넘치지 않게 Pod 수를 조정합니다.
    • 여러 노드에 걸쳐 배포된 Pod Up/Down 상태를 감시해 replicas 수만큼 실행을 보장
  • spec.replicas를 선언하지 않으면 기본값은 1입니다.
  • 배포한 ReplicaSet의 Pod Template를 변경해도 기존 Pod에는 영향을 주지 않습니다.
    • 기존 Pod을 삭제하지 않음, 새로 생성되는 Pod에만 변경사항 적용됨



작성법


ReplicaSet이 관리하는 Pod 생성

apiVersion: apps/v1	# Kubernetes API 버전

kind: ReplicaSet	# 오브젝트 타입

metadata:				# 오브젝트를 유일하게 식별하기 위한 정보
  name: blue-app-rs		# 오브젝트 이름
  labels:				# 오브젝트 집합을 구할 때 사용할 이름표
    app: blue-app
    
spec:			# 사용자가 원하는 Pod의 상태
  selector:		# ReplicaSetdl 관리해야하는 Pod를 선택하기 위한 label query
    matchLabels:
      app: blue-app	# Pod Label query
  replicas:	3	# 실행하고자 하는 Pod 복제본 갯수 선언
  template: 	# Pod 실행 정보- Pod Template와 동일



명령어


ReplicaSet 생성 결과 조회

kubectl get rs {ReplicaSet 명} -o wide

ReplicaSet의 상세 정보 확인

kubectl describe rs {ReplicaSet 명}

ReplicaSet의 Pod 생성 이후 과정 확인

kubectl get events --sort-by=.metadata.creationTimestamp

ReplicaSet에 port forwading

kubectl port-forward rs/{ReplicaSet 명} {port}:{port}

ReplicaSet에 포트포워딩하여 요청을 보내면 첫번째로 생성된 파드에만 트래픽이 전달됩니다.
로드밸런싱 X

ReplicaSet 삭제

kubectl delete rs {ReplicaSet 명}

해당 명령어로 삭제하시면 해당 Pod까지 같이 삭제가 됩니다.

kubectl delete rs {ReplicaSet 명} --cascade=orphan

cascade옵션에 orphan(고아 전략)을 주시고 삭제를 하게 되면 현재 가동중인 Pod는 삭제되지 않고 ReplicaSet만 삭제됩니다.



기존에 생성한 Pod를 ReplicaSet으로 관리하기


단독 Pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: blue-app
  labels:			# labels 지정
    app: blue-app
spec:
  containers:
  - name: blue-app
    image: yoonjeong/blue-app:1.0
    ports:
    - containerPort: 8080

ReplicaSet을 설정하는 것이 아닌 단독으로 Pod를 실행해줍니다.
Labels는 app=blue-app으로 지정해주었습니다.

ReplicaSet 생성

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: blue-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: blue-app
  template:
    metadata:
      labels:
        app: blue-app
    spec:
      containers:
      - name: blue-app
        image: yoonjeong/blue-app:1.0
        ports:
        - containerPort: 8080

이미 단독으로 생성되어있는 Pod를 대상으로 Labels를 지정하여 ReplicaSet을 생성해줍니다.
replicas에서 복제본의 갯수는 3개로 지정해줍니다.

적용

describe 명령어로 rs를 상세정보를 들여다 보면 SuccessfulCreate가 두개가 된것을 확인할 수 있습니다.
기존에 단독으로 Pod 한 개를 이미 생성했고 replicas의 갯수는 3개로 설정되어있기 때문에 두개만 추가로 생성하면 되기 때문입니다.

확인을 해주시면 단독으로 생성되어있던 pod가 세개로 복제가 되어 실행되는것을 확인할 수 있습니다.

주의사항

ReplicaSet의 PodSelector가 기존에 생성되어 있던 Pod의 Label에 의도치않게 적용대상이 될수도 있기 때문에 Pod Selector 설계를 주의하며 해야합니다.

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글