쿠버네티스 Kubernetes 레플리카셋 (ReplicaSet)
![](https://blog.kakaocdn.net/dn/bKdR4e/btq86f3xWh2/nxLw661DfxUASW3B2eWceK/img.png)
![](https://blog.kakaocdn.net/dn/eQgrUj/btq85Cq2PZx/g7WkzJNA7Av8vzZgipAfk1/img.png)
![](https://blog.kakaocdn.net/dn/zVUJ0/btq86fJn2zR/Hy7yd7bKVszvM6kedW3ba0/img.png)
![](https://blog.kakaocdn.net/dn/bbx93z/btq88zmQLNJ/mDCnmiNGLYZGbiKGVOhpKK/img.png)
![](https://blog.kakaocdn.net/dn/bzsELe/btq9af8LokU/FK7A1DLIew37jmfuM1VNzk/img.png)
![](https://blog.kakaocdn.net/dn/cExN6b/btq88MztaP3/HlhTYoJwNiqNeL3JPf0Oy1/img.png)
![](https://blog.kakaocdn.net/dn/mzdqG/btq9aGyh1Rp/KlTZbAeqKGJDcu6wKvf7I1/img.png)
![](https://blog.kakaocdn.net/dn/6EL75/btq9aFMUWnh/AeXqYpkBgU7JkBkNqWauk1/img.png)
![](https://blog.kakaocdn.net/dn/CkDyU/btq868XBrDi/3xVFYj7CxHVOP80woZgfr1/img.png)
In ( a : b ) => ( a : b )
NotIn ( a : b ) =>( a : !b )
Exists ( a : b ) => ( a : all )
DoseNotExist ( a : b ) => ( !a : all )
![](https://blog.kakaocdn.net/dn/qYvVD/btq9aFF83Xr/qvQTRS1CzI3KtudCOtSdt0/img.png)
![](https://blog.kakaocdn.net/dn/3qgZC/btq89uL7hqI/3IKnksBCUgsK8qsADqXTE0/img.png)
# 레플리카셋과 레플리케이션 컨트롤러 비교
셀렉터만 다르다
레플리케이션 컨트롤러 : 일치성기준 레이블 셀렉터 지원
레플리카셋 : 일치성 및 집합성 기준 레이블 셀렉터 지원
# 일치성 기준 레이블 셀렉터
키(key)와 값(value) 모두 일치
# 집합성 기준 레이블 셀렉터
키=값 모두 일치하더나 키(key)만 일치하는것도 지원
# YAML 파일 작성
# 레플리카셋은 apps/v1 API버전 사용
vagrant@k-control:~$ cat ldh-rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ldh-rs
spec:
replicas: 3
selector:
matchLabels:
app: dh-rs
template:
metadata:
labels:
app: dh-rs
spec:
containers:
- image: ghcr.io/c1t1d0s7/go-myweb
name: ldh
ports:
- containerPort: 8080
protocol: TCP
# 레플리카셋 생성
vagrant@k-control:~$ kubectl create -f ldh-rs.yml
# 레플리카셋 확인
vagrant@k-control:~$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
ldh-rs 3 3 3 21s
# 파드 목록
vagrant@k-control:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
ldh-rs-nzqmd 1/1 Running 0 31s
ldh-rs-qb8zj 1/1 Running 0 31s
ldh-rs-vpsfw 1/1 Running 0 31s
-> matchLabels(일치성 기준) 레이블 셀렉터는 레플리케이션 컨트롤러와 똑같이 동작
# matchExpressions를 사용해 레플리카셋 생성
# 야믈파일 작성
vagrant@k-control:~$ cat ldh-rs-exp.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ldh-rs-exp
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- dh-exp
- key: env
operator: Exists
template:
metadata:
labels:
app: dh-exp
env: dev
spec:
containers:
- image: ghcr.io/c1t1d0s7/go-myweb
name: ldh
ports:
- containerPort: 8080
protocol: TCP
#레플리카셋 생성
vagrant@k-control:~$ kubectl create -f ldh-rs-exp.yml
# 레플리카셋 확인
vagrant@k-control:~$ kubectl get replicasets.apps -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
ldh-rs-exp 3 3 3 20s ldh ghcr.io/c1t1d0s7/go-myweb app in (dh-exp),env
# 파드의 목록
vagrant@k-control:~$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
ldh-rs-exp-pbl26 1/1 Running 0 2m23s app=dh-exp,env=dev
ldh-rs-exp-r5jpm 1/1 Running 0 2m23s app=dh-exp,env=dev
ldh-rs-exp-zklnv 1/1 Running 0 2m23s app=dh-exp,env=dev
# 레플리카셋 삭제
vagrant@k-control:~$ kubectl delete replicasets.apps ldh-rs-exp
In
NotIn
Exist
DoseNotExist