클라우드 네이티브
정의
클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식
<CNCF 클라우드 네이티브 정의>
- 퍼블릭, 프라이빗, 하이브리드 클라우드 환경에서 확장성 있는 애플리케이션을 만들고 운영할 수 있다.
- 컨테이너, 서비스 메시, 마이크로서비스, 불변의 인프라 스트럭처, 그리고 선언적 API가 전형적인 접근 방식에 해당한다.
- 회복성이 있고, 관리 편의성을 제공하며, 가시성을 갖는 느슨하게 결합된 시스템을 사용할 수 있다.
- 견고한 자동화와 함께 사용하면, 엔지니어는 최소한의 수고로 영향력이 크고 예측 가능한 변경을 할 수 있다.
핵심요소
- 최소의 상태(stateful) 컴포넌트들이 격리된 상태의 마이크로서비스로 구성되면,각각의 서비스는 분산되고, 탄력적이며 수평적 확장성 있는 시스템으로 구성
- 애플리케이션과 각각의 독립적인 배포 단위는 클라우드 중심의 디자인 패턴들과 셀프서비스가 가능한 탄력적인 플랫폼에서 운영되도록 설계되어 있음
- 애플리케이션을 서로 독립적인 기능을 하는 여러 개의 서비스로 구분
- 서비스들을 어떻게 구성, 연결, 관리하는지가 핵심요소
- '서비스'들을 묶어서 하나의 통합된 '(비즈니스) 서비스'를 할 수 있도록 하기 위한 다양한 기능과 기술 필요
클라우드 네이티브 애플리케이션 개발 원칙, "12Factors"
특징
- 핵심 : 민첩성
- 개발 방법 : 애자일 개발방법
- 팀 구성 : DevOps 방식운영(개발-운영 간의 협업 프로세스 자동화)
- 배포 주기 : 짧고 지속적인 배포(CI/CD)
- 애플리케이션 아키텍처 : 느슨한 결합/ 분산/ API 기반 통신
- 인프라스트럭처 : 컨테이너 중심/ 온 프레미스 & 클라우드 환경 기준 설계/ OS 종속성 제거 / 수평 확장(스케일 아웃)/ 수요에 따른 용량 자동 조정
MSA
마이크로서비스 아키텍처
- 대규모 소프트웨어 새발에 적용하기 위한 것으로 단독으로 실행 가능하고 독립적으로 배치될 수 있는 작은 단위(모듈)로 기능을 분해하여 서비스 하는 아키텍처
- 마이크로서비스 간 연결은 API를 이용
- 마이크로서비스는 자원 표현이나 데이터 관리 등에 있어서 기능적으로 완전해야 함
MSA예시
REST API
- 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
* REST는 웹에 존재하는 모든 자원(이미지, 동영상, 데이터 등)에 고유한 URI를 부여하여 자원에 대한 주소를 지정하는 방법론, ㄸ는 규칙.
HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현하여 대규모의 고성능 통신을 안정적으로 지원할 수 있고, 여러 플랫폼에서 사용할 수 있음
REST API - 구성요소
REST API - 호출 에시
컨테이너
가상화된 운영체제 위에서 애플리케이션의 독립적인 실행에 필요한 파일(소스코드, 라이브러리 등)을 모은 패키지
- Cloud Native 소프트웨어의 가장 작은 단위
- 하드웨어를 가상화하는 가상머신과 비교하면 컨테이너는 크기가 작고 가볍기 때문에, 동일한 서버 환경에서 더 많은 애플리케이션을 구동할 수 있음
- Container는 서버에 바로 배포할 수 있을 뿐 아니라, 가상머신 위에 배포할 수도 있음
- 컴퓨터 운영체제를 통해 관리되며 리소스 및 기능에 제약을 가지는 구동 프로세스
특징
- 실행 속도가 빠르다
- 배포 및 관리가 단순하다
- 컨테이너 이미지를 쉽게 공유 및 사용이 가능하다
- 가볍다
- 자원 낭비의 부담이 적다
- VM 들이 분리되어있어 안정성이 높다
DevOps
CI/CD
- CI/CD 파이프라인은 새 버전의 SW를 제공하기 위해 수행해야 할 일련의 단계를 의미 DevOps 또는 SRE 방식을 통해 더 효과적으로 SW를 제공
- CI/CD 파이프라인은 특히 통합 및 테스트 간계와 제공 및 배포 단계에서 모니터링 및 자동화를 도입하여 애플리케이션 개발 프로세스를 개선함
* 사이트 안정성 엔지니어링(SRE)은 개발과 운영(DevOps) 간의 프로세스와 정보를 연결하는 소프트웨어 엔지니어링 방식
* CI/CD와 DevOps 관계
DevOps는 소프트웨어 개발 효율성 향상을 목표하는 문화이자 프로세스,
CI/CD는 DevOps를 실현하기 위해 필수적인 방법요소
- DevOps는 협업에서 팀 구조, 관찰, 버전 관리 등에 이르기까지 소프트웨어 개발의 라이프사이클 전반을 포괄적으로 포함함
- DevOps는 조직 전반에서 매우 다양하게 구현될 수 있지만, CI/CD 없이는 실현 될 수 없음 즉, CI/CD는 DevOps 문화의 필수 요소
- CI/CD 파이프라인은 일련의 특정 단계로, DevOps 라이프사이클을 실현하는 툴, 자동화와 연결되어 있음
- CI/CD 파이프라인은 본질적으로 DevOps 문화와 더불어 빈번한 소규모 릴리스 프로세스와 연결되어 있음
K-PaaS
릴리즈
전체 구성도
핵심기능
참고: https://github.com/PaaS-TA/paas-ta-container-platform/blob/master/architecture/paasta_cp.md
구성 요소의 기능 및 역할
-
컨테이너, 애플리케이션 플랫폼, 사이드카
- 애플리케이션의 개발 및 배포, 실행/운영 관리를 위한 서비스를 제공
- 이 서비스는 Java, PHP, Ruby, Go 등 다양한 언어팩을 지원하여 애플리케이션 실행을 위한 컨테이너를 제공하며, 서비스 환경과 연계하여 데이터베이스, 메시지 큐 등 PaaS 내부 및 외부 서비스를 사용할 수 있도록 지원 함
- PaaS 기능 사용을 위한 계정 등록 및 접근 인증, 인증 후 사용할 수 이쓰는 API나 제어가 가능한 리소스에 대한 제어를 수행하는 권한 관리,
애플리케이션에 접근하기 위한 접근관리 서비를 제공합니다.
-
서비스
- 응용 애플리케이션 실행 시 다양한 대외 백엔드 플랫폼 서비스와 연계를 위한 대외 서비스 브로커 제공
- API 관리 및 연계를 위한 API 관리 서비스를 제공
-
운영도구
- 인프라 제어 및 연동과 애플리케이션 플랫폼을 위한 관리 서비스를 정의함
- 관리자를 위한 운영 대시보드와 개별 테넌트 및 모니터링 대시보드와 로그관리, 미터링 플러그인 서비스를 제공
-
개발도구
- PaaS 플랫폼을 활용하여 응용애플리케이션을 개발 및 배포, 운영하기 위한 셀프서비스 포털과 개발도구를 제공
정리가 잘 된 글이네요. 도움이 됐습니다.