1. ReplicaSet 소개
- replication controller의 문제점 및 기능을 개선을 위해 추가되었다.
- replication controller가 제공하는 기능과 거의 비슷하다.
- 기본적으로 요구하는 복제본 개수만큼 pod를 복제하고 모니터링하며 관리한다.
2. ReplicaSet과 replication controller의 비교
- pod의 다중 레이블 지원
- 파드 들은 레이블이 여러 개 있을 수 있다.ex) app: web, env: dev
- 레이블이 몇개든 상관없다.
- 레플리케이션 컨트롤러는 레이블을 하나밖에 모른다.
- pod에 설정된 레이블의 키만 선택 가능
- env라는 레이블의 키만 가지고 있어도 된다.=> 특정 레이블의 키만 가지고 있어도 된다.
- 레이블은 생성한 직후에는 같지만 나중에 추가하거나 수정할 수 있는데 그래도 인식 가능하다.
3. ReplicaSet 생성
- 레플리카셋은 apps API 그룹에 속하며 v1 버전을 사용한다.
- 레플리카셋 API 그룹과 버전 정보 확인
kubectl api-resources
kubectl api-versions
- 레플리케이션 컨트롤러에서 생성한 mynapp-rc.yaml 파일과 똑같은 기능을 하는 레플리카셋 생성
# mynapp-rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: mynapp-rs
spec:
replicas: 3
selector:
matchLabels:
app: mynapp-rs
template:
metadata:
labels:
app: mynapp-rs
spec:
containers:
- name: mynapp
image: httpd
ports:
- containerPort: 80
- 레플리케이션 컨트롤러에서는 레이블 셀렉터 항목에 레이블을 직접 지정했지만, 레플리카셋은 matchLabels 및 matchExpressions 필드로 레이블을 선택한다.
- matchLabels는 특정 레이블의 키=값을 매칭하게 된다.
- 레플리카셋 생성
kubectl create -f mynapp-rs.yaml
4. ReplicaSet 확인
- 레플리카셋 상태 및 목록 확인
- pod 목록 확인
5. ReplicaSet의 Label selector 사용
1) matchLabels 레이블 셀렉터
...
spec:
selector:
matchLabels:
key: value
...
- matchLabels로 레이블 셀렉터를 사용하는 경우는 레플리케이션 컨트롤러와 똑같이 동작한다.
2) matchExpressions 레이블 셀렉터
...
spec:
selector:
matchExpressions:
- key: <string>
operator: < In | NotIn | Exists | DoesNotExists >
values:
- <string>
...
- matchExpressions 필드는 레플리카셋의 기능.
- key : 선택할 레이블의 키 이름 지정
- values : 레이블의 값 지정
- operator : 키, 값의 연산을 담당하는 부분
- In : 레이블의 키와 값이 지정된 값으로 일치해야 한다.
- NotIn : 레이블의 키와 값이 지정된 값과 일치하지 않아야 한다.
- Exists
- 레이블의 키가 포함되어야 한다.
- 레이블의 키 값만 매칭 ( value 항목 설정 X )
- DoesNotExist
- 레이블의 키가 포함되지 않아야 한다.
- 레이블의 키 값만 매칭 ( value 항목 설정 X )
6. matchExpressions를 사용한 ReplicaSet 생성
# mynapp-rs-exp.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: mynapp-rs-exp
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- mynapp-rs-exp
- key: env
operator: Exists
template:
metadata:
labels:
app: mynapp-rs-exp
env: dev
spec:
containers:
- name: mynapp
image: c1t1d0s7/myweb
ports:
- containerPort: 8080
7. ReplicaSet 확인
- -o wide 옵션 : 조금 더 자세한 정보를 확인할 수 있다.
- 컨트롤러의 SELECTOR(레이블 셀렉터) 필드를 보기 위해 옵션 사용.
- 레플리카셋에 의해 생성된 파드의 목록 확인
- ReplicaSet을 정리하면 ReplicationController와 기능이 같지만, 다중 레이블 셀렉터 및 레이블 키 만 선택할 수 있는 기능이 추가되었다.
8. ReplicaSet 삭제
kubectl delete rs mynapp-rs-exp
9. 간단한 실습
※ 후에 만들 replicaset과 설정이 부합하는 pod를 두개 먼저 만들고 그 다음 replicaset을 생성한 후 replicaset이 먼저만든 두개의 pod를 인식하고 포함시킬 것인가를 확인!
- pod
- app: web
- app: apache
- replicaset
replica: 3
selector:
matchExpressions:
- key: app
operator: Exists
pod의 정의
metadata:
labels:
app: nginx
1) pod 생성
- app: web
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod-1
labels:
app: web
spec:
containers:
- image: c1t1d0s7/myweb
name: mynapp
ports:
- containerPort: 8080
protocol: TCP
- app: apache
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod-2
labels:
app: apache
spec:
containers:
- image: c1t1d0s7/myweb
name: mynapp
ports:
- containerPort: 8080
protocol: TCP
- 확인
2) replicaset 생성
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: mynapp-rs-test
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: Exists
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: mynapp
image: c1t1d0s7/myweb
ports:
- containerPort: 8080
protocol: TCP
- 확인
※ 결론 : rs는 먼저 생성한 두개의 pod를 인식한다. replica = 3이므로 미리 생성되어있던 pod 두개 이외에 하나의 pod가 더 생 성된다.
'Containers > Kubernetes' 카테고리의 다른 글
5.1. Cluster 내부 서비스 (0) | 2020.08.03 |
---|---|
4.4. DaemonSet (0) | 2020.07.29 |
4.2. Replication Controller (0) | 2020.07.24 |
4.1. Liveness Probe (0) | 2020.07.24 |
3.4. namespace (0) | 2020.07.24 |
댓글