ReplicaSet, Selector 실습
- ReplicationController는 deprecated니 ReplicaSet으로 실습
- ReplicationController는 ReplicaSet으로 업데이트 하는 방법을 위해 잠시 사용할 예정
- 템플릿과 Replicas를 중심으로 실습
ReplicaSet
Pod
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
type: web
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
terminationGracePeriodSeconds: 0
: 파드를 삭제하면 기본적으로 30초 뒤 삭제인데, 이 설정을 하면 바로 삭제됨
ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 1
selector:
matchLabels:
type: web
template:
metadata:
name: pod1
labels:
type: web
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
replicas
는 1로 지정matchLabels
에 키, 벨류를 넣음- template에 metadata에 name: pod1이 있는걸 주목
- 한 네임스페이스에 이름이 중복되면 안 되는데 name: pod1을 어떻게 처리할까?
ReplicationController
apiVersion: v1
kind: ReplicationController
metadata:
name: replication1
spec:
replicas: 2
selector:
cascade: "false"
template:
metadata:
labels:
cascade: "false"
spec:
containers:
- name: container
image: kubetm/app:v1
ReplicaSet2
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica2
spec:
replicas: 2
selector:
matchLabels:
cascade: "false"
template:
metadata:
labels:
cascade: "false"
spec:
containers:
- name: container
image: kubetm/app:v1
실습 과정
- pod1 생성
- ReplicaSet 생성 --> 상세에서 pod1이 연결되어 있는 것을 확인
- ReplicaSet 상세에서 스케일 버튼으로 Replicas를 2로 변경 --> 새로운 파드 생성 확인
- 새로 생성한 파드의 이름이 pod1이 아니라 새로운 이름으로 생성된 걸 확인
- pod1 삭제 후 자동으로 파드가 생성되는 걸 확인
- ReplicaSet의 YAML 보기/편집하기로 template에 있는 이미지의 버전을 v2로 변경
- 모든 파드 삭제 후 새로 생성되는 파드의 버전이 v2인지 확인
- ReplicaSet 삭제 후 모든 파드가 삭제되는지 확인 --> 대시보드에서는 파드가 모두 삭제됨
- ReplicaController 생성 후 마스터에서 다음 명령어로 ReplicationController만 삭제하고 파드는 보존
kubectl delete replicationcontrollers replication1 --cascade=false
--cascade=false
가 파드 삭제를 방지해줌 - ReplicaSet2 생성 후 파드 연결 확인 --> 이 방법이 ReplicationController --> ReplicaSet 업데이트 방법
Selector
ReplicaSet with selector
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 1
selector:
matchLabels:
type: web
ver: v1
matchExpressions:
- {key: type, operator: In, values: [web]}
- {key: ver, operator: Exists}
template:
metadata:
labels:
type: web
ver: v1
location: dev
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
- 일반적으로 matchLabels를 씀
- matchExpressions는 잘 안 씀 --> 노드 스캐쥴링에서 쓰니 그 때 실습할 예정
- 이번엔 실습이 없고 주의사항만 말하고 끝
주의 사항
- Template의 labels 내용이 selector에 있는 내용을 포함해야 함, 안 그러면 오류
- matchLabels, matchExpressions를 동시에 사용할 수 있는데, template의 labels 내용이 matchLabels의 조건과 matchExpressions의 조건 모두를 포함해야 함
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 15. Deployment - 실습 (0) | 2021.02.14 |
---|---|
[k8s] 14. Deployment - Recreate, RollingUpdate (0) | 2021.02.13 |
[k8s] 12. Replication Controller, ReplicaSet (0) | 2021.02.12 |
[k8s] 11. Namespace, ResourceQuota, LimitRange - 실습 (0) | 2021.02.11 |
[k8s] 10. Namespace, ResourceQuota, LimitRange (0) | 2021.02.10 |