2장. ROSA 아키텍처
2.1. 아키텍처 개념
AWS 아키텍처의 Red Hat OpenShift Service에 사용되는 OpenShift 및 컨테이너 기본 개념에 대해 알아보십시오.
2.1.1. OpenShift
OpenShift는 엔터프라이즈 워크로드를 실행하는 신뢰할 수 있는 환경을 제공하는 Kubernetes 컨테이너 플랫폼입니다. Kubernetes 플랫폼을 내장 소프트웨어로 확장하여 앱 라이프사이클 개발, 운영 및 보안을 향상시킵니다. OpenShift를 사용하면 하이브리드 클라우드 공급자 및 환경에 워크로드를 일관되게 배포할 수 있습니다.
2.1.2. Kubernetes
ROSA(Red Hat OpenShift Service on AWS)는 엔터프라이즈 Kubernetes 플랫폼인 Red Hat OpenShift를 사용합니다. Kubernetes는 여러 호스트에서 컨테이너화된 워크로드 및 서비스를 관리하기 위한 오픈 소스 플랫폼으로, 수동 개입 없이 컨테이너화된 애플리케이션을 배포, 자동화, 모니터링 및 스케일링하기 위한 관리 툴을 제공합니다. Kubernetes에 대한 자세한 내용은 Kubernetes 설명서 를 참조하십시오.
- 클러스터, 컴퓨팅 풀 및 컴퓨팅 노드
Kubernetes 클러스터는 컨트롤 플레인과 하나 이상의 컴퓨팅 노드로 구성됩니다. 컴퓨팅 노드는 CPU, 메모리, 운영 체제, 연결된 디스크 및 기타 속성의 유형 또는 프로파일의 컴퓨팅 풀로 구성됩니다. 컴퓨팅 노드는 Kubernetes 노드 리소스에
해당하며
클러스터의 모든 Kubernetes 리소스를 중앙에서 제어하고 모니터링하는 Kubernetes 컨트롤 플레인에 의해 관리됩니다.컨테이너화된 앱의 리소스를 배포할 때 Kubernetes 컨트롤 플레인은 클러스터의 배포 요구 사항 및 사용 가능한 용량을 고려하여 해당 리소스를 배포할 컴퓨팅 노드를 결정합니다. Kubernetes 리소스에는 서비스, 배포, Pod가 포함됩니다.
- 네임스페이스
-
Kubernetes 네임스페이스는 여러 팀과 클러스터를 공유하려는 경우와 같이 애플리케이션을 배포하고 액세스를 제한할 수 있는 별도의 영역으로 클러스터 리소스를 분할하는 방법입니다. 예를 들어, 사용자를 위해 구성된 시스템 리소스는
kube-system
과 같은 별도의 네임스페이스에 유지됩니다. Kubernetes 리소스를 생성할 때 네임스페이스를 지정하지 않으면 리소스가기본
네임스페이스에 자동으로 생성됩니다. - Pod
- 클러스터에 배포된 모든 컨테이너화된 앱은 Pod라고 하는 Kubernetes 리소스에서 배포, 실행 및 관리합니다. Pod는 Kubernetes 클러스터에서 소규모 배포 가능 단위이며 단일 단위로 처리해야 하는 컨테이너를 그룹화하는 데 사용됩니다. 대부분의 경우 각 컨테이너는 자체 Pod에 배포됩니다. 그러나 앱에는 동일한 개인 IP 주소를 사용하여 해당 컨테이너를 처리할 수 있도록 컨테이너 및 기타 도우미 컨테이너를 하나의 포드에 배포해야 할 수 있습니다.
- app
- 앱은 전체 앱 또는 앱의 구성 요소를 참조할 수 있습니다. 별도의 Pod 또는 컴퓨팅 노드에 앱의 구성 요소를 배포할 수 있습니다.
- Service
- 서비스는 Pod 세트를 그룹화하고 각 Pod의 실제 개인 IP 주소를 노출하지 않고 이러한 Pod에 네트워크 연결을 제공하는 Kubernetes 리소스입니다. 서비스를 사용하여 클러스터 내에서 또는 공용 인터넷 내에서 앱을 사용할 수 있도록 할 수 있습니다.
- Deployment
배포는 서비스, 영구 스토리지 또는 주석과 같이 앱을 실행하는 데 필요한 다른 리소스 또는 기능에 대한 정보를 지정할 수 있는 Kubernetes 리소스입니다. 구성 YAML 파일에서 배포를 구성한 다음 클러스터에 적용합니다. Kubernetes 기본 리소스는 리소스를 구성하고 사용 가능한 용량이 있는 컴퓨팅 노드의 포드에 컨테이너를 배포합니다.
롤링 업데이트 중에 추가할 Pod 수 및 한 번에 사용할 수 없는 Pod 수를 포함하여 앱에 대한 업데이트 전략을 정의합니다. 롤링 업데이트를 수행하면 배포에서 업데이트가 작동하는지 확인하고 오류가 감지되면 롤아웃을 중지합니다.
배포는 Pod를 관리하는 데 사용할 수 있는 하나의 유형의 워크로드 컨트롤러일 뿐입니다.
2.1.3. 컨테이너
컨테이너에서는 애플리케이션 코드, 구성 및 종속 항목을 단일 단위로 패키징하는 표준 방법을 제공합니다. 컨테이너는 컴퓨팅 호스트에서 격리된 프로세스로 실행되며 호스트 운영 체제 및 해당 하드웨어 리소스를 공유합니다. 컨테이너를 환경 간에 이동하고 변경 없이 실행할 수 있습니다. 컨테이너는 가상 머신과 달리 장치, 운영 체제 및 기본 하드웨어를 가상화하지 않습니다. 앱 코드, 런타임, 시스템 도구, 라이브러리 및 설정만 컨테이너 내부에 패키지됩니다. 이 방법을 사용하면 컨테이너를 가상 머신보다 가볍고 이식 가능하며 효율적으로 사용할 수 있습니다.
기존 Linux 컨테이너 기술(LXC)을 기반으로 구축된 OCI 호환 컨테이너 이미지는 앱을 실행하는 데 필요한 모든 요소를 포함하는 표준화된 단위로 소프트웨어를 패키징하는 방법에 대한 템플릿을 정의합니다. Red Hat OpenShift Service on AWS(ROSA)는 CRI-O를 컨테이너 런타임으로 사용하여 클러스터에 컨테이너를 배포합니다.
ROSA의 Kubernetes에서 앱을 실행하려면 먼저 컨테이너 레지스트리에 저장한 컨테이너 이미지를 생성하여 앱을 컨테이너화해야 합니다.
- Image
- 컨테이너 이미지는 실행하려는 모든 컨테이너의 기본입니다. 컨테이너 이미지는 이미지를 빌드하는 방법 및 앱, 앱 구성 및 해당 종속 항목과 같이 이미지를 빌드하는 방법을 정의하는 텍스트 파일인 Dockerfile에서 빌드됩니다. 이미지는 항상 다른 이미지에서 빌드되므로 빠르게 구성합니다.
- Registry
- 이미지 레지스트리는 컨테이너 이미지를 저장, 검색 및 공유할 수 있는 위치입니다. 레지스트리에 저장된 이미지는 공개적으로 사용 가능(공용 레지스트리)되거나 소규모 사용자 그룹(개인 레지스트리)에서 액세스할 수 있습니다. ROSA는 컨테이너화된 첫 번째 앱을 생성하는 데 사용할 수 있는 공용 이미지를 제공합니다. 엔터프라이즈 애플리케이션의 경우 프라이빗 레지스트리를 사용하여 권한이 없는 사용자가 이미지를 사용하지 않도록 보호합니다.