K8s 뉴비의 쿠버네티스 정복기 (3)
1. K8s 개념 이해 (Ctnd.)
고급 컨트롤러
- RC, RS, Deployment는 웹서버 같은 일반적 워크로대에 대해 Pod 관리하기 위한 컨트롤러
- 실제 운영환경에서는 일반적 워크로드 이외에 DB / 배치 작업 / 데몬 서버와 같이 다양한 형태의 워크로드 모델 존재 : 이를 위해 다야한 컨트롤러 제공
- DaemonSet(DS)
- Pod가 각각의 노드에서 하나씩만 돌게 하는 형태로 Pod를 관리하는 컨트롤러
- 모든 Node에 균등하게 하나씩만 배포
- 서버 모니터링 혹은 로그 수집 용도로 많이 사용
- 특정 node에만 pod 배포 가능하도록 node selector 활용하여 선택 가능
- Job
- 배치 혹은 한번 실행되고 끝나는 형태의 작업
- 원타임 파일 변환 작업 / 주기적 ETL 배치 작업 => 작업시에만 Pod를 띄우면 됨
- Job 종료시 Pod 종료
- 보통 이미지 + Job 수행 위한 커맨드를 함께 입력
- Job 컨트롤러에 의해서 실행된 Pod는 이 Command의 실행 결과에 따라 Job의 실패 / 성공 여부 판단
- 종료 => 실패 => 재실행 ? 끝낼지 ? 설정에 따라 결정
- 만약 비정상적 종료시에는(장애 발생시)
- 다시 시작하게 하거나 (resume이 아닌 restart)
- 다시 시작하지 않게
- Completion : 여러번 수행 / Parallesim : 병렬 수행 의 옵션 줄 수 있음
- Cron Jobs
- Job 컨트롤러에 의해 실행되는 배치성 작업들에 대해서 주기적 자동화 실행
- 스케줄로 처리 : cron jobs
- unix 명령어처럼 시간에 따른 실행조건 정의 가능 : 이에 따라 Job 컨트롤러 실행 / 정의된 Pod 실행
- StatefulSet
- DB와 같이 상태를 가지고 있는 Pod를 지원하기 위해 소개
- 디스크 볼륨과 연관
2. 아키텍처
마스터와 노드
- 마스터 : 클러스터 전체 컨트롤 시스템
- API 서버 : k8s는 모든 명령을 및 통신을 api로 수행 : REST API
- Etcd : k8s 클러스터의 DB 역할 / 서버 설정값이나 클러스터 상태 저장하는 서버 => key-value 스토어 오픈소스
- 스케줄러 : Pod / 서비스 등 각 리소스들을 적절한 노드에 할당
- 컨트롤러 매니저 : 컽트롤러를 생성하고 이를 각 노드에 배포 / 관리
- DNS : k8s는 리소스의 Endpoint를 DNS로 매핑하고 관리
- Pod나 서비스틑 IP를 동적으로 생성하여 받기 때문에 리소스에 대한 위치 정보가 필요함 : Service Discovery => 내부 DNS 서버를 두는 방식으로 해결
- 즉, 새로운 리로스가 생기면 해당 리소스에 대해 IP / DNS 이름을 등록하여 해당 DNS 이름 기반으로 리소스에 접근할 수 있게 함
- 노드 : 마스터에 의해 명령받고, 실제 워크로드를 생성하여 서비스하는 컴포넌트
- Kubelet : 노드에 배포되는 에이전트 / 마스터와 API 통신하며 명령을 전달받아 수행하고, 반대로 노드의 상태 등을 마스터에 전달
- Kube-proxy : 노드에 들어오는 네트워크 트래픽을 적절한 컨테이너로 라우팅, 로드밸런싱 등 노드로 들어오고 나가는 네트워크 트래픽을 프록시함. 노드 - 마스터 간 네트워크 통신 관리
- Container Runtime : Pod를 통해 배포된 컨테이너를 실행하는 컨테이너 런타임 / 보통 도커를 생각하나 이외에 rkt (보안 강화), Hyper container 등 다양한 런타임이 있다고 함
- cAdvisor : 각 노드에서 기동되는 모니터링 에이전트 : 노드 내에서 가동되는 컨테이너 상태 / 성능정보 수집 => 마스터 서버의 API로 전달 (kubelet를 안거치고?) / 보통 모니터링용으로 사용
출처 - 조대협님 블로그 (https://bcho.tistory.com/1255)
댓글남기기