Search
Duplicate

k8s

태그

쿠버네티스

구글에서 개발한 2014년 오픈소스화 된 프로젝트로 컨테이너 중심의 관리 환경을 제공하는 오케스트레이션 툴

쿠버네티스 장점 및 기술

1.
Horizontal Scailing 컨테이너는 가상화보단 격리를 사용하기 때문에 부팅 과정이 없고 작은 이미지를 사용하여 복제가 빠르다. CLI 명령어나 설정 변경 통해 컨테이너를 쉽게 확장 가능하다.
2.
Service discovery & Load balancing ReplicaSet을 통해 운영 플랫폼 자체에서 어플리케이션을 찾아주는 서비스 디스커버리와 부하분산하는 로드 밸런싱을 지원한다.
3.
Roll-out & Roll-back ReplicaSet을 관리하여 정책에 따른 무중단 배포, 업데이트 등을 플랫폼 차원에서 지원한다.
4.
Self-healing 정지된 컨테이너를 자동으로 다시 시작하고, 정상 기능을 하지 못하는 컨테이너를 재시작하는 기능을 제공한다.
5.
Secret & Configuration Management 설정 및 접속 정보를 컨테이너 이미지나 빌드 환경과 분리하여 관리하고 배포할 수 있도록 지원하여 보안과 확장, 편의성을 최대화한다.
6.
Open Source 특정 회사 소유가 아닌 오픈소스 프로젝트에 다양한 회사들이 지원 및 기여를 하면서 고객지원 방안과 안정성을 확보할 수 있다.

쿠버네티스 아키텍처

쿠버네티스는 크게 마스터와 노드 두 개의 컴포넌트로 분리 Master 다양한 모듈이 확장성을 고려하여 기능별로 쪼개져 있는 것이 특징. 관리자만 접속할 수 있도록 보안 설정을 해야 하고, 마스터 서버가 죽으면 클러스터를 관리할 수 없기 때문에 보통 3대를 구성하여 안정성을 높인다.
Node 마스터 서버와 통신하면서 필요한 Pod을 생성하고 네트워크와 볼륨을 설정한다. 실제 컨테이너들이 생성되는 곳으로 수백, 수천대로 확장 가능. 각 서버에 라벨을 붙여 사용목적(GPU 특화, SSD 서버 등)을 정의할 수 있다. Kubectl API 서버는 json 또는 protobuf 형식을 이용한 http 통신을 지원하는데, 이 방식을 그대로 쓰면 불편하기에 kubectl이라는 명령행 도구를 사용하여 지원한다.

Master 구성요소

API server 모든 요청을 처리하는 마스터의 핵심 모듈. Kubectl의 요청 뿐 아니라 내부 모듈의 요청도 처리하며 권한을 체크하여 요청을 거부할 수 있다. Etcd RAFT 알고리즘을 이용한 key-value 저장소. 클러스터의 모든 설정, 상태 데이터는 etcd에 저장되며, 단순히 값을 저장하고 읽는 기능 뿐만 아니라 watch 기능이 있어 어떤 상태가 변경되면 바로 체크하여 로직 수행 가능. Scheduler, Controller API 서버는 요청을 받으면 저장소와 통신할 뿐 실제로 상태를 바꾸는 건 스케줄러와 컨트롤러이다. 현재 상태를 모니터링하다가 원하는 상태와 다르면 각자 맡은 작업을 수행하고 상태를 갱신한다.

Node 구성요소

Kubelet 노드에 할당된 Pod의 생명주기를 관리한다. Pod을 생성하고 Pod 안의 컨테이너에 이상이 없는지 확인하면서 주기적으로 마스터에 상태를 전달한다. API 서버의 요청을 받아 컨테이너의 로그를 전달하거나 특정 명령을 대신 수행하기도 한다 Kube-proxy Pod로 연결되는 네트워크를 관리한다. TCP, UDP, SCTP 스트림을 포워딩하고 여러 개의 Pod을 R-R 형태로 묶어 서비스를 제공할 수 있다. Pod 쿠버네티스에서 배포할 수 있는 가장 작은 단위로 한 개 이상의 컨테이너와 스토리지, 네트워크 속성을 가진다. Pod에 속한 컨테이너는 스토리지와 네트워크를 공유하고 서로 localhost로 접근할 수 있다.