🧭 Kubernetes | January 18, 2021
Controller의 주 역할은 Pod 을 생성, 관리하는 것이다.
Auto Healing: Pod 또는 Node의 문제로 인해 Pod가 다운될 시 Pod를 정상적으로 동작하도록 재생성해준다.Auto Scaling: Pod의 자원 상태가 limit의 상태로 돌입하였을 때 이를 감지하여 Pod를 하나 더 생성해 부하를 분산시켜 성능에 대한 장애 없이 안정적인 서비스를 운영할 수 있게 해준다.Software Update: 여러 Pod에 대한 버전 업그레이드를 컨트롤러를 통해 쉽게 업그레이드가 가능하다.
Job: 필요한(일시적인) 순간에만 작업을 해야할 때만 해당 작업 이행 후 제거할 수 있다.
현재
Replication Controller대체용으로ReplicaSet이 사용되고 있다.
지정된 숫자로 Pod을 기동 시키고 관리한다.
template: Pod를 재생성 또는 추가로 기동시킬 때 즉, template에 정의된 내용을 토대로 Pod를 생성
replicas: 정해진 개수만큼 Pod의 스케일 인/아웃을 관리해준다.지정된 숫자로 Pod을 기동 시키고 관리한다.
template, replicas 두개의 기능을 기본적으로 가지고 있다.selector: label 기준으로 어떤 Pod들을 관리할지 정의한다.matchLabels : 기존의 label 기능과 같이 Key: value의 값이 Pod - label과 동일한 Pod들만 연결 시켜주는 기능
주의사항:
label에 정의된 내용을 기준으로 작성해야 한다.
matchExpressions: 조건을 걸어 label을 좀 더 정교하게 필터링하는 기능
key 값이 Pod에 존재하는 것만 연결시켜주는 기능key 값이 Pod에 존재하지 않는 것만 연결시켜주는 기능key를 포함하는 Pod들 중에서 value의 값들이 존재하는 것만 연결시켜주는 기능key를 포함하는 Pod들 중에서 value의 값들이 존재하지 않는 것만 연결시켜주는 기능레플리카 오브젝트를 지우게 되면 자동으로 안에 있던 Pod들도 삭제가 된다. 하지만 레플리카 오브젝트를 지울 때 Pod를 살릴 수 있는 옵션이 있는데 바로 --cascade==false 라는 옵션이다.
$ kubectl delete 레플리카_오브젝트명 레플리카_네임 --cascade==false서비스를 업데이트해서 배포 및 재배포 시 도움을 주는 컨트롤러
ReplicationController 와 ReplicaSet 을 좀더 추상화한 개념
이전 Pod들을 삭제 후 새 버전의 Pod를 재배포
(옵션) revisionHistoryLimit: 이전 버전의 히스토리 보관 개수를 지정한다.
새 버전을 먼저 만들어준다. 즉, V1, V2 버전이 동시에 서비스가 되고 있기 때문에 사용자의 버전이 다를 수 있다.
(옵션) minReadySeconds : V1 -> V2 로 버전을 업데이트할 때 대기 시간을 부여한다.
블루그린은 새버전, 구버전의 2세트의 서버를 마련하고 한꺼번에 교체하는 배포 방법이다.
로드 밸런서 혹은 서비스 디스커버리 수준에서 참조 대상을 교체하는 방식으로 이뤄지는 배포형태이다.
- 두개의 ReplicaSet.yml 를 작성이 선행되어야 한다.
Service 컨트롤러를 이용해 label 단위로 V1, V2 버전을 선택. 즉, 신버전, 구버전의 순간적인 교체 가능
label만 이전 버전(V1)으로 바꿔주는 롤백이 가능(스탠바이 상태 가능), 다운 타임이 없음신규 버전을 배포할 때 한꺼번에 앱의 전체를 교체하는게 아니라 기존 버전을 유지한 채로 일부 버전만 신규 버전으로 올려서 신규 버전에 버그나 이상은 없는지를 사용자 반응은 어떤지 확인하는데 유용하게 사용하는 방법이다.
Pod에 대한 label을 2개 달아놓고, 레플리카셋 등으로 테스트용 Canary-Pod의 개수를 할당해 트래픽을 분산 및 신규 버전을 테스트하는 식이다.
Path를 이용해 특정 target을 대상으로 테스트가 가능하다.이전까진 ReplicaSet과 같은 컨트롤러와 쿠버네티스 스케줄러에 의해 각 Node의 자원량을 점수로 환산해 적절한 곳에
Pod를 배치 시켰지만,Daemonset은 각Node에Pod를 하나씩 생성해 준다.
- 각 노드에 두개 이상의 Pod를 만들 순 없지만
nodeSelector-label를 통해 특정 노드에 Pod를 안만들 순 있다.
성능 수집
Prometheus 툴 등)로그 수집
fluentd 툴 등)각 노드에 대한 정보를 저장 - Storage
GlusterFS 툴 등)(옵션) hostPort: Service의
externalTrafficPolicy: Local처럼 해당 노드의Pod에 접근이 가능하게 해준다.(같은 기능이라고 생각하면 된다.)
Job
- 한번 실행되고 끝나는 Pod 을 관리한다.
- Job 컨트롤러가 종료되면 Pod 도 같이 종료한다.
- 컨테이너에서 Job 을 수행하기 위한 별도의
command를 준다.- Job
command의 성공 여부를 받아 재실행 또는 종료여부를 결정한다.
CronJob
- Job 컨트롤러를 주기적으로 수행해야 할 때 사용한다. (Pod 등)
- 별도의
schedule을 정의해아 한다.- 예시: 주기적인(데이터 백업, 업데이트 확인, 예약 메일, SNS 등 메시징 관리)
(옵션) completions: 정의된 개수만큼
Pod정해진 작업을 수행한다.(옵션) parallelism: 정의된 개수만큼
Pod를 생성한다.(옵션) activeDeadlineSeconds: 정의된 시간(초)동안 동작하다
Pod의 수행여부와 관계없이 종료
- 예를 들어 10초면 끝나야 할 작업이 30초가 되어도 끝나지 않을 시 등 점검해보기 위해 많이 사용
schedule : 리눅스에서 사용하는 Cron 포맷형태 (정의된 시간대로 Job를 만든다.)
concurrencyPolicy:
Job의 동작 방식을 설정 (Allow가 default)
https://arisu1000.tistory.com/27842
https://kkimsangheon.github.io/2019/06/15/kube17/
https://dailyheumsi.tistory.com/208