Infra/Kubernetes
Controller - ReplicaSet 특징 -> Template, Replicas, Selector
최-코드
2025. 6. 12. 01:00
ReplicaSet 컨트롤러와 파드는 서비스와 파드처럼 라벨과 셀렉터로 연결할 수 있다.
컨트롤러를 삭제하면 연결된 파드들도 모두 삭제되기 때문에 주의해야 한다. 대쉬보드가 아닌, 터미널에서 아래의 명령어를 사용하면 파드는 삭제하지 않고, 컨트롤러만 삭제할 수 있게 된다.
-> kubectl delete replicationcontrollers replication1 --cascade=false
Template
- 템플릿 기능은 아래와 같다.
- 컨트롤러를 만들 때 템플릿으로 파드의 내용을 넣게 되는데, 오토 힐링의 기능을 사용하기 위함이다.
- 즉, 사진 상 왼쪽 Pod가 죽었을 때 템플릿을 통해 파드를 새로 만들어준다.
- 이러한 기능을 통해 소프트웨어 업데이트 기능을 이끌어낼 수 있다.
- 템플릿을 v2에 대한 파드로 업데이트하고, 기존에 연결되어 있는 파드를 다운시키면 v2의 파드를 생성하게 된다.
- template에서도 라벨을 지정해줘야 새로 만들어질 때 replication-1 컨트롤러와 연결이 된다.
- template 부분은 Pod를 만들 때와 동일한 yaml 구조로 정의하듯이 해준다.
- name을 넣어줘도 replicas에 맞춰서 새로 생성될 때는 임의의 이름으로 생성된다.
Replicas
- replicas 만큼 파드의 개수가 관리된다.
- 만약 파드가 삭제가 되거나 장애가 발생하면 replicas 수를 맞추기 위해 새로운 파드를 생성한다.
- replicas의 수를 늘리면 그만큼 스케일 아웃이 된다.
yaml 파일은 위의 설명 사진 참고
화살표는 임의로 보여주는 것으로, 그저 정수 하나만을 적어줘야 한다.
Selector
- ReplicaSet에는 ReplicationController와 다르게 selector에 두 가지 추가적인 속성이 있다.
- matchLabels: ReplicationController와 같이 Key:Value가 모두 같아야지 연결을 해주는 기능
- matchExpressions: Key:Value를 좀 더 디테일하게 컨트롤할 수 있게 해준다. 예를 들어 사진 속 key를 ver이라고 지정하고 operator를 Exists로 할 시에, value에 상관없이 key 이름이 ver인 파드를 모두 연결해준다.
- ReplicationController는 현재 deprecated 상태이므로 ReplicaSet만을 사용하도록 지향해야 한다.
- matchLabels or matchExpressions 둘 중 하나를 꼭 정의해줘야 한다. ReplicationController처럼 바로 Key:Value 선언이 불가능하다.
- operator의 종류는 오른쪽 사진과 같다.
- Exists: 지정한 key의 값과 동일한 파드를 연결해준다.
- DoesNotExist: 지정한 key의 값과 동일하지 않은 파드를 연결해준다.
- In: 지정한 key의 값과, values에 지정한 값 중 만족하는 파드를 연결해준다.
- NotIn: 지정한 key의 값과, values에 지정한 값 중 만족하지 파드를 연결해준다. -> key의 값이 같은 것 중에서 values만 만족하지 않는 파드를 연결해준다.
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의 각 라벨에 대해 template의 labels에서 만족하는게 존재하면 생성된다.
- 만약 matchLabels의 ver: v1이 ver: v3으로 변경되면 오류가 발생해 생성되지 않는다.
- template의 labels에서 그 외의 추가적인 라벨은 더 생겨도 문제 없다.