Kubernetes 아키텍처란?
Kubernetes는 클러스터 전반의 서비스 검색을 위해 느슨하게 결합된 메커니즘을 제공하는 아키텍처입니다. Kubernetes 클러스터에는 하나 이상의 컨트롤 플레인과 하나 이상의 컴퓨팅 노드가 있습니다. 전반적으로 컨트롤 플레인은 전체 클러스터를 관리하고, API(Application Program Interface)를 노출하며, 원하는 구성에 따라 컴퓨팅 노드의 시작 및 종료를 스케줄링합니다. 각 컴퓨팅 노드는 컨트롤 플레인과 통신하는 kubelet이라는 에이전트와 함께 Docker와 같은 컨테이너 런타임을 실행합니다. 각 노드는 베어메탈 서버이거나 온프레미스 또는 클라우드 기반 가상 머신(VM)일 수 있습니다.

vSphere with Tanzu 101 - vSphere 관리자를 위한 소개

Kubernetes 및 컨테이너용 VMware 가상화를 선택해야 하는 이유
Kubernetes 아키텍처 구성 요소에는 무엇이 있습니까?
Kubernetes 클러스터의 주요 구성 요소는 다음과 같습니다.
노드: 노드는 컨테이너화된 애플리케이션을 호스팅하는 가상 머신 또는 물리적 서버입니다. 클러스터의 각 노드는 하나 이상의 애플리케이션 인스턴스를 실행할 수 있습니다. 적게는 하나의 노드가 있을 수 있지만 일반적인 Kubernetes 클러스터에는 여러 개의 노드가 있으며 수백 개 이상의 노드를 배포하는 경우도 많습니다.
이미지 레지스트리: 컨테이너 이미지는 레지스트리에 보관되며 컨테이너 포드에서 실행할 수 있도록 컨트롤 플레인이 노드에 전송합니다.
포드: 포드는 컨테이너화된 애플리케이션이 실행되는 위치입니다. 하나 이상의 컨테이너를 포함할 수 있으며 Kubernetes 클러스터 내 애플리케이션을 위한 최소 배포 단위입니다.
Kubernetes 컨트롤 플레인 아키텍처란?
Kubernetes 컨트롤 플레인은 Kubernetes 클러스터의 컨트롤 플레인입니다. 여기에는 다음과 같은 구성 요소가 있습니다.
- kube-apiserver. API 서버는 이름에서 알 수 있듯이 통신 중심인 Kubernetes API를 노출합니다. 명령줄 인터페이스(CLI) 또는 기타 사용자 인터페이스(UI)를 통한 외부 통신은 kube-apiserver로 전달되며 노드 통신에 대한 모든 컨트롤 플레인도 API 서버를 통과합니다.
- etcd: 클러스터와 관련된 모든 데이터가 저장되는 키 값 저장소입니다. etcd에 대한 모든 액세스가 API 서버를 통해 이루어지므로 etcd는 가용성이 높고 일관성이 있습니다. etcd의 정보는 일반적으로 사람이 읽을 수 있는 YAML(이름 안에 해당 이름이 다시 나오는 “YAML Ain’t Markup Language”의 약자) 형식으로 지정됩니다.
- kube 스케줄러r: 새로운 포드가 생성되면 이 구성 요소는 지리적 위치 및 다른 워크로드와의 간섭과 관련된 리소스 요구 사항, 정책 및 ‘선호도’ 규격에 따라 실행을 위해 포드를 노드에 할당합니다.
- kube-controller-manager: Kubernetes 클러스터에는 여러 컨트롤러 기능이 있지만, 모두 kube-controller-manager라는 단일 바이너리로 컴파일됩니다.
이 프로세스에 포함되는 컨트롤러 기능은 다음과 같습니다.
- 복제 컨트롤러: 클러스터에서 실행되는 복제된 각 포드에 대해 올바른 수의 포드가 존재하는지 확인
- 노드 컨트롤러: 각 노드의 상태를 모니터링하고 노드가 온라인 상태가 되거나 응답하지 않을 경우 클러스터에 알림
- 엔드포인트 컨트롤러: 포드와 서비스를 연결하여 엔드포인트 객체 입력
- 서비스 계정 및 토큰 컨트롤러: 클러스터의 새 네임스페이스에 API 액세스 토큰 및 기본 계정 할당
- 클라우드 컨트롤러 관리자: 클러스터가 부분적으로 또는 전체적으로 클라우드 기반인 경우 클라우드 컨트롤러 관리자는 클러스터를 클라우드 공급업체의 API에 연결합니다. 클라우드 공급업체에 특정된 제어만 실행됩니다 클라우드 컨트롤러 관리자는 완전히 온프레미스에 있는 클러스터에는 존재하지 않습니다. 무장애 기능을 구현하거나 전반적인 클라우드 성능을 개선하기 위해 클러스터에서 둘 이상의 클라우드 컨트롤러 관리자를 실행할 수 있습니다.
클라우드 컨트롤러 관리자의 요소는 다음과 같습니다.
- 노드 컨트롤러: 응답을 멈춘(예: 삭제된 경우) 클라우드 기반 노드의 상태 확인
- 라우트 컨트롤러: 클라우드 공급업체 인프라에서 경로 설정
- 서비스 컨트롤러: 클라우드 공급업체의 로드 밸런서 관리
Kubernetes 노드 아키텍처란?
노드는 Kubernetes가 실행할 포드를 배치하는 가상 머신 또는 물리적 서버인 머신입니다. 노드 구성 요소는 다음과 같습니다.
kubelet: 모든 노드에는 kubelet이라는 에이전트가 있습니다. 이렇게 하면 PodSpec에서 설명하는 컨테이너가 올바르게 가동되고 실행됩니다.
kube-proxy: 네트워크 노드를 유지 관리하는 각 노드의 네트워크 프록시가 클러스터 내부든 외부든 상관없이 가능한 경우 운영 체제(OS) 패킷 필터링을 사용하여 포드에서 네트워크 세션으로의 통신을 허용합니다.
컨테이너 런타임: 컨테이너화된 애플리케이션의 실행을 담당하는 소프트웨어입니다. Docker가 가장 널리 사용되지만 Kubernetes는 Kubernetes CRI(컨테이너 런타임 인터페이스)를 준수하는 모든 런타임을 지원합니다.
다른 Kubernetes 인프라 구성 요소는 무엇입니까?
포드: 포드는 하나 이상의 애플리케이션 컨테이너를 캡슐화하여 Kubernetes 애플리케이션의 가장 기본적인 실행 단위가 됩니다. 각 포드는 실행에 필요한 코드와 스토리지 리소스를 포함하며 자체 IP 주소를 가집니다. 포드에는 구성 옵션도 포함됩니다. 일반적으로 포드에는 애플리케이션이나 비즈니스 기능에 결합되고 리소스와 데이터 세트를 공유하는 소수의 컨테이너 또는 단일 컨테이너가 포함됩니다.
배포: 컨테이너화된 애플리케이션 포드를 배포하는 방법입니다. 배포에 설명된 원하는 상태는 컨트롤러가 클러스터의 실제 상태를 변경하여 체계적인 방식으로 해당 상태에 도달하도록 합니다. Kubernetes 배포에 대해 자세히 알아보십시오.
ReplicaSet: 특정 시점에 지정된 수의 동일한 포드가 실행되도록 보장합니다.
클러스터 DNS: Kubernetes 서비스 운영에 필요한 DNS 레코드를 제공합니다.
컨테이너 리소스 모니터링: 중앙 데이터베이스에서 컨테이너 측정지표를 파악하고 기록합니다.
Kubernetes 아키텍처 모범 사례와 설계 원칙은 무엇입니까?
Gartner의 컨테이너 모범 사례는 보안, 거버넌스, 모니터링, 스토리지, 네트워킹, 컨테이너 수명주기 관리 및 Kubernetes와 같은 오케스트레이션을 고려한 플랫폼 전략을 제안합니다.
다음은 Kubernetes 클러스터 설계에 대한 몇 가지 모범 사례입니다.
- 최신 Kubernetes 버전(이 글을 쓰는 시점을 기준으로 1.18)으로 업데이트했는지 확인합니다.
- 개발자 및 운영 팀을 위한 교육에 초기 투자합니다.
- 전 기업에 거버넌스를 구축합니다. 툴과 벤더가 Kubernetes 오케스트레이션에 맞게 조정되고 통합되도록 합니다.
- 이미지 스캐닝 프로세스를 CI/CD 프로세스의 일부로 통합하고 구축 및 실행 단계에서 스캐닝하여 보안을 강화합니다. Github 저장소에서 가져온 오픈 소스 코드는 항상 의심의 여지가 있는 것으로 간주해야 합니다.
- 클러스터 전반에 역할 기반 액세스 제어(RBAC)를 도입하십시오. 최소 권한, 제로 트러스트 모델이 표준이 되어야 합니다.
- 비 루트 사용자만 사용하고 파일 시스템을 읽기 전용으로 설정하여 컨테이너 보안을 강화합니다.
- 단순한 선언은 오류 발생 가능성이 적고 의도를 더 명확하게 보여 주므로기본값 사용을 피합니다.
- 멀웨어를 포함하고 있거나 불필요한 코드로 인해 확장될 수 있는기본 Docker Hub 이미지를 사용할 때 주의하십시오. 간결하고 깨끗한 코드로 시작하여 패키지를 구축하세요. 작은 이미지는 더 빠르게 구축되고 디스크 크기가 작으며 이미지 가져오기 또한 더 빠릅니다.
- 컨테이너를 간소화합니다. 컨테이너당 하나의 프로세스를 통해 Orchestrator는 해당 하나의 프로세스의 상태가 양호한지 보고합니다.
- 확실하지 않은 경우 충돌합니다. Kubernetes는 장애가 발생한 컨테이너를 재시작하므로 실패 시 재시작하지 마십시오.
- 세부 정보를 표시합니다. 설명 라벨은 현재 개발자에게 도움이 되며 해당 개발자들의 발자취를 따라가는 데 매우 유용합니다.
- 마이크로 서비스를 너무 세분화하지 마십시오. 논리적 코드 구성 요소 내의 일부 기능에는 마이크로 서비스가 필요한 것은 아닙니다.
- 필요한 경우 자동화를 수행하십시오. CI/CD 파이프라인을 자동화하면 수동 Kubernetes 배포를 완전히 피할 수 있습니다.
- 포드 수명주기를 관리하려면 LivenessProbe 및 readinessProbe를 사용합니다. 그러지 않으면 포드가 초기화되는 동안 종료되거나 준비되기 전에 사용자 요청을 받을 수 있습니다.
Kubernetes 아키텍처는 간단하고 직관적입니다. 컨트롤 플레인과 노드 간의 느슨한 결합으로 인해 거의 무한한 유연성과 애플리케이션이 거의 즉시 수평 확장하여 변화하는 요구 사항을 충족하고, 사용자를 새로 구축한 곳으로 마이그레이션하고, 온프레미스에서 클라우드 기반 노드 또는 각 클라우드 공급업체에서 원하는 기능을 활용할 수 있도록
관련 솔루션 및 제품
Kubernetes를 사용한 애플리케이션 현대화
기존 애플리케이션과 최신 애플리케이션을 동시에 실행할 수 있습니다.
Horizon Cloud on Microsoft Azure
클라우드 네이티브 가상 데스크톱 플랫폼