이번 시간에는 Doker와는 서로 다른
Kubernetes(쿠버네티스)에 대해 알아보도록 하겠습니다.
2013년 3월 13일 솔로몬 하익스(Solomon Hykes)라는
개발자를 통해 처음으로 세상에 공개된 오픈 소스입니다.
2013년 등장한 도커(docker)는 인프라 세계를
컨테이너(container) 세상으로 바꿔버렸습니다.
수많은 어프리케이션이 컨테이너로 배포되고
Dockerfile(도커파일)을 만들어
이미지를 빌드하고 컨테이너를 배포하는
흔한 개발 프로세스가 되었습니다.
2013년 도커가 처음 등장한 후
약 1년의 시간이 지나고 Docker와 비슷한
Kubernates(쿠버네티스)가 등장하게 됩니다.
쿠버네티스란?
쿠버네티스 컨테이너를 쉽고 빠르게 배포/확장하고
관리를 자동화해주는 오픈소스 플랫폼 입니다.
쿠버네티스는 1주일에 수십억 개의 컨테이너를 생성해주는
Google 기반의 내부 배포시스템 "borg"를 기반으로
2014년에 프로젝트를 시작했으며
점차 여러 커뮤니티의 아이디어와 좋은 사례를 모아
빠르게 발전한 플랫폼입니다.
쿠버네티스의 특징
쿠버네티스는 컨테이너 오케스트레이션의
기본 기능 외에도 쿠버네티스가 가지능
차별화된 특징은 다음과 같습니다.
쿠버네티스는 전 세계적 스케일의 경험과 기술이
고스란히 녹아들어 있습니다.
쿠버네티스 환경에서 돌아다니는
커뮤니티를 설명해보자면
- 서비스 메시지(Istio, linkerd)
- CI(Tekton, Spinnaker)
- 컨테이너 서버리스(Knative)
- 머신러닝(kubeflow)
이 4가지 모두가 쿠버네티스 환경에서
돌아가는 서비스들 입니다.
클라우드 네이티브 어플리케이션 대부분이 쿠버네티스와
찰떡궁합을 이루고 있습니다.
다양한 배포방식
쿠버네티스는 컨테이너와 관련된 많은 예제가
웹(프론트+백) 애플리케이션을
다루고 있지만 실제 세상에서는 더 다양한
형태의 어플리케이션이 많이 존재합니다.
쿠버네티스는
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
등 다양한 배포 방식들을 지원합니다.
Deployment는 새로운 버전의 애플리케이션을
다양한 전략으로 무중단 배포할 수 있습니다.
StatefulSets은 실행 순서를 보장하고
호스트 이름과 불륨을 일정하게 사용할 수 있으며
순서나 데이터가 중요할 경우 사용할 수 있습니다.
로그나 모니터링 등 모든 노드에 설치가 필요한 경우
DeamonSet을 이용하고 배치성 작업은
Job이나 CronJob을 이용하면 됩니다.
Ingress 설정
다양한 웹 어플리케이션을 하나의 로드 밸런서로
서비스하기 위하 Ingress(입장)기능을 제공합니다.
웹 애플리케이션을 배포하는 과정을 보면 외부에서
직접 접근할 수 없게 애플리케이션을
내부망에 설치하고 외부에서 접근 가능한
ALB,nginx, Apache를 프록시 서버로 활용합니다.
프록시 서버는 도메인과 Path 조건에 따라 등록된
서버로 요청을 전달합니다.
서버가 바뀌거나 IP가 변경된다면
매번 수정해줘야 합니다.
쿠버네티스의 Ingress는 이를 자동화 해주면서
기존에 사용한 프록시 서버에서 사용하는 설정을
거의 그대로 사용할 수 있습니다.
새로운 도메일을 추가하거나 업로드 용량을 제한하기 위해
일일이 프록시 서버에 접속해 설정해줄 필요가 없습니다.
하나의 클러스터에 여러개의 Ingress설정을
할 수 있어서 관리자 접속용 Ingress와
일반 접속용 Ingress를 따로 관리할 수 있습니다.
클라우드 지원
쿠버네티스는 부하에 따라서 자동으로
서버를 늘리는 기능(Auto Scaling)이 있으며
IP를 할당 받아 로드 밸런스(LoadBalancer)로 사용 가능합니다.
외부 스토리지를 컨테이너 내부 디렉토리에 마운트해
사용하는 것도 일반적인 방법인데 이를 위해서는
클라우드 별로 적절한 API를 사용하는 모듈이 필요합니다.
쿠버네틱스에서는 Cloud Controller(클라우드 컨트롤러)
를 이용해 클라우드 연동을 손쉽게 확장할 수 있습니다.
AWS, 구글 클라우드, MS소프트 에서는 수십 개의
클라우드 업체에서 모듈을 제공해서
관리자는 동일한 설정 파일을
서로 다른 클라우드에서 동일하게 사용할 수 있습니다.
Namespace & Label
하나의 클러스터를 논리적으로 구분해 사용할 수 있습니다.
하나의 클러스터에 다양한 프레임 워크와
애플리케이션을 설치하기 때문에 기본(system,default)외에
여러 개의 네임스페이스를 사용하는 것이 일반적입니다.
더 세부적인 설정으로는 라벨(Label)기능을 적극적으로
사용하여 유연하면서 확장성 있게 리소스를 관리할 수 있습니다.
RBAC (role-based access controll)
접근 권한 시스템입니다. 각각의 리소스에 대해서 유저별로
CRUD같이 권한을 쉽게 지정해 줄 수 있습니다.
쿨리스터 전체에 적용하거나 특정한 네임스페이스에
적용할 수 있습니다.
AWS같은 경우 IAM을 연동해 사용이 가능합니다.
CRD (Custom Resource Definitation)
쿠버네티스가 제공하지 않는 기능을 기본 기능과 동일한 방식으로
적용하고 사용이 가능합니다.
예를 들어서 쿠버네티스는 기본적인 SSL 인증서 관리 기능을
제공하지 않지만 cert-manager(인증서 갱신 사용 프로세스)을 설치해
Certificate리소스를 이용하면 익숙한 쿠버네티스 명령어로
인증서를 관리할 수 있습니다. 또다른 도구, 방식을
익힐 필요가 없이 다양한 기능을 손쉽게 확장할 수 있습니다.
Auto Scaling
CPU, Memory 사용량에 따른 확장은 기본이며
현재 접속자 수와 같은 값을 사용할 수 있습니다.
컨테이너 개수를 조정하는
Horizontal Pod Autoscaler(HOA)
컨테이너의 리소스 할당량을 조절해주는
Vertical Pod Autoscaler(VPA)
서버 개수를 조정하는
Cluster Autosclaer(CA)
총 3가지의 방식이 있습니다.
Federation, Multi Cluster
클라우드에 설치한 쿠버네티스 클러스터와
자체 서버에 설치한 쿠버네티스를 묶어서 하나로
사용할 수 있습니다.
구글에서 발표한 Anthos를 이용해 한 곳에서
여러 클라우드의 여러 클러스터를 관리할 수 있습니다.
단점
쿠버네티스를 완벽히 이해하기 위해서는
개념이 복잡하고 이해가 어렵습니다.
YAML 설정 파일이 너무 많고
클러스트 자체를 만드는 것도 쉽지 않습니다.
그렇기 때문에 다음시간에서는
Linux를 기준으로 Docker를 설치하는 방법과
쿠버네티스 앱을 만드는 방법을 알아보도록 하겠습니다.
참고자료
'프론트 엔드 > Doker' 카테고리의 다른 글
[Docker] 도커 설치하기 (0) | 2023.01.06 |
---|---|
[Doker] Docker를 사용한 React 환경 구성 (0) | 2022.04.01 |
[Docker] Docker의 개념 및 핵심 설명 (0) | 2022.01.30 |