Container와 Devops, MSA

개발 및 관리/클라우드 2023. 9. 6. 22:05 posted by HighLighter
반응형

* Container와 Devops
 1. 개발 환경을 컨테이너 기반 가상화 환경으로 구현하고 CI/CD 도구 및 개발방법론을 결합함으로써 코딩, 빌드 및 테스트를 보다 쉽고 빠르게 수행하며 개발 환경 자동화와 손쉬운 운영 환경 배포의 기반을 마련
 2. CI기술은 개발 과정에서 빠른 SW수정을 통해 품질 및 배포 속도를 향상시키며, CD기술은 SW업데이트를 업무 애플리케이션에 적용해 변경 사항을 보다 효율적으로 배포하도록 지원
 3. 컨테이너는 자동화 도구와 결합해 기업들의 개발 및 운영 과정의 민첩성을 향상
 4. 컨테이너 기반 가상화 환경은 컨테이너의 자동화된 배치, 확장 및 운영을 지원하는 오픈소스 관리 플랫폼 K8S와 결합해 사용
 5. DevOps와 MSA를 구현하기 위해 필요한 다양한 APP과 분석 툴

* MSA
 1. 관리 컨테이너: 개별 서비스 인스턴스에는 작동 할 컨텍스트가 필요. 가상 컴퓨터, Docker 컨테이너 또는 조정된 프로세스로 구현 된 관리 컨테이너는 이러한 기능을 제공, 인스턴스 관리 및 조정을 제공하고 필요에 따라 새 인스턴스를 회전하며 개별 인스턴스의 수명주기를 관리
 2. 외부 Gateway: MSA 구현은 비즈니스 응용 프로그램 및 응용 프로그램에서 사용할 수 있는 API 형태로 기능을 노출. 서비스 외부 게이트웨이는 이러한 서비스에 대한 액세스를 관리하고 트래픽 관리 및 보안 정책을 적용하여 MSA 환경을 보호. 외부 게이트웨이 기능은 종종 API 관리 제품을 사용하여 구현
 3. 서비스 메쉬: 서비스 간의 통신을 느슨하게 결합. 신뢰성 및 유연성을 유지하는데 도움이되는 기능으로 구성되어 서비스 분리, 버전 관리 전략 지원 및 부하시 탄성 확장성 관리가 가능. 서비스 라우팅, 로드 밸런싱, 서비스 발견, 구성 저장소, ID 공급자 기능
 4. 서비스 이미지 레지스트리: 사용자 환경의 어딘가에는 빌드되고 테스트 된 서비스의 불변 이미지를 저장하는 레지스트리로 코드 저장소(동적으로 생성된 서비스의 경우), Docker 이미지 레지스트리, 이진 아티팩트 저장소 또는 VM 이미지의 BLOB(Binary Large Object) 기반 저장소 등
 5. 메시지 지향 미들웨어: 가장 간단한 MSA 구현은 http와 같은 동기식 프로토콜 또는 gRPC 또는 Thrift와 같은 보다 효율적인 프로토콜을 사용하여 지속 가능하며 이벤트 및 메시지 중심 패턴을 지원하기 위해 비동기 메시징 채널이 필요
 6. 빌드 및 테스트 자동화: MSA의 개발 민첩성 이점은 개발 출력 품질을 극대화하고 전달을 간소화하기 위해 개발주기에서 높은 수준의 빌드 및 테스트 자동화가 필요
 7. 배포 자동화: 개발 민첩성 이점을 완전히 실현하려면 배포를 자동화

* 도커 컨테이너는 각 애플리케이션과 종속물이 운영체제 리소스의 분리된 세그먼트를 사용하는 방식으로 앱을 서로 그리고 기반이 되는 시스템으로 부터 분리한다.
* 컨테이너 기술은 민첩성을 확보하는 핵심 가상화 기술이며, 컨테이너 기반의 가상화 환경을 운영 관리하는 핵심 기술이 바로 K8S이다.
* 개발환경을 컨테이너 기반 가상화 환경으로 구현하고 CI/CD 도구 및 개발 방법론을 결합함으로써 코딩, 빌드 및 테스트를 보다 쉽고 빠르게 수행하며 개발 환경 자동화와 손쉬운 운영 환경 배포의 기반을 마련해준다.
* K8S는 상태를 관리하기 위한 대상을 Object로 정의하고 K8S 시스템에서 영속성을 가지며 클러스터의 상태를 나타내기 위해 이 객체를 이용한다. K8S 객체는 어떤 컨테이너화된 App이 동작 중인지(그리고 어느 노드에서 동작 중인지) 그 App이 이용할 수 있는 리소스, 그 App이 어떻게 재구동 정책, 업그레이드, 그리고 내고장성과 같은 것에 동작해야 하는지에 대한 정책 등의 내용을 포함한다.

https://kubernetes.io/docs/concepts/overview/components/

 

Kubernetes Components

A Kubernetes cluster consists of the components that are a part of the control plane and a set of machines called nodes.

kubernetes.io

출처 : https://kubernetes.io/docs/concepts/overview/components/

*K8S 개념
 - 클러스터 전체를 관리하는 컨트롤러로써 마스터
 - 컨테이너가 배포되는 머신(가상머신이나 물리적인 서버머신)인 노드

*K8S 오브젝트
 - 상태를 관리하기 위한 대상을 오브젝트로 정의
 - 오브젝트는 K8S 시스템에서 영속성을 가지는 객체
 - 클러스터의 상태를 나타내기 위해 이 개체를 이용
 - Basic Object, Controller, Object 스팩 및 메타 정보로 구성

*K8S 객체
 - 어떤 컨테이너화된 App이 동작 중인지(그리고 어느 노드에서 동작 중인지)
 - 그 App이 이용할 수 있는 리소스
 - 그 App이 어떻게 재구동 정책, 업그레이드, 그리고 내고장성과 같은 것에 동작해야 하는지에 대한 정책

*K8S Basic Object
 - 쿠버네티드에 의해서 배포 및 관리되는 가장 기본적인 오브젝트는 컨테이너화되어 배포되는 애플리케이션의 워크로드를 기술하는 오브젝트
 - 오브젝트는 사용자가 쿠버네티스에 바라는 상태(desired state)를 의미하고 컨트롤러는 객체가 원래 설정된 상태를 잘 유지할 수 있게 관리하는 역할
 - Pod, Service, Volume, Namespace 4가지
 - Pod는 컨테이너화된 App, Volume은 디스크, Service는 로드밸런서 그리고 Namespace는 패키지명

1. 마스터 컴포넌트는 클러스터 내 어떠한 머신에서도 동작 가능하다.

마스터 컴포넌트는 클러스터의 컨트롤 플레인을 제공하며 클러스터에 관한 전반적인 결정 (예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(예를 들어, 디플로이먼트의 replicas 필드가 요구조건을 충족되지 않을 경우 새로운 파드를 구동 시키는 것)를 감지하고 반응한다. 또한 마스터 컴포넌트는 클러스터 내 어떠한 머신에서도 동작 가능하며 API Server, Controller Manager, Scheduler, etcd로 구성된다.

2. 노드 컴포넌트는 동작중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작된다. 

노드는 쿠버네티스에 있어서 워커 머신이며 클러스터에 따라 VM 또는 물리 머신이 될 수 있으며 동작중인 파드를 유지시키며 모든 노드에서 동작된다. 여러 개의 파드는 하나의 노드 위에서 동작할 수 있다.

반응형