View
클라우드 네이티브란 무엇입니까?
클라우드 네이티브는 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리할 때의 소프트웨어 접근 방식입니다. 현대적인 회사는 고객의 요구를 충족하기 위해 신속하게 업데이트할 수 있는 확장성, 유연성 및 복원력이 뛰어난 애플리케이션을 구축하고자 합니다. 이를 위해 클라우드 인프라에서 애플리케이션 개발을 기본적으로 지원하는 현대적인 도구와 기술을 사용합니다. 이러한 클라우드 네이티브 기술은 서비스 제공에 미치는 영향 없이 애플리케이션을 빠르게 자주 변경할 수 있도록 지원하여 혁신 역량과 경쟁력을 제공합니다. https://aws.amazon.com/ko/what-is/cloud-native/
→ 이게 도대체 뭔 소린가….?
쉽게 말해 클라우드 네이티브 개발은 **‘무제한 수평확장’**을 고려한 개발이다. 이를 커버하기 위해 거의 모든 부분에 자동화가 들어가야 한다. 결국 클라우드 네이티브 개발은 개발~운영 업무전반의 자동화를 통해 개발자 1인의 생산성을 극대화 하는것으로 볼 수 있다.
이를 위해 다양한 개념들이 등장했고, 아래 네 키워드가 ‘클라우드네이티브’ 를 대표하는 단어들이다.
- DevOps → 개발과 운영을 하나처럼. 운영을 고려한 개발을 하고, 개발을 고려한 운영을 한다. 따라서 데브옵스는 원래 ‘직무’ 보다는 ‘문화’를 지칭하는 단어이다.
- ContinuousDelivery → 개발부터 배포까지의 전과정을 자동화한다. DevOps에 있어 필수.
- Microservice → 서비스를 잘게 나누어 배포 단위를 줄인다. 리소스 단위가 작아지므로 컴퓨팅 자원을 더 효율적으로 배치할 수 있게 된다.
- Containers
- 리눅스환경에서 제공되는 격리된 프로세스 실행 환경. 클라우드 네이티브에서 추구하는 최소 배포단위
- 1개의 프로세스를 수행을 전제로 하므로 컨테이너를 실행시키는 커맨드 (PID1)가 종료되면 컨테이너도 종료된다.
- 컴퓨팅의 단위가 ‘프로세스’ → 컨테이너 로 변경 됨으로써 1개의 물리머신이라는 한계를 벗어나 데이터센터 레벨의 확장과 분산이 가능해진다.
Cloud Native Computing Foundation (CNCF)
- 2015년 구글이 리눅스재단에 Kubernetes 1.0을 기증하면서 발족된 리눅스 재단 산하기관
- 컨테이너 기반 클라우드 기술의 발전을 위해 수많은 오픈소스 프로젝트를 관리하고 있음
- Google, AWS, Microsoft, Intel, IBM 등 수많은 후원사를 두고 있으며, 이들의 후원하에 오픈소스 프로젝트를 유지, 관리함..
- Sandbox → Incubating → Graduated 순으로 개발, 관리를 진행하며, ‘Incubating’ 과 ‘graduated’ 는 프로덕션에 충분히 사용할 수 있을정도의 성숙도를 보장함.
- Kubernetes외에 대표적인 CNCF의 프로젝트는 아래와 같다.
- 컨테이너 런타임 - Containerd, CRI-O
- 로깅에이전트 - Fluentd/Fluentbit
- 모니터링 - Prometheus, Tharnos
- 서비스메쉬 - Linkerd, Istio(최근에 합류)
- CD 툴 - ArgoCD
- 마이크로서비스간 통신프로토콜 - gRPC
- 메시지 스트리밍 - NATS
- 기타 - OPA(auth), KNative(serverless), Vitess(db), etcd(db) 등… 수십가지..
- https://landscape.cncf.io/?project=graduated,incubating&zoom=60
- 구글이 2015년 리눅스재단에 기증한 ‘컨테이너오케스트레이션’ 도구
- k와 s사이에 8글자가 있기 때문에 줄여서 ‘K8S’ 라고도 부른다.
- 몇몇 경쟁자가 있었으나 2022년 현재 **‘de facto standard’**의 지위를 지니고 있다(이미 몇년전부터 이 지위를 유지중). 프론트엔드에서 리액트의 지위보다 훨씬 높다. 버전관리도구에서 ‘git’의 지위를 생각하면 얼추 비슷하다. 배우긴 어렵지만 배우면 오래도록 써먹을 수 있다. 개인적으론 K8S가 영어와 유사한점이 많다고 생각되는데, 커리어적으로나 비즈니스적으로나 여러모로 갓성비라고 생각한다.
- 사실상 제대로 된 SRE(Server Reliability Engineering)조직을 갖춘 중규모 이상 기업은 전부 Kubernetes를 사용하고 있다고 봐도 무방하다. CNCF에서 관리되는 사실상 모든 오픈소스들은 쿠버네티스 상에서 돌아가는 것을 디폴트로 여기고 만들어지기 때문에, 호환성/지원 같은건 걱정하지 않아도 된다. 키클록과 같은 별도의 오픈소스들도 쿠버네티스 사용자를 고려하여 쿠버네티스에서 바로 배포할 수 있도록 ‘helm chart’ 나 ‘operater’등을 제공한다.
- 클라우드 네이티브가 추구하는것 (failover, rollout/rollback, scheduling, loadbalancing, deployment strategy)을 위해 다양한 개념/리소스를 정의함
- 실행 최소단위 변경: process → container
- 배포 최소단위 변경: process → pod
- 자동화된 failover: pod-level (by kubelet), deployment/replicaset level (by controller), HPA
- 자동화된 service discovery & loadbalancing: service, ingress controller
- 자동화된 배포/롤백/스케일링: deployment/replicaset
K8S Concepts and Terminology
- pod과 container: 실행, 배포 최소 단위
- service: 로드밸런싱 및 서비스디스커버리를 위한 개념.
- replicaset과 deployment: 배포 단위 (일반 케이스)
- statefulset, daemonset: 배포 단위 (특이 케이스)
- node: 컴퓨팅 자원
- namespace: 각종 리소스의 격리를 위한 개념. (액세스 권한 제어 등에 사용)
- controlplane, etcd, kubelet, controller, scheduler: 쿠버네티스 클러스터를 이루는 ‘본체’ 랄까…? (사람의 신경계와 같음)
- persistant volume(pv), persistant volume claim (pvc): 영속성 스토리지
- ingress, ingress controller: 로드밸런서/APIGateway의 라우팅룰, 및 라우터
- helm chart and release: 함께 배포되는 리소스들을 한번에 묶어서 정의할 수 있도록 도와주는 도구.
- 이외에도 HPA(horizontal pod autoscaling), NetworkPolicy, ServiceAccount, Configmap & Secret, role & rolebinding, CRD 등 다양한 개념 존재
- 사실상 ‘클라우드 데이터센터’ 상에서 서비스를 돌리기 위한 거의 모든것을 제공함.
- CNCF에서 제공하는 다른 몇몇 오픈소스들(e.g.istio)까지 추가하면 Planet-Scale Enterprise Service가 요구하는 모든것을 충족할 수 있음.
kubectl: CLI for Kubernetes
- context (kubectl을 사용하는 사용자 신분(인증서)+대상클러스터 e.g.(Cluster1Admin))를 지정하여 사용.
- commands - get, delete, apply, run, … 자동완성 및 —help 아주아주아주아주 잘 지원함. 공식문서도 잘되어있는데 공식문서 볼 필요 없이 —help 커맨드로 어지간한거 다 찾아볼 수 있음.
더 읽어보기
reply