-
[K8s] 컨트롤러 - Replication Controller, ReplicaSet, Deployment도커 | 쿠버네티스 2023. 1. 24. 11:25
Controller의 기능
- Auto Healing
노드의 이상이 발생하여 파드에 이상이 생겼을 때, 다른 노드에 해당 파드를 생성한다. - Auto Scaling
과도한 부하로 인해 추가적인 파드 생성이 필요할 경우 자동으로 파드를 생성한다. - Software Update
컨테이너 이미지에 변경사항이 생겼을 때 실행되고 있는 모든 파드에 변경사항을 적용한다. - Job
일 회 또는 주기적 사용이 필요한 컨테이너 이미지를 일 회 또는 주기적으로 실행한다.
Replication Controller
지정한 pod의 수를 유지시키는 컨트롤러이다.
selector를 통해 template에 있는 pod를 선택하는 기준자 → label이 선택자이다.
요소
- replicas - 생략하면 replicas: 1로 디폴트 실행된다.
- selector # selector에 적혀있는 label을 모두 포함하는 템플릿을 사용하고, 관리한다.
- template
예제
apiVersion: v1 kind: ReplicationController metadata: name: RCnginx spec: replicas: 3 selector: app: web template: metadata: name: nginx-pod labels: app: web spec: containers: - name: nginx-container image: nginx:1.14
Replication Controller 관련 유의사항
1. replicationcontrollers는 레이블을 통해 개수를 확인, 관리하기 때문에 템플릿이 다르더라도 레이블이 같다면 관리, 확인 대상에 포함된다.
2. replicationcontrollers는 롤링 업데이터를 제공하지 않는다. 카나리 업데이트는 가능하다.
→ edit을 통해 이미지를 변경하는 등 업데이트를 진행하면 현재 운영 중인 pod는 변화하지 않고 새로 만들어진 pod부터 적용되어 만들어진다.
3. selector는 같은 키에 대해 여러 값을 지정할 수 없다.ReplicaSet
지정한 pod의 수를 유지시키는 컨트롤러이다.
selector를 통해 template에 있는 pod를 선택하는 기준자 → matchLabels이 선택자이다.
요소
- replicas - 생략하면 replicas: 1로 디폴트 실행된다.
- selector # selector에 적혀있는 label을 모두 포함하는 템플릿을 사용하고, 관리한다.
추가:- matchLabels
- matchExpressions
- template
예제
apiVersion: apps/v1 # 다르게 입력해야하는 이유는? # api는 이미 만들어져 있는 것을 가져와 쓰는 것으로 이름과 버전을 통해 가져와야한다. kind: ReplicaSet metadata: name: RSnginx spec: replicas: 3 selector: matchLabels: app: web matchExpressions: - {key: version, operator: In, values: ["1.14","1.15"]} template: metadata: name: nginx-pod labels: app: web version: "1.14" spec: containers: - name: nginx-container image: nginx:1.14
Deployment
ReplicaSet의 상위 컨트롤러로 pod의 수 조절도 가능하다.
특징 :
- 롤링 업데이트를 한다.
- 롤백이 가능하다.
컨트롤러의 컨트롤 과정:
- Deployment 생성
- ReplicaSet에 요구조건 전달
- ReplicaSet이 파드 생성
예시
apiVersion: apps/v1 kind: Deployment metadata: name: DeploYnginx spec: replicas: 3 selector: matchLabels: app: web matchExpressions: - {key: version, operator: In, values: ["1.14","1.15"]} strategy: type: RollingUpdate * minReadySeconds: 10 revisionHistoryLimit: 1 * template: metadata: name: nginx-pod labels: app: web version: "1.14" spec: containers: - name: nginx-container image: nginx:1.14
* 업데이트 관련 yaml 요소
spec > strategy: type
Deployment의 업데이트 타입 지정
spec > revisionHistoryLimit
Deployment가 업데이트되고 과거의 ReplicaSet을 몇 개까지 남겨둘지 지정, 기본값 10개'도커 | 쿠버네티스' 카테고리의 다른 글
[K8s] StatefulSet, Ingress, Autoscaler (0) 2023.02.23 [K8s] 컨트롤러 - DaemonSet, Job, CronJob (0) 2023.01.24 Docker image build & Dockerfile (0) 2022.10.29 - Auto Healing