Kubernetes는 컨테이너화된 애플리케이션을 관리하기 위한 플랫폼입니다. 컨테이너화된 애플리케이션의 배포, 확장, 구성 방식을 제어 및 관리할 수 있는 API를 제공합니다. Kubernetes는 온프레미스 및 클라우드 양쪽 모두에서 사용할 수 있으며, 현재 가장 널리 사용되는 컨테이너화된 애플리케이션 관리 플랫폼입니다.
Kubernetes의 가장 큰 장점 중 하나는 애플리케이션 확장 기능입니다. Kubernetes는 CPU 활용도, 메모리 사용량 및 기타 메트릭에 기반하여 자동으로 애플리케이션을 확장할 수 있습니다. 따라서 애플리케이션의 가용성이 지속적으로 유지되고, 언제든 사용자의 요구 사항에 대응할 수 있습니다.
Kubernetes는 Docker 컨테이너를 관리하고 오케스트레이션할 수 있는 강력한 도구입니다. Kubernetes를 사용하여 애플리케이션 실행에 필요한 모든 요소들이 포함된 독립형 환경을 생성할 수 있습니다. 각 환경은 애플리케이션, 종속 파일, 라이브러리, 구성 파일 등으로 구성됩니다.
또한 Kubernetes는 필요에 따라 애플리케이션을 확장 또는 축소하여 애플리케이션의 효율적 실행을 위한 리소스를 지속적으로 확보할 수 있도록 지원합니다. 또한 Kubernetes는 Docker 컨테이너를 간편하게 관리할 수 있는 다양한 기능을 제공합니다(예: 롤링 업데이트, 건전성 검사).
Kubernetes는 애플리케이션 관리를 위한 다양한 리소스, 서비스, 도구를 제공합니다. 개중 가장 많이 사용되는 옵션 중 일부에 대한 설명이 하단에 기재되어 있습니다.
Kubernetes에는 로드 밸런서를 비롯한 다양한 용도로 사용되는 Ingress라는 리소스가 있습니다. Ingress를 통해 로드 밸런싱을 수행하면 일련의 포드(pod)로 트래픽을 분산하고, 단일 서비스 형식으로 노출시킬 수 있습니다. 결과적으로 애플리케이션의 가용성 및 성능이 모두 향상됩니다.
로드 밸런서는 수신하는 각 요청의 헤더를 검사하는 방식으로 작동합니다. 로드 밸런서는 요청의 대상 및 정의되어 있는 규칙을 기반으로 포드를 선택합니다. 이후 요청을 선택한 포드로 전달합니다.
또한 로드 밸런서는 건전성 검사 기능을 지원합니다. 따라서 로드 밸런서가 요청을 보내기 전 대상 포드가 충족해야 하는 일련의 조건을 사용자가 직접 지정할 수 있습니다. 포드가 요구 사항을 충족하지 못하는 경우, 로드 밸런서가 해당 포드로의 요청 전송을 멈춥니다.
또한 로드 밸런서를 사용하여 요청의 소스 IP 주소를 기반으로 트래픽을 라우팅할 수도 있습니다. 이는 사용자의 애플리케이션에 대한 특정 소스로부터의 액세스를 제한하고자 하는 경우 유용한 기능입니다.
Kubernetes 네트워킹은 포드 및 서비스를 생성하여 구성합니다. 포드(pod)는 함께 배포되고 네트워크 네임스페이스 및 IP 주소를 공유하는 한 개 이상의 컨테이너로 구성된 그룹입니다.
포드 내의 컨테이너들은 localhost를 사용하여 서로 통신할 수 있습니다.
서비스들은 하나 이상의 포드를 외부로 노출시키기 위해 사용됩니다. 서비스들은 로드 밸런서 형식으로 구현되고, 다수의 포드를 대상으로 트래픽을 로드 밸런싱할 수 있습니다.
Kubernetes 스케줄러는 Kubernetes 시스템의 매우 중요한 요소입니다. 스케줄러는 포드에 리소스를 할당하고, 그 성공적인 실행을 보장합니다.
스케줄러는 각 포드별로 우선 순위를 지정하고, 포드를 수용하기에 충분한 리소스가 있는 노드를 찾습니다. 리소스가 부족한 경우 스케줄러는 우선 순위가 높은 포드를 수용할 노드를 먼저 지정합니다. 또한 스케줄러는 노드를 지정할 때 각 포드별로 서로 다른 우선 순위들을 함께 고려합니다. 일반적으로 노드에 포드를 지정할 때는, 우선 순위가 가장 낮은 노드부 사용하여 중단 및 선점을 최소화합니다. 리소스가 충분한 노드가 없는 경우, 스케줄러는 적절한 노드가 사용 가능해질 때까지 기다립니다.
또한 스케줄러는 구에 실패한 포드를 재구동시키는 역할도 수행합니다. 특정 포드가 구동에 실패한 경우, 스케줄러는 계속해서 해당 포드를 새로운 노드에 배정합니다. 결과적으로 모든 포드들이 성공적 구에 필요한 리소스에 액세스할 수 있게 됩니다.
Kubernetes 자동 스케일링은 CPU 활용률 및 기타 메트릭에 기반하여 자동으로 포드를 확장 또는 축소할 수 있는 탁월한 기능입니다. 자동 스케일링을 통해 클러스터 내의 포드 수를 최적화하고, 애플리케이션의 성능 및 안정성을 향상시킬 수 있습니다.
Kubernetes 자동 스케일링에는 수평 및 수직의 두 가지 종류가 있습니다.
수평 자동 스케일링은 클러스터에 노드를 추가하거나 제거하여 포드를 확장 또는 축소합니다. 반면 수직 자동 스케일링은 개별 포드의 CPU 또는 메모리 제한을 변경하여 포드를 확장 또는 축소합니다.
Kubernetes 자동 스케일링은 트리거 확장 및 정책 확장이라는 두 가지 개념을 기반으로 합니다. 확장 모티베이션이란 Kubernetes가 사용자의 포드를 확장 또는 축소하도록 만드는 조건을 의미합니다. 확장 정책이란 확장 트리거 발생시 Kubernetes가 수행하는 작업을 말합니다.
DNS는 '도메인 네임 시스템'의 약자로서, 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 사용하는 숫자 IP 주소로 변환하는 데 사용되는 시스템입니다. Kubernetes는 DNS를 사용하여 서비스를 관리합니다. Kubernetes의 각 서비스에는 고유한 DNS 이름이 할당되어 있습니다. 사용자가 새로운 서비스를 생성하면, Kubernetes는 해당 서비스와 관련된 DNS 레코드를 생성합니다. DNS 레코드에는 서비스의 IP 주소 및 포트 번호가 포함됩니다. Kubernetes는 해당 정보를 참고하여 서비스로 트래픽을 라우팅합니다.
각 서비스의 DNS 이름은 다음과 같이 두 부분으로 구성됩니다.
도메인 이름은 해당 도메인 내의 모든 서비스가 활용하는 DNS 이름의 일부입니다. 서비스 이름은 각 서비스별 고유 DNS 이름의 일부입니다.
Kubernetes를 사용하는 기업들은 Oracle Container Engine for Kubernetes를 통해 클라우드 전용 애플리케이션 개발 프로세스를 간소화하고, 예산을 절감할 수 있습니다. Oracle Cloud Infrastructure(OCI)의 일부인 Oracle Container Engine for Kubernetes는 추가 비용 없이 사용 가능한 강력한 기능들을 선사합니다. 무료 Oracle Cloud Infrastructure(OCI) 체험 프로그램을 통해 지금 바로 해당 기능들을 사용해 보세요.