ReplicaSet 개념
레플리카셋은클러스터 안에서 움직이는 파드의 수를 유지하는 장치
클러스터의 파드의 실행을 항상 안정적으로 유지하는 것을 목표로 명시된 파드 개수에 대한 가용성을 보증하는데 사용된다.
replicaset을 구성하는 yaml파일
# replicaset-nginx.yaml
# [1] 기본 항목
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
# [2] ReplicaSet 스펙
spec:
replicas: 3 # Pod의 수
selector: # Pod 템플릿의 검색 조건
matchLabels:
app: nginx-replicaset
# [3] Pod 템플릿
template:
metadata:
labels:
app: nginx-replicaset
env: prod
# [4] Pod 스펙
spec:
containers:
- image: nginx
name: nginx-replicaset
ports:
- containerPort: 80
기본적으로 yaml파일을 작성하여 원하는 replica의 수를 지정하여 replica set을 구성할 수 있다.
replicaSet사용하기
kubectl apply -f <yaml파일명>
위의 명령어를 작성하여 yaml파일을 적용하고 이가 적용되었는지 본다.
kubectl get pods
만약 pods의 수를 3으로 설정했다면 pods의 수가 3인 것을 알 수 있다. 파드의 이름은 레플리카셋의 이름에 임의의 문자와 숫자가 붙인 형태로 생성되게 된다.
만약 pods가 삭제되게 된다면 다시 새로운 pods가 생성되어 yaml파일에서 지정한 replicaSet의 수를 유지할려고 한다.
replicaSet의 정보확인하기
kubectl get replicaset, pods
위의 명령어를 치게 되면 이와 관련된 정보가 나온다.
- DESIRED : replicaSet에 지정한 pods의 갯수
- CURRENT : replicaSet에 지정한 클러스터에 동작하는 pods의 갯수
replicaSet 삭제하기
kubectl delete replicaset <replicaset name>
replicaSet을 삭제하면 pods와 함께 삭제됨으로 이를 유의한다. 그래서 pods를 삭제하기 싫다면 cascade옵션을 사용하여 replicaSet만 삭제한다.
kubectl delete replicaset <replicaset name> --cascade=false
Deployment
: ReplicaSet을 관리하는 controller 이다.
ReplicaSet에서는 지원하지 않았던 업데이트에 관한 설정까지도 지원하여 더욱 안정적으로 container들의 운영이 가능하다. 또한, 배포기능까지 세분화한 것으로 pods와 replicaSet에 대한 버전 관리 기능을 추가한 것이다.
Deployment 양식
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.2
deployment의 양식을 통해 생성된다. replicaSet과 차이가 존재하지 않는다.
Deployment 생성
kubectl apply -f <yaml파일명>
- READY : 3/3 은 우리가 요청한 3개의 replicas중 3개가 정상 동작중임을 나타낸다.
- UP-TO-DATE : 선언된 replicas의 갯수를 위해 update 된 replicas의 갯수를 나타낸다.
- AVAILABE : 사용 가능한 replicas의 갯수가 표시된다.
Deployment update
Deployment가 ReplicaSet을 대체하여 사용되는 가장 큰 이유인 Update 방식이다.
1) RollingUpdate
이 방식은 기존 Pod를 일부 제거하고 새롭게 Update된 Pod를 일부 배포하는 과정을 반복하는 방식으로 점진적인 배포과정 때문에 완료까지 시간이 더 걸리겠지만 일부의 Pod는 계속 running 상태로 유지가 되기 때문에 Downtime이 발생하지 않는다.
2) Recreate
Deployment가 관리중인 모든 Pod를 없앤후에 새로운 Pod를 배포하는 방식이다. 불가피하게 Application이 모두 중단되는 downtime이 발생하게 된다.
롤백
개발을 하다보면 새로운 Application을 배포했다가 문제가 생겨 롤백할 수 있다.
다시 이전 버전으로 롤백 하기 위해서는 아래와 같은 방법을 사용하면 된다.
$ kubectl rollout undo deployment/nginx
만약 특정 REVISION으로 롤백을 하고싶다면 --to-revision 옵션을 사용하여 롤백할 버전을 명시해주면 된다.
$ kubectl rollout undo deployment/nginx --to-revision=1
👇🏻 참고사이트
https://kimjingo.tistory.com/132
https://velog.io/@jee-9/Kubernetes-Replica-Set레플리카셋에-대하여