안녕하세요. 대머리독수리팀 입니다.
오늘은 NCP의 쿠버네티스 서비스와 쿠버네티스의 주요 컴포넌트에 대해서 알아보도록 하겠습니다.
Kubernetes Service
1. 완전 관리형 Kubernetes Cluster 제공
- Container의 배포(scheduling), 운영(HA,Failover) 확장(Scaling)을 자동화하기 위한 플랫폼
- Control Plane 설치, 운영에 대한 고민 없이, 사용자는 Container가 구동되는 Worker Node에 대한 관리만 하면 됨.
- Container Registry, Load Balancer 등 네이버 클라우드 플랫폼의 다른 서비스와 통합하여 사용가능
쿠버네티스의 주요 기능
1. Automatic Binpacking
- Worker node의 가용성을 유지하며서 보유한 리소스를 충분히 활용할 수 있도록 스스로 스케쥴링하며 컨테이너를 배치함
2. Storage Orchstration
- 로컬 저장소를 선택하거나 NFS, iSCSI 등과 같은 공유 네트워크 스토리지를 컨테이너에 할당/마운트하여 사용 가능함
3. Secret & Configuration Management
- Application 연동 및 접근 제어를 위한 보안 키, 설정 내역을 컨테이너 이미지의 변경 없이 업데이트 할 수 있고 외부로 노출하지 않고 사용 가능함.
4. Horizontal Scaling
- CPU 사용률과 같은 mtric을 기반으로 pod의 Deployments, replicaset 을 스케줄링하여 수평적 확장 가능
5. Service Discovery & Load Balancing
- 컨테이너에 IP 주소를 자동으로 할당하고 클러스터 내 트래픽을 로드 밸런싱 할 수 있는 컨테이너 세트에 단일 DNS 이름을 할당함
6. Self Healing
- 실패한 컨테이너를 자동으로 다시 시작하고, 사용자가 정의한 헬스체크에 응답이 없는 컨테이너를 종료함. 워커노드 장애시 사용 가능한 다른 워커 노드에 컨테이너를 다시 기동함.
7. Batch Execution
- 컨테이너 기반의 서비스 관리 뿐 아니라 배치 및 CI 작업 부하를 관리할 수 있으므로 원하는 경우 실패한 컨테이너 대체 가능함
8. Automatic Rollbacks & Rollouts
- 컨테이너의 응용 프로그램이나 구성에 대한 변경 사항을 점진적으로 업데이트하고 문제 발생 시 자동으로 롤백 할 수 있음.
쿠버네티스 컴포넌트
쿠버네티스 핵심 개념 - Pod
- 파드는 쿠버네티스 애플리케이션의 기본 실행 단위이다.
- 쿠버네티스 객체 모델 중 만들고 배포할 수 있는 가장 작고 간단한 단위이다.
1) 단일 컨테이너만 동작하는 파드, " 단일 컨테이너 당 한개의 파드" 모델은 쿠버네티스 사용 사례 중 가장 흔하다. 이 경우, 한 개의 파드가 단일 컨테이너를 감싸고 있다고 생각할 수 있으며, 쿠버네티스 컨테이너가 아닌 파드를 직접 관리한다고 볼 수 있다.
2) 함께 동작하는 작업이 필요한 다중 컨테이너가 동작하는 파드, 아마 파드는 강하게 결합되어 있고 리소스 공유가 필요한 다중으로 함꼐 배치된 컨테이너로 구성되어 있을 것이다. 이렇게 함께 배치되어 설치된 컨테이너는 단일 결합 서비스 단위일 것이다. 한 컨테이너는 공유 볼륨에서 퍼블릭으로 파일들을 옮기고, 동시에 분리되어 있는 "사이드카" 컨테이너는 그 파일들을 업데이트 하거나 복구한다. 파드는 이 컨테이너와 저장소 리소스들을 한 개의 관리 가능한 요소로 묶는다.
쿠버네티스 핵심 개념 - Deployment
1. 디플로이먼트란, 애플리케이션을 다운타임없이 업데이트 가능하도록 지원해주는 쿠버네티스 리소스
2. 사용자의 기대상태(Desired State)를 유지하도록 하는 Controller
- Deployment는 ReplicaSet에 대한 Update를 담당
- ReplicatSet은 사용자가 선언한 기대 상태인 Replica의 수를 지속적으로 확인하며 유지 시킴
쿠버네티스 핵심 개념 - Demonset
1. K8S 클러스터 내 모든 노드에서 Pod의 복제본을 실행하도록 함
2. 클러스터에 노드가 추가되면 Pod도 추가되고, 노드가 삭제되면 해당 노드에서 기동되던 Pod도 삭제됨
3. nodeSelector, podAffinity와 같은 조건을 명시하면 데몬셋 컨트롤러는 조건에 일치하는 노드에만 Pod를 생성
쿠버네티스 핵심개념 - Service
1. 클러스터 내 Pod들에게 접근하기 위한 방법으로 사용
2. 여러 Pod를 묶어 Healthy한 Pod로 Traffic 라우팅하는 로드 밸런싱 기능 제공
3. 클러스터의 Service CIDR 중에서 지정된 IP로 생성 가능
4. 서비스 이름은 클러스터내 고유한 DNS로 동작
쿠버네티스 핵심개념 - Ingress
1. 외부에서 오는 Traffic들을 클러스터 내부의 Service로 라우팅하기 위한 규칙 집합
2. NCR은 Host 기반 및 URL Path 기반 라우팅에 대한 규칙 사용
3. Ingress에 대한 Service 타입 지정은 외부 Traffic 수신 위해, NodePort 혹은 LoadBalancer 지정 필요
네이버클라우드플랫폼 쿠버네티스 서비스 소개
1. 마스터/워커 노드 설정
- VM / Baremetal 서버 생성
- K8S 통신 포트 확인
- 방화벽 / ACG를 설정
2. 설치 도구 설정
- VM / PC 에 Ansible 설치
- ip_forward 설정
- Python 설치
- Kubespray 설치
- 마스터 / 워커 노드 인벤토리 파일 설정 (playbook)
- Cluster Service, Pods subnet IP range 설정
- Cluster CNI 선택 / 설정
3. K8S Cluster Deploy
- SSH key 생성 및 노드 서버로 복사
- Ansible Playbook 실행
- 설치 과정 확인
- 에러 확인 및 트러블 슈팅
4. 시각화 / 모니터링 도구 설치
- Dashbord 설치를 위한 Deployment 파일 다운로드 또는 작성
- Dashbord pods 생성
- Dashbord Service expose
- 계정 및 접근 정보 설정
- 모니터링 데이터 저장을 위한 NAS 스토리지 생성
- Helm (k8s package managing tool) 설치
- 프로메테우스+grafana deployments 생성
- 모니터링 메트릭 설정
5. 사용자 어플리케이션 배포
- 사용자 application deployment 생성
- Service expose
- Load Balancer 설정
- PV 생성, Deployment 할당
- Service Healthcheck 설정 / 모니터링
댓글