Replica Set

이유진·2023년 6월 18일
0

develop

목록 보기
4/4
post-thumbnail

Controller

  • 왜 필요한가?
    • 응용프로그램 앱이 다운된다
    • 사용자들이 앱에 대한 액세스를 잃지 않도록 다른 하나에서 응용프로그램이 실행될 수 있도록 해야한다
    • pod의 다중 인스턴스를 실행하도록 고가용성을 제공한다

Replication Controller vs ReplicaSet -> ReplicaSet 을 권장한다

Replication Controller

  • 오래된 방법

기본 Yaml 파일

apiVersion: v1
kind: ReplicationController
metadata:
	name: myapp-rc
	labels: 
		app: myapp
		type: front-end
spec:
	# POD template

POD template 에 들어가는 내용 - 이전 게시물

# pod-definition.yml
apiVersion: v1 # pod
kind: Pod
metadata:
	name: myapp-pod
	labels:
		app: myapp
		type: front-end
spec: 
	containers # Pod안에 컨테이너가 여러개이므로
		- name: nginx-container # -: 1st 항목
			image: nginx

Yaml 파일 최종본

# rc-definition.yml
apiVersion: v1
kind: ReplicationController
metadata: # Replication Controller
	name: myapp-rc
	labels: 
		app: myapp
		type: front-end
spec: # Replication Controller
	template: # pod template
			metadata: # pod
				name: myapp-pod
				labels:
					app: myapp
					type: front-end
			spec: # pod
				containers # Pod안에 컨테이너가 여러개이므로
					- name: nginx-container # -: 1st 항목
						image: nginx
	replicas: 3 # Replication Controller에 필요한 복제본 수
	

명령어

$kubectl create -f rc-definition.yml
$kubectl get replicationcontroller # Replication Controller 리스트
$kubectl get pods # Replication Controller로 생성된 Pod를 보고싶을 때. 
  • replicas: 3 으로 설정했으므로 kubectl get pods 명령어 실행 시 3개가 나옴
  • pod명이 모두 myapp-rc로 시작됨

Replica Set

  • 권장되는 방법
  • replica pod집합의 실행을 항상 안정적으로 유지한다
  • 명시된 동일 파드 갯수에 대한 가용성을 보증하는데 사용한다

기본 Yaml 파일

# replicaset-definition.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata: 
	name: myapp-replicaset
	labels:
		app: myapp
		type: front-end
spec:
	# POD tempalte

Yaml 파일 최종본

# replicaset-definition.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata: 
	name: myapp-replicaset
	labels:
		app: myapp
		type: front-end
spec:
	template: # pod template
			metadata: # pod
				name: myapp-pod
				labels:
					app: myapp
					type: front-end
			spec: # pod
				containers # Pod안에 컨테이너가 여러개이므로
					- name: nginx-container # -: 1st 항목
						image: nginx
	replicas: 3 # 유지해야 하는 pod 개수
	selector:
		matchLabels:
			type: front-end

Selector

  • Replication Controller와 Replica Set의 큰 차이점
  • 획득 가능한 Pod를 식별하는 방법이 명시
  • spec.template.metadata.labels.app 에 적은 내용들을 기본값으로 사용
  • selector 내용과 pod의 정보가 일치해야함

    Labels.tier로 획득가능한 pod를 식별하므로, yaml파일안 pod의 labels.tier정보와 맞춰줘야함
    현재 파일을 가지고 create 하면 오류발생

명령어

$kubectl create -f replicaset-definition.yml
$kubectl get replicaset # 생성된 replica를 확인
$kubectl get pods
  • replica set은 항상 replica set 갯수 만큼 유지되는지 확인이 필요하다
  • pod의 label을 확인하여 해당 label이 붙은 pod를 모니터링한다

💡 replicaset을 3개 → 6개로 update하려면? (방법 3가지)

  1. replicaset-definition.yml의 replica: 3 → 6으로 수정 후 $kubectl replace -f replicaset-definition.yml 명령어 실행

    기존에 생성된 Pod들이 삭제되고 새로운 Pod들이 생성

  2. kubectl scale --replicas=6 -f replicaset-definition.yml 명령어 실행

    기존의 3개 복제본을 유지하고 새로운 3개 복제본을 생성
    kubectl apply -f replicaset-definition.yml 명령어 실행시 다시 3개의 복제본으로 돌아감

  3. kubectl scale --replicas=6 replicaset mypp-replicaset 명령어 실행

    $kubectl scale —replicas=6 [type] [name]

2번과 3번 방법은 어떤게 다른가요? (Answer by chatgpt)
kubectl scale --replicas=6 -f replicaset-definition.yml은 파일 내의 ReplicaSet 정의를 기반으로 변경하며, kubectl scale --replicas=6 replicaset myapp-replicaset은 ReplicaSet의 이름을 명시적으로 지정하여 변경합니다.

$kubectl create -f replicaset-definition.yml
$kubectl get replicaset
$kubectl delete replicaset myapp-replicaset
$kubectl replace -f replicaset-definition.yml
$kubectl scale -replicas=6 -f replicaset-definition.yml
profile
BackEnd Developer

0개의 댓글