View

CloudNative?

Melody:) 2022. 11. 15. 14:20

클라우드 네이티브란 무엇입니까?

클라우드 네이티브는 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리할 때의 소프트웨어 접근 방식입니다. 현대적인 회사는 고객의 요구를 충족하기 위해 신속하게 업데이트할 수 있는 확장성, 유연성 및 복원력이 뛰어난 애플리케이션을 구축하고자 합니다. 이를 위해 클라우드 인프라에서 애플리케이션 개발을 기본적으로 지원하는 현대적인 도구와 기술을 사용합니다. 이러한 클라우드 네이티브 기술은 서비스 제공에 미치는 영향 없이 애플리케이션을 빠르게 자주 변경할 수 있도록 지원하여 혁신 역량과 경쟁력을 제공합니다. https://aws.amazon.com/ko/what-is/cloud-native/

 

→ 이게 도대체 뭔 소린가….?

쉽게 말해 클라우드 네이티브 개발은 **‘무제한 수평확장’**을 고려한 개발이다. 이를 커버하기 위해 거의 모든 부분에 자동화가 들어가야 한다. 결국 클라우드 네이티브 개발은 개발~운영 업무전반의 자동화를 통해 개발자 1인의 생산성을 극대화 하는것으로 볼 수 있다.

이를 위해 다양한 개념들이 등장했고, 아래 네 키워드가 ‘클라우드네이티브’ 를 대표하는 단어들이다.



  1. DevOps → 개발과 운영을 하나처럼. 운영을 고려한 개발을 하고, 개발을 고려한 운영을 한다. 따라서 데브옵스는 원래 ‘직무’ 보다는 ‘문화’를 지칭하는 단어이다.
  2. ContinuousDelivery → 개발부터 배포까지의 전과정을 자동화한다. DevOps에 있어 필수.
  3. Microservice → 서비스를 잘게 나누어 배포 단위를 줄인다. 리소스 단위가 작아지므로 컴퓨팅 자원을 더 효율적으로 배치할 수 있게 된다.
  4. 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 커맨드로 어지간한거 다 찾아볼 수 있음.

더 읽어보기

Share Link
reply
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31