728x90
반응형
Controller
개념
Pod 를 관리하는 역학을 한다.
Replicatoin Controller(레플리케이션 컨트롤러), ReplicaSet(레플리카 셋)
Replication Contller
- 초기부터 있었던 기본적인 컨트롤러
- 명시한 Pod 개수만큼 유지하도록 해준다.
- 현재는 ReplcaSet 을 쓴다.
ReplicaSet
레플리케이션 컨트롤러의 발전형.
레플리케이션 컬트롤러와 차이점은 집합기반 셀렉터를 지원 한다. (in, notin, exists)
rolling-update 옵션 사용불가
설정
apiVersion: v1 kind: ReplicaSet metadata: name: nginx-replicaset spec: template: metadata: name: nginx-replicaset labels: app: nginx-replicaset spec: containers: - name: nginx-replicaset image: nginx ports: - containePort: 80 replicas: 3 selector: matchLabels: app: nginx-replicase
- .spec.template.metadata.labels 의 설정과 spec.selector.matchLabels의 설정이 같아야 한다.
- selector 설정이 없을 경우 .spec.template.metadata.labels 를 따라간다.
레플리카셋 삭제시 --cascade=false 옵션을 하면 레플리카셋만 삭제 가능하다. (Pod 삭제안됨)
Deployment(디플로이먼트)
Stateless 앱 배포시 사용하는 기본적인 컨트롤러
레플리카셋을 관리한다.
설정
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-deployment template: metadata: name: nginx-deployment labels: app: nginx-deployment spec: containers: - name: nginx-deployment image: nginx ports: - containerPort: 80
생성시 Deployemnt, ReplicaSet, Pod 가 생성된다.
설정정보 Update 방법
- kubectl set
- kubectl edit
- yaml 파일 수정후 apply
revsion
- kubectl rollout history deployment 이름
- kubectl rollout undo deploy (이전 revision 으로 롤백)
- kubectl rollout undo deploy 이름 --to-revision=숫자 (특정 revision 으로 롤백)
Pod 개수 조정
- kubectl scale deploy 이름 --replicas=숫자
배포 정지, 재개, 재시작
- kubectl rollout pause deployment/이름
- kubectl rollout resume deployment/이름
Daemonset (데몬셋)
클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러
클러스터 전체에 항상 실행시켜두어야 하는 파드에 사용
설정
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch updateStrategy: type: RollingUpdate template: metadata: labels: name: fluentd-elasticsearch spec: containers: - name: fluentd-elasticsearch image: fluent/fluentd-kubernetes-daemonset:elasticsearch env: - name: testenv value: value resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi
- .spec.updateStrategy.type : 다음 두가지중 선택
- OnDelete : 파드가 삭제되었을때 반영된다.
- RollingUpdate : 기본값 (1.5 이하에서는 OnDelete 가 기본값)
- 템플릿 변경시 바로 반영
- 모든 파드가 한꺼번에 반영되는건 아니고 .spec.updateStrategy.rollingUpdate.maxUnavailable 필드와 .spec.minReadySeconds 필드를 추가로 설정해 한번에 교체하는 파드를 조정한다.
- .spec.updateStrategy.type : 다음 두가지중 선택
StatefulSets (스테이트풀 셋)
- 상태가 있는 파드들을 관리하는 컨트롤러
- 생성될때 Pod 에 UUID 가 붙는게 아니라 숫자(0,1,2..)가 붙는다.
- 삭제될때에는 숫자가 큰것부터 삭제가 된다. (업데이트시에는 Pod를 삭제하고 다시 생성하기 때문에 마찬가지로 숫자가 큰것부터 수정된다.)
Job (잡)
실행된후 종료해야 하는 성격의 작업을 실행할때 사용하는 컨트롤러
설정
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: [] restartPolicy: Naver backoffLimit: 4
- .spec.completions : 정상적으로 실행 종료 되어야 하는 파드 개수
- .spec.parallelism : 동시에 실행 가능한 파드 개수
- .spec.restartPolicy : 재시작 정책을 설정한다.
크론잡
job 을 시간 기준으로 관리한다. 주기적으로 반복이 가능하다.
설정
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello form the k8s restartPolicy: OnFailure
- .spec.schedule : cron 명령 설정과 동일 (위는 1분)
출처 : 쿠버네티스 입문 - 90가지 예제로 배우는 컨테이너 관리자 자동화 표준 (동양북스)
728x90
반응형
'Development > Docker&Kubernetes' 카테고리의 다른 글
쿠버네티스 입문 - 8장 인그레스 (0) | 2020.12.30 |
---|---|
쿠버네티스 입문 - 7장 서비스 (0) | 2020.12.30 |
쿠버네티스 입문 - 5장 파드 (0) | 2020.12.23 |
[K8S] affinity 를 이용해서 노드 중복 피하기. (0) | 2020.11.20 |
[K8S] PV & PVC (0) | 2020.10.16 |