Kubernetes는 컨테이너형 애플리케이션을 관리하기 위한 이식성이 뛰어난 오픈 소스 컨테이너 오케스트레이션 시스템 또는 플랫폼을 설명하는 용어입니다.
Kubernetes(K8s 또는 "Kube"라고도 함)를 이해하려면 먼저 컨테이너 오케스트레이션을 이해하는 것이 중요합니다. 컨테이너 아키텍처는 애플리케이션을 구성하는 다양한 서비스를 물리적 또는 가상 머신으로 이루어진 클러스터 전반에 배포되는 별도의 패키지형 컨테이너로 나눕니다. 컨테이너 아키텍처의 부상으로 컨테이너 오케스트레이션도 필요해졌습니다. 컨테이너 오케스트레이션은 이러한 컨테이너의 배포, 확장, 네트워킹 및 가용성을 관리하고 자동화하는 도구입니다.
Kubernetes는 컨테이너 프로세스의 구성과 배포를 관리하고 자동화하는 컨테이너 오케스트레이션 시스템입니다. Google에서 시작된 Kubernetes는 2014년에 오픈 소스로 공개되었습니다. 그 이후로 Kubernetes는 거의 제약 없이 누구나 사용할 수 있게 되었습니다.
Kubernetes의 인기가 높아진 이유는 Kubernetes가 제공하는 이점 때문입니다. 여기에서는 Kubernetes의 3가지 이점을 소개합니다.
자동화는 비즈니스 프로세스에서 점점 더 중요한 부분으로 되고 있습니다. 더 많은 프로세스를 자동화하면 효율성과 생산성이 높아지므로 직원들은 더 중요한 작업에 집중할 수 있습니다. Kubernetes를 통해 기업은 컨테이너 아키텍처와 관련된 일상적인 작업을 자동화할 수 있으므로 시간을 더 효율적으로 사용할 수 있습니다. 또한 작업을 자동화할 경우 인적 오류가 발생할 가능성이 없어지므로 정확성이 향상됩니다. 작업 자동화는 강력한 도구입니다.
개발자의 시간은 중요합니다. 기업은 우선순위가 낮은 작업을 도구가 처리하도록 하고 개발자가 가장 중요한 작업에 집중할 수 있도록 할 때 이점을 누리게 됩니다. Kubernetes를 통해 인프라를 추상화하면 Kubernetes는 컴퓨팅, 네트워킹, 스토리지를 관리할 수 있습니다. Kubernetes는 개발자가 애플리케이션 자체에 집중할 있도록 이러한 작업과 아키텍처를 관리합니다.
Kubernetes는 각 컨테이너가 제대로 작동하는지 확인하기 위해 개발자 대신 상태 검사를 실행합니다. 또한 시스템은 중단되거나 장애가 발생한 컨테이너를 자동으로 다시 시작할 수 있습니다. 컨테이너의 상태를 관리하는 것도 중요하지만, Kubernetes는 완벽하게 작동하고 실행되는 서비스만 사용자에게 제공합니다. 작동하지 않는 서비스는 Kubernetes가 재설정할 때까지 사용자가 볼 수 없습니다.
Kubernetes는 많은 개발자에게 친숙한 Kubernetes 고유의 여러 아키텍처 요소를 사용합니다. 알아두어야 할 몇 가지 일반적인 Kubernetes 용어는 다음과 같습니다.
Kubernetes 계층 구조의 최상위에는 클러스터가 있습니다. 클러스터는 Kubernetes를 실행하는 여러 시스템과 Kubernetes가 관리하는 모든 컨테이너를 뜻합니다. Kubernetes에서 클러스터에는 클러스터 내 다른 모든 시스템을 제어하는 마스터 또는 시스템이 있습니다. 한 번에 하나의 마스터만 스케줄러와 컨트롤러 관리자를 실행할 수 있습니다.
각 Kubernetes 클러스터에는 계층 구조의 다음 수준인 노드가 포함되어 있습니다. 노드는 물리적 시스템 자체 또는 VM일 수 있습니다. Kubernetes는 이러한 노드 내에서 애플리케이션의 배포를 처리합니다. Kubernetes가 어떤 애플리케이션을 기반으로 실행되든 상관없습니다.
노드에는 포드가 있고 노드는 포드를 실행합니다. 포드는 Kubernetes에서 생성하고 관리할 수 있는 가장 기본적인 객체입니다. 각 포드는 Kubernetes에서 실행되는 애플리케이션의 단일 인스턴스를 나타내며 하나 이상의 컨테이너를 포함합니다. Kubernetes는 포드 내에서 컨테이너의 모든 프로세스를 시작, 중지, 복제합니다. 포드를 사용하면 사용자에게는 컨테이너가 아닌 애플리케이션 자체만 표시됩니다.
포드는 사용자의 요청에 따라 노드 내에서 생성되고 제거됩니다. 포드 관리의 복잡성 때문에 Kubernetes는 컨트롤러를 사용하여 포드를 생성, 스핀아웃 및 제거합니다.
Kubernetes 서비스를 사용하면 백엔드 포드를 지속적으로 변경할 수 있는데, 이때 프론트엔드는 변경 사항을 추적하지 않고 계속해서 사용자 경험을 제공합니다. 서비스는 네트워크를 통해 포드 그룹에 액세스하는 방법을 의미합니다. 포드에 액세스하는 방법을 제어하면 백엔드에서 포드가 생성되고 삭제되는 경우에도 애플리케이션의 일관성이 유지됩니다.
정책은 포드가 시스템 내에서 할 수 있는 작업과 할 수 없는 작업을 결정합니다. Kubernetes 정책은 포드가 차지하는 CPU, 메모리 또는 디스크 공간의 양을 제한하여 과도한 사용을 방지할 수 있습니다. 정책 내 한계는 제한 대상에 따라 다릅니다. 메모리의 경우 정책은 100MB와 같이 절대적 표현을 사용합니다. CPU의 경우에는 50%와 같은 상대적 표현으로 한계를 말합니다.
Kubernetes를 설정하고 작동시키는 것은 중요한 작업입니다. Kubernetes를 설정한 후에 개발자는 외부에서 클러스터에 액세스해야 합니다. 이를 위해 여러 도구를 사용할 수 있지만 가장 유연한 도구는 인그레스입니다. 인그레스는 HTTP를 통해 클러스터에 대한 외부 액세스를 관리하는 API입니다. 인그레스는 설정이 복잡하지만, 일단 설정되면 외부에서 클러스터의 서비스에 액세스할 수 있는 간단하면서도 강력한 방법을 제공합니다.
다른 모든 Kubernetes 구성요소를 설정했으면 이 모든 구성요소를 관리할 수 있는 방법이 필요합니다. Kubernetes 대시보드는 개발자가 모든 클러스터 리소스의 문제를 해결하고 관리할 수 있는 웹 기반 UI입니다. 대시보드는 자동으로 설치되지 않으므로 별도로 설치해야 하지만, 일단 설치하면 설정과 사용이 간편합니다.
회사에는 보안을 유지해야 하는 정보가 있습니다. Kubernetes에는 중요한 정보에 대한 보안을 강화하도록 설계된 기능이 있습니다. Kubernetes 시크릿은 특수한 유형의 컨테이너로, Kubernetes는 시크릿을 중요한 것으로 간주하며 이에 대한 액세스를 제한합니다.
시크릿은 필요에 따라 클러스터의 포드가 액세스할 수 있지만 보안 위험을 높일 수 있는 다른 모든 가시성으로부터 보호됩니다. 기본적으로 시크릿은 정보에 액세스할 수 있는 사용자를 제한하지 않습니다. 대신 해당 데이터에 대한 무제한 액세스 없이 작동하는 데 필요한 데이터만 애플리케이션에 제공합니다.
Kubectl은 클러스터에서 작업을 관리하기 위한 명령줄 인터페이스입니다. 이 CLI는 Kubernetes API와 통신합니다. Kubectl을 사용하기 위한 표준화된 구문은 kubectl [command] [TYPE] [NAME] [flags]입니다.
경우에 따라 소형 장치에서 Kubernetes에 액세스해야 할 때가 있는데, 이때 Minikube를 사용하면 액세스가 가능합니다. Minikube는 누군가가 노트북이나 다른 로컬 컴퓨터에서 Kubernetes를 실행할 수 있게 해주는 오픈 소스 도구입니다. Minikube는 Kubernetes의 크기와 복잡성을 단일 노드 클러스터로 축소합니다. Minikube를 사용하면 개발자는 물론 IT 직원과 최고 경영진까지 편리한 장치에서 강력한 Kubernetes 기능을 사용할 수 있습니다. Minikube는 kubectl가 설치된 상태에서 가장 잘 작동합니다.
Kubernetes는 주로 애플리케이션을 생성, 관리, 배포하도록 설계되었습니다. 이를 위해 Kubernetes는 어떻게 작동할까요? 개발자가 Kubernetes를 설정하고, 클러스터를 정의하고, 노드를 생성합니다. 그리고 이러한 작업이 완료되면 Kubernetes는 필요에 따라 포드를 생성하고 제거하여 사용자 대신 애플리케이션을 적절하게 실행합니다. Kubernetes에 액세스하고 관리하지 위해 개발자는 Minikube를 사용하여 로컬 시스템에 액세스하거나 인그레스를 사용하여 외부에서 액세스하거나 대시보드를 사용하여 다른 도구에 액세스할 수 있습니다.
Kubernetes를 사용해 기업은 무엇을 할 수 있을까요? 다음은 Kubernetes로 달성할 수 있는 몇 가지 주요 목표입니다.
- 여러 호스트에서 컨테이너 오케스트레이션
- 애플리케이션 확장
- 애플리케이션의 상태 확인
- 배포 제어 및 자동화
- 프로세스 실행을 위한 스토리지 관리 및 추가
- 엔터프라이즈 애플리케이션을 실행하기 위한 하드웨어 공간 최대화
- 어디서나 애플리케이션 배포
- 개발 속도 향상
Kubernetes와 자주 비교되는 프로젝트는 여러 가지가 있습니다. 이러한 프로젝트는 각각 개발자를 위해 서로 다른 작업을 수행할 수 있는 별개의 프로젝트이지만, Kubernetes와 혼동되거나 정반대의 옵션으로 여겨지는 경우가 많습니다. 그러나 이러한 프로젝트는 Kubernetes와 호환됩니다.
Docker는 Kubernetes 이전에 등장했으며 Kubernetes 개발에도 기여했습니다. Docker는 개발자가 애플리케이션을 실행하는 데 필요한 모든 것을 필요할 때 저장하고 열 수 있는 "상자"에 넣을 수 있는 도구입니다. Docker는 컨테이너를 만드는 방법입니다. 그러나 애플리케이션이 "상자"에 저장되면 이러한 컨테이너를 관리하여 올바른 컨테이너를 저장하고 열 수 있도록 하는 방법이 필요합니다.
바로 이러한 이유로 Kubernetes가 개발되었습니다. Kubernetes는 Docker가 생성하는 것과 같은 컨테이너 애플리케이션을 구성하고 관리하는 도구로 설계되었습니다. Kubernetes는 'Captain(선장)'을 의미하는 그리스어인데, Kubernetes가 컨테이너를 올바른 지점으로 안내하도록 설계되었기 때문입니다.
Kubernetes와 Docker는 서로 경쟁하지 않습니다. 둘 다 컨테이너 기반 애플리케이션을 관리하는 고유의 역할을 제공하므로 Kubernetes는 Docker와 함께 또는 Docker 없이 사용할 수 있습니다. 그러나 함께 사용할 경우 강력한 효과를 발휘합니다. Kubernetes는 Docker를 사용하여 컨테이너 기반 애플리케이션을 배포하고 관리할 수 있습니다.
Mesos는 Kubernetes와 자주 비교되는 또 다른 프로젝트입니다. Mesos는 Google Borg에 대응하기 위해 생성된 Apache 프로젝트입니다. Mesos는 컨테이너 오케스트레이션 서비스도 제공하지만 컨테이너형 구성요소 외에도 비컨테이너형 구성요소를 실행할 수 있는 프로그램으로 설계되었습니다. 적용 범위가 넓기 때문에 Kubernetes를 포함한 많은 프로그램이 Mesos 내에서 실행됩니다.
일반적으로 Kubernetes의 채택은 회사의 애플리케이션 환경을 클라우드로 전환하거나, 새로운 애플리케이션과 서비스를 제공하여 "클라우드 네이티브"로 전환하기 위한 더 큰 프로그램의 일부입니다. ServiceNow는 회사가 변경 관리, 관찰성, 클라우드 관리와 같은 올바른 Kubernetes 접근 방식을 찾는 데 도움이 되도록 이러한 변환을 지원하는 여러 연결 고리를 갖고 있습니다.
Kubernetes의 채택은 DevOps와 같은 최신 개발 관행과 함께 진행됩니다. 규모가 크고 규제가 엄격한 조직은 여전히 클라우드에서 업데이트 릴리스 프로세스의 일부로 거버넌스에 집중해야 합니다. 그러나 다양한 별개의 구성요소와 컨테이너 기반 아키텍처에서 코드 전달의 속도 및 일시적인 특성과 같은 추가적인 복잡성이 발생합니다.
ServiceNow는 ServiceNow에서 관리되는 작업과 서비스를 개발 프로세스에 연결하여 자동화된 변경 관리, 엔드 투 엔드 KPI 및 플로우 메트릭 통찰력, 감사를 지원합니다. 또한 DevOps Config라는 ITSM Pro의 특정 구성요소를 사용하여 특히 Kubernetes 구현으로 회사에 이점을 제공하는 클라우드에서 서비스를 제공할 때 발생하는 다양한 구성 활동에 대한 제어력과 통찰력을 강화합니다.
Kubernetes는 애플리케이션의 기능과 회사가 컨테이너 기반 애플리케이션을 관리하는 방식을 개선하기 위해 노력합니다. 그러나 조직은 성공적으로 운영하는 데 필요한 관찰성을 갖추는 과정에서 몇 가지 문제에 직면합니다. ServiceNow 클라우드 식별 가능성은 조직이 Kubernetes를 간편하게 구현할 수 있도록 지원하는 프로세스와 구성에 대한 관찰성과 통찰력을 제공합니다.
클라우드를 사용하는 조직이 갈수록 늘어남에 따라 클라우드 관리 기능을 갖추는 것이 중요해졌습니다. ServiceNow의 IT Operations Management는 이를 가능하게 하는 동시에 Kubernetes를 구현하는 데 도움을 줄 수 있습니다.
ITOM에 대해 자세히 알아보고 회사에서 Kubernetes를 구현하고 활용하여 애플리케이션을 관리하는 데 ITOM이 어떤 도움을 줄 수 있는지 알아보세요.