728x90
쿠버네티스의 이해
컨테이너 오케스트레이션
- 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화
- 컨테이너를 사용하는 어떤 환경에서든 사용할 수 있음
✔ 컨테이너 오케스트레이션으로 배포 가능한 태스크 자동화
- 설정 및 스케줄링
- 리소스 할당
- 인프라 전반의 워크로드 밸런싱을 기반으로 컨테이너 스케일링 또는 제거
- 컨테이너 상태 모니터링
- 컨테이너 간 상호 작용의 보안 유지 등
Kubernetes (K8s) 란?
- Container Cluster Manager
- 컨테이너화 된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈 소스 시스템
- 다양한 클라우드 및 베어메탈 환경 지원
쿠버네티스 특징
- Automatic bin packing
- ex) Nginx가 3개 필요할 때
- 각 노드에는 cAdviser가 기본으로 깔려있고 이벤트가 발생할 때마다 수집해 api로 보냄
- etcd에 저장 → Scheduler에 보냄 → Controller에게 3개 요청 후 Controller가 점검
- API가 Kubelet에게 실행 요청 → Docker Engine에게 재요청하고 엔진이 3개 실행
Kubelet은 실행할 능력이 없어서 Docker Engine에게 요청
Controller는 요청 한 개수를 유지하는 역할을 함
- 확장성을 고려하여 설계됨
- 소스 코드 수정 없이 쿠버네티스 클러스터에 기능을 추가할 수 있음
- Horizontal (수평) 스케일링
- 간단한 명령어나 UI or CPU 사용량에 따라 자동으로 애플리케이션의 스케일 업 & 다운
- 자가치유
- 오류가 발생한 컨테이너 재시작, 스케줄 ⇒ 건강한 컨테이너 관리
- 시크릿과 구성관리
- 컨테이너 관리를 하는 역할이 쿠버네티스
- 쿠버네티스를 사용하는 동안은 컨테이너(서비스)는 멈춰 있으면 안됨 ⇒ 항상 Running중인 컨테이너만 운영
- Batch 실행
- 서비스 외에도 batch와 CI 워크로드 관리
- 원하는 경우 실패한 컨테이너를 교체 가능
- 서비스 디스커버리와 로드 밸런싱
- 다섯 대의 컨테이너가 있으면 부하분산을 해서 다 서비스가 되도록 해줘야 함
- 쿠버네티스에게 로드밸런서 생성을 요청할 수 있음 ⇒ 랜덤하게 연결
- DNS 서비스도 지원해줌 (Route53 밖에서 사용) ⇒ EndPoint 조절이 필요 없음
- 컨테이너 개수에따라 로드밸런서에 연결된 ip도 알아서 늘어나고 줄어듦
- 스토리지 오케스트레이션
- 각각의 컨테이너 관리를 위해 파일 공유 스토리지(EFS) 사용
- 각각 워커 노드가 어디서 실행될 지 모르기 때문에 EFS를 사용
- 쿠버네티스의 드라이브를 설치하면 다른 가용영역의 EBS도 사용 가능 (원래 안됨) ⇒ Storage Orchestration
- Rolling Update (자동화된 롤아웃과 롤백)
- 애플리케이션 버전 Rollback, Update가 가능
- 설정 변경시 점진적으로 롤아웃, 문제가 발생하면 롤백 ⇒ Run time System
쿠버네티스 컴포넌트
✔ 컨트롤 플레인 (Control Plane)
- API Server
- 모든 데이터를 etcd 클러스터에 저장하므로 쉽게 수평 확장이 가능함
- 쿠버네티스 Control-Plane을 구체화 한 것
- etcd
- 쿠버네티스는 etcd를 사용해 전체 클러스터의 상태를 저장
- Controller Manager
- API를 사용해 클러스터의 상태를 감시하고 원하는 상태로 조정
- Scheduler
- node에 pod에 스케줄링 하는 역할을 담당
- 서비스의 리소스 요구사항, hw/sw 정책 제약 사항 등 여러가지 상호작용 고려
✔ Add-On
- Dashboard
- CNI (Container Network Interface Plugin)
- Ingress
- coreDNS
- headless 서비스를 제외한 모든 서비스는 DNS 이름을 가짐 ⇒ 자동 검색에 유용
✔ 워커 노드 (Worker Node)
- Kube-proxy
- 각 node에서 저수준의 네트워크 관리 업무 수행
- 서비스를 지역적으로 반영하고 TCP와 UDP 포워딩을 수행하며 환경변수나 DNS를 통해 클러스터 IP를 찾음
- kubelet
- Kubelet은 쿠버네티스를 대표하는 Node라고 할 수 있음
- 마스터 컴포넌트와 통신을 수행하며 실행중인 포드를 관리하고 감독
쿠버네티스 시퀀스 다이어그램
1️⃣ API가 정보를 꺼내서 스케줄러에게 줌
2️⃣ 스케줄러가 API에게 위치를 알려줌
3️⃣ etcd가 정보를 저장 후 Kubelet에게 실행 요청
4️⃣ Kubelet이 엔진에게 실행을 요청하고 엔진이 실행 후 Kubelet에게 전달
참조
https://www.redhat.com/ko/topics/containers/what-is-container-orchestration
반응형
'🐳 Container > K8S' 카테고리의 다른 글
[K8s] 쿠버네티스(Kubernetes) 컨트롤러 (1) (0) | 2023.03.27 |
---|---|
[K8s] 쿠버네티스(Kubernetes) 레이블(Labels) (0) | 2023.03.27 |
[K8s] 쿠버네티스(Kubernetes) pod 관리 (0) | 2023.03.26 |
[K8s] 쿠버네티스(Kubernetes) node 관리 (0) | 2023.03.26 |
[K8s] 쿠버네티스(Kubernetes) 설치 (Ubuntu 22.04 환경) (1) | 2023.03.23 |