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와 동일
kubectl get rs {ReplicaSet 명} -o wide
kubectl describe rs {ReplicaSet 명}
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl port-forward rs/{ReplicaSet 명} {port}:{port}
ReplicaSet에 포트포워딩하여 요청을 보내면 첫번째로 생성된 파드에만 트래픽이 전달됩니다.
로드밸런싱 X
kubectl delete rs {ReplicaSet 명}
해당 명령어로 삭제하시면 해당 Pod까지 같이 삭제가 됩니다.
kubectl delete rs {ReplicaSet 명} --cascade=orphan
cascade옵션에 orphan(고아 전략)을 주시고 삭제를 하게 되면 현재 가동중인 Pod는 삭제되지 않고 ReplicaSet만 삭제됩니다.
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으로 지정해주었습니다.
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 설계를 주의하며 해야합니다.