Kubernetes Engine
카카오 i 클라우드(Kakao i Cloud)의 Kubernetes Engine은 VPC 기반의 관리형 Kubernetes 서비스로, 오픈소스 컨테이너 오케스트레이션 기술인 Kubernetes를 기반으로 합니다. Kubernetes Engine 서비스를 통해 복잡한 절차 없이 손쉽게 Kubernetes에서 사용하는 명령어와 리소스를 그대로 사용하여 애플리케이션을 생성하고 배포하거나 관리할 수 있습니다.
표 Kubernetes Engine 서비스 콘셉트
서비스 콘셉트 | 설명 |
---|---|
간편한 클러스터 관리 | Kubernetes 클러스터를 효율적으로 관리하기에 최적화된 메뉴 구성, 기능과 노드 풀을 이용한 노드 그룹 관리 기능을 제공 - VM 서비스와의 긴밀한 연계로 다양한 VM 플레이버를 지원하고 손쉬운 인스턴스 관리 가능 |
다양한 서비스팩 연동 | 카카오 i 클라우드의 다른 Container Pack 서비스와 연동 지원 - Container Registry와 함께 사용할 수 있으며, 내 클러스터에 컨테이너 이미지를 간단하게 배포 가능 |
안전한 서비스 환경 | 사용자의 VPC 환경에 노드를 배포하는 방식으로 논리적으로 분리된 사용자 네트워크에서 안전하게 클러스터를 운영 가능 - 클러스터의 제어 영역은 완전 관리되며, 별도 운영 작업이 필요하지 않음 |
RBAC 기반 권한 관리 | 역할 기반 접근 제어(RBAC)를 기반으로 프로젝트 권한을 가진 사용자가 프로젝트와 프로젝트 내 클러스터 리소스를 관리할 수 있도록 지원 - 목적과 역할에 맞게 클러스터를 구분 가능 |
주요 개념
Kubernetes Engine 서비스의 주요 개념은 다음과 같습니다.
클러스터
클러스터는 Kubernetes Engine의 기본 리소스로, 컨테이너 애플리케이션을 포함한 모든 Kubernetes 객체가 클러스터에서 실행됩니다. Kubernetes Engine에서 제공하는 클러스터는 고가용성이 보장된 형태로, 카카오엔터프라이즈가 관리하는 VPC에 배포되어 관리되는 제어 영역(Control Plane)과 사용자의 VPC에 배포되어 사용자가 직접 관리할 수 있는 노드로 구성되어 있습니다. Kubernetes Engine의 클러스터 아키텍처는 다음과 같습니다.
이미지 클러스터 아키텍처
제어 영역
제어 영역은 클러스터를 관리하는 마스터 노드로 클러스터의 통합 엔드포인트 역할을 합니다. 클러스터와의 모든 상호작용은 제어 영역에 있는 Kubernetes API 서버에서 API를 호출을 통해 이루어집니다. HTTP, gRPC 프로토콜 혹은 Kubernetes 커맨드 라인 도구(kubectl)에서 명령어를 실행하거나, 콘솔 UI를 활용해 Kubernetes API 서버와 통신하여 클러스터를 관리할 수 있습니다. 클러스터의 제어 영역은 카카오엔터프라이즈가 관리하는 VPC에 배포되어 관리되며, 사용자에게는 엔드포인트만 노출됩니다.
노드
컨테이너 애플리케이션이 실행되는 서버를 노드 혹은 워커 노드라고 합니다. 클러스터는 하나 이상의 노드로 구성되며, 이 노드는 Virtual Machine 서비스에서 제공되는 VM 인스턴스입니다. 클러스터 생성 시 Kubernetes Engine은 사용자를 대신하여 노드를 함께 생성합니다. 사용자는 이 노드를 통제할 수 있으며, 노드는 사용자가 직접 지정한 VPC의 단일 서브넷에 배포됩니다.
노드는 컨테이너 애플리케이션을 실행하는데 필요한 리소스와 서비스를 지원하며, 클러스터의 워커 노드 역할을 수행하는 데 필요한 쿠버네티스 노드 에이전트(kubelet)가 포함됩니다. 쿠버네티스 노드 에이전트(kubelet)는 제어 영역과 통신하여 제어 영역이 노드에 컨테이너 스케줄링을 할 수 있도록 합니다.
노드 풀
노드 풀은 동일한 인스턴스 타입을 가지는 노드 그룹이며, Kubernetes Engine에서는 노드를 노드 풀 단위로 관리합니다. 클러스터를 만들 때 생성하는 노드 풀이 최초의 노드 풀이 됩니다. 이후 다른 인스턴스 타입을 가지는 추가 노드 풀을 클러스터에 추가할 수 있습니다. 노드 풀의 각 노드에는 노드 풀의 이름을 값으로 가지는 kakaoi.io/kke-nodepool이라는 Kubernetes 노드 레이블이 설정되어 있습니다.
- 노드 풀 설정에서 노드 수를 조절하여 클러스터에서의 노드 풀 크기를 조절할 수 있으며, 노드 풀에서 특정 노드만 삭제하는 것은 불가능합니다.
- 초기 노드 풀 생성 시 클러스터에 설정된 최신 Kubernetes 버전을 선택합니다. 이후 사용자는 각 노드 풀을 독립적으로 업데이트하고 관리할 수 있습니다.
안내
클러스터는 최소한 한 개 이상의 노드 풀을 유지하여야 합니다.
IAM 역할
Kubernetes Engine의 IAM 역할 관리는 역할 기반 액세스 제어(Role-Based Access Control, RBAC)를 따르며, IAM의 프로젝트 역할과 연계하여 클러스터 리소스를 관리합니다. 따라서 프로젝트 내 권한을 가진 사용자는 프로젝트와 프로젝트 내 클러스터 리소스를 관리할 수 있습니다. 제품 내 모든 리소스는 프로젝트 하위로 생성되어 관리됩니다. 프로젝트 권한은 프로젝트 관리자와 프로젝트 멤버로 구분되며, 프로젝트 권한이 있는 사용자는 하위의 모든 리소스를 생성하고 관리할 수 있습니다.
표 IAM 역할 관리
권한 | 프로젝트 관리자 | 프로젝트 멤버 |
---|---|---|
프로젝트 멤버 관리 | ✓ | |
클러스터 생성 | ✓ | ✓ |
클러스터 삭제 | ✓ | ✓ |
클러스터 설정 | ✓ | ✓ |
노드 풀 추가 | ✓ | ✓ |
노드 풀 삭제 | ✓ | ✓ |
노드 풀 설정 | ✓ | ✓ |
노드 삭제 | ✓ | ✓ |
Kubernetes RBAC
Kubernetes는 클러스터 내에서 세분화된 역할을 만들 수 있는 RBAC 지원 기능을 지원하며, Kubernetes Engine에서도 이 기능을 사용할 수 있습니다. Kubernetes RBAC에 대한 자세한 설명은 Kubernetes 레퍼런스에서 확인하시기 바랍니다.
리소스 상태 정보
Kubernetes Engine에서 상태를 확인할 수 있는 리소스는 클러스터, 노드 풀, 노드입니다. 리소스 별 상태 정보는 다음과 같습니다.
클러스터 생명주기 및 상태
이미지 클러스터의 생명주기
표 클러스터 상태
상태 | 설명 | 분류 |
---|---|---|
Provisioned | 클러스터 프로비저닝 완료 | Green |
Pending | 클러스터 프로비저닝 준비 중 | Yellow |
Provisioning | 클러스터 프로비저닝 중 | Yellow |
Deleting | 클러스터 삭제 중 | Yellow |
Failed | 사용자의 개입이 필요한 실패 상태 | Red |
노드 풀 생명주기 및 상태
이미지 노드 풀 생명주기
표 노드 풀 상태
상태 | 설명 | 분류 |
---|---|---|
Running | 노드 풀 정상 실행 중 (노드 상태와는 무관) | Green |
Running (Scheduling Disable) | 노드 풀의 모든 노드가 스케줄링 차단된 상태 | Green |
ScalingUp | 노드 개수 확장 중 | Yellow |
ScalingDown | 노드 개수 축소 중 | Yellow |
Deleting | 노드 풀 삭제 중 | Yellow |
Failed | 사용자의 개입이 필요한 실패 상태 | Red |
노드 생명주기 및 상태
이미지 노드 생명주기
표 노드 상태
상태 | 설명 | 분류 |
---|---|---|
Running | 노드가 준비되어 실행 중 | Green |
Running (Scheduling Disable) | 해당 노드로 신규 스케줄링 차단된 상태 (이미 할당되어 실행 중인 파드와는 무관) | Green |
Provisioned | 노드 프로비저닝 완료 | Green |
Deleted | 노드 삭제 완료 | Green |
Pending | 노드 프로비저닝 준비 중 | Yellow |
Provisioning | 노드 프로비저닝 중 | Yellow |
Deleting | 노드 삭제 중 | Yellow |
Failed | 사용자의 개입이 필요한 실패 상태 | Red |
클러스터/노드 풀 생성 시 자동 생성 리소스
Kubernetes Engine에서 클러스터 혹은 노드 풀 생성 시 리소스는 자동 생성됩니다. 클러스터 삭제 시 리소스도 같이 삭제됩니다.
표 클러스터/노드 풀 생성 시 자동 생성 리소스
유형 | 설명 |
---|---|
인스턴스 | 노드로 사용되는 VM 인스턴스 |
볼륨 | 노드로 사용되는 VM 인스턴스에서 사용하거나 NFS Client Provisioner로 생성한 모든 볼륨 |
시큐리티 그룹 | 노드에 적용되는 시큐리티 그룹 |
주의
자동 생성된 리소스(인스턴스, 볼륨, 시큐리티 그룹)는 이름 변경, 삭제 등의 설정 정보를 변경할 수 없습니다. 관련 리소스의 정보가 변경되면 Kubernetes Engine 서비스가 정상적으로 제공되기 어려우니, 주의하시기 바랍니다.
리소스 쿼터
Kubernetes Engine에서 지원하는 클러스터, 노드 풀, 노드의 리소스 쿼터 정보는 다음과 같습니다. 쿼터 값을 초과할 경우 신규 리소스 생성이 불가합니다. 쿼터 증설이 필요한 경우 헬프데스크로 문의해주세요.
안내
자동 생성된 리소스(인스턴스, 볼륨, 시큐리티 그룹)의 프로젝트 쿼터가 초과할 경우에도 Kubernetes Engine의 리소스(클러스터, 노드 풀, 노드)를 신규 생성할 수 없습니다.
항목 | 기준 | 쿼터 값 |
---|---|---|
클러스터 | 프로젝트 당 | 10 개 |
노드 풀 | 클러스터 당 | 5 개 |
노드 | 클러스터 당 | 50 개 |
노드 풀 당 | 50 개 |
지원 정보
Kubernetes Engine 서비스에서는 최신 Kubernetes 버전을 안정화 및 테스트 후 업데이트를 제공합니다.
지원 Kubernetes 버전
Kubernetes Engine은 최신 Kubernetes 버전을 안정화 및 테스트 후 제공합니다. 최신 버전 출시 시 Kubernetes Engine > 클러스터 업데이트하기를 참고하여 업데이트하시기 바랍니다.
표 Kubernetes 지원 버전
Kubernetes 버전 | Kubernetes Engine 지원 시작일 | 클러스터 신규 생성 | 생성된 클러스터 사용 |
---|---|---|---|
1.24 | 2023년 2월 1일 | 가능 | 가능 |
1.23 | 2022년 7월 7일 | 가능 | 가능 |
1.22 | 2022년 7월 7일 | 불가능 | 가능 |
지원 노드 이미지
Kubernetes Engine에서 제공하는 워커 노드 이미지는 Ubuntu 기반이며, Kubernetes 버전에 최적화된 OS 이미지를 제공합니다. 최신 노드 이미지 출시 시 노드 업데이트하기를 참고하여 노드 이미지를 업데이트하시기 바랍니다.
지원 인스턴스
Kubernetes Engine에서 노드로 사용할 수 있는 인스턴스는 Virtual Machine 서비스에서 제공하는 인스턴스 타입과 동일합니다. 인스턴스 타입에 대한 자세한 설명은 Virtual Machine > Overview를 참고하시기 바랍니다.
사용 가이드
안내
카카오 i 클라우드의 Kubernetes Engine 서비스에 대한 자세한 사용 가이드는 Kubernetes Engine > How-to Guides를 참고하시기 바랍니다.
가이드 | 설명 |
---|---|
클러스터 만들기 | 클러스터를 생성하는 방법을 설명합니다. |
클러스터 관리하기 | 클러스터 조회, 설정 및 삭제 등 클러스터를 관리하는 방법을 설명합니다. |
클러스터 업데이트하기 | 클러스터를 업데이트하는 방법을 설명합니다. |
노드 관리하기 | 노드 생성, 조회 및 삭제, 복구, 업데이트 등 노드를 관리하는 방법을 설명합니다. |
kubectl 제어 설정하기 | 클러스터를 제어하기 위한 Kubernetes 커맨드 라인 도구인 kubectl 제어 설정 방법을 설명합니다. |
인그레스 컨트롤러 배포하기 | 클러스터에 인그레스 컨트롤러를 설정하는 방법을 설명합니다. |
로드밸런서 생성 및 삭제하기 | 서비스를 위한 로드밸런서를 생성하는 방법을 설명합니다. |
NFS Client Provisioner 설정하기 | 클러스터에 파일 스토리지를 영구 볼륨으로 설정하는 방법을 설명합니다. |
블록 스토리지 CSI Provisioner 설정하기 | 클러스터에 블록 스토리지 영구 볼륨을 설정하는 방법을 설명합니다. |
루트 볼륨 파티션 테이블 형식 변경하기 | 노드의 VM 인스턴스의 루트 볼륨 파트션 테이블 형식을 변경하는 방법을 설명합니다. |