클러스터 액세스

KubernetesBeginner
지금 연습하기

소개

Kubernetes 는 컨테이너 오케스트레이션 시스템입니다. 클러스터 전체에서 컨테이너화된 애플리케이션의 스케줄링, 실행, 외부 공개 및 복구 방식을 관리합니다.

Kubernetes 클러스터와 상호 작용할 때는 일반적으로 kubectl을 사용합니다. 애플리케이션을 배포하기 전에 실행 중인 클러스터와 해당 클러스터를 올바르게 가리키는 클라이언트 구성이 필요합니다.

이 실습에서는 Kubernetes 클러스터에 액세스하기 위한 기본 설정 단계를 진행합니다. 로컬에서 단일 노드 Kubernetes 클러스터를 실행하는 도구인 Minikube를 사용합니다. Minikube 는 학습과 개발에 적합합니다.

다음 작업을 수행합니다.

  1. 로컬 Kubernetes 클러스터를 시작합니다.
  2. 올바른 클러스터를 대상으로 하는지 확인하기 위해 kubectl 컨텍스트를 확인합니다.
  3. 클러스터의 기본 정보를 조회합니다.
  4. 클러스터의 노드를 나열하여 상태를 확인합니다.

클러스터 시작

이 단계에서는 Minikube 를 사용해 로컬 Kubernetes 클러스터를 시작합니다. Minikube 는 로컬 컴퓨터에 가상 머신이나 컨테이너를 만들고 그 안에 간단한 클러스터를 배포합니다. 따라서 클라우드 공급자 없이도 Kubernetes 명령을 연습할 수 있습니다.

이 단계에서는 다음 세 가지 개념을 명확히 구분해야 합니다. 클러스터는 전체 Kubernetes 환경입니다. 노드는 클러스터 내부의 컴퓨터입니다. 컨트롤 플레인은 API 요청을 수락하고 수행할 작업을 결정하는 부분입니다. Minikube 는 이러한 구성 요소를 하나의 로컬 학습 환경으로 묶어 제공하므로, 클라우드 인프라를 다루기 전에 Kubernetes 개념에 집중할 수 있습니다.

먼저 프로젝트 디렉터리에 있는지 확인합니다.

cd ~/project

이제 Minikube 클러스터를 시작합니다. 이 실습 환경과 호환되도록 docker 드라이버를 지정하여 Docker 컨테이너 안에서 클러스터를 실행합니다.

minikube start --driver=docker

필요한 Kubernetes 이미지를 다운로드하고 컨트롤 플레인을 시작하므로 이 과정은 몇 분 정도 걸릴 수 있습니다. Minikube 가 이미지를 가져오고 컨테이너를 시작하며 클러스터를 구성하는 내용이 출력됩니다.

명령이 완료되면 Minikube 가 올바르게 실행 중인지 확인합니다.

minikube status

출력에서 host, kubelet, apiserver의 상태가 "Running"으로 표시되어야 합니다.

컨텍스트 확인

이 단계에서는 kubectl 명령줄 도구가 새 Minikube 클러스터와 통신하도록 구성되어 있는지 확인합니다.

Kubernetes 는 일반적으로 ~/.kube/config에 있는 구성 파일에 클러스터 액세스 정보를 저장합니다. 이 파일에는 여러 클러스터의 정보가 포함될 수 있습니다. "컨텍스트"는 kubectl이 명령을 전송할 클러스터를 결정합니다. 이전 단계에서 Minikube 를 시작하면 구성 파일이 자동으로 업데이트되고 컨텍스트가 minikube로 설정됩니다.

이 개념이 중요한 이유는 kubectl이 클라이언트일 뿐이기 때문입니다. kubectl 자체가 클러스터를 "포함"하는 것은 아닙니다. 연결 정보, 인증서 및 현재 선택된 컨텍스트를 읽은 다음 Kubernetes API 서버로 요청을 전송합니다. 실제 업무에서는 개발, 스테이징, 프로덕션 클러스터 사이를 전환하는 경우가 많으므로 현재 컨텍스트를 확인하는 것은 형식적인 절차가 아니라 안전을 위한 습관입니다.

현재 컨텍스트를 확인하려면 다음 명령을 실행합니다.

kubectl config current-context

출력은 다음과 같아야 합니다.

minikube

클러스터 서버 URL 과 사용자 인증서 (민감한 정보는 안전하게 숨겨짐) 를 포함한 전체 구성 정보를 확인하려면 다음 명령으로 구성을 조회할 수 있습니다.

kubectl config view

이 결과는 이후에 실행하는 모든 kubectl 명령이 로컬 Minikube 클러스터를 대상으로 실행된다는 것을 확인해 줍니다.

클러스터 정보 확인

이 단계에서는 연결 상태를 확인하고 Kubernetes 컨트롤 플레인이 실행 중인 위치를 확인하기 위해 클러스터의 기본 정보를 조회합니다.

cluster-info 명령은 kubectl이 API 서버와 정상적으로 통신할 수 있는지 확인하는 간단한 방법입니다.

Kubernetes 는 API 를 기반으로 동작하는 시스템입니다. Pod 생성부터 Deployment 확장까지 거의 모든 작업이 컨트롤 플레인에 대한 API 요청으로 처리됩니다. 따라서 "내 클라이언트가 API 서버에 연결할 수 있는가?"를 확인하는 것은 클러스터를 점검할 때 가장 먼저 수행하는 상태 확인 중 하나입니다.

다음 명령을 실행합니다.

kubectl cluster-info

다음과 비슷한 출력이 표시됩니다.

Kubernetes control plane is running at https://127.0.0.1:32769
CoreDNS is running at https://127.0.0.1:32769/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

IP 주소와 포트는 다를 수 있지만, 핵심은 "Kubernetes control plane is running"이라는 메시지가 표시되는 것입니다. 이 메시지는 클라이언트 (kubectl) 가 서버 (클러스터) 에 정상적으로 연결되었음을 확인해 줍니다.

노드 나열

이 단계에서는 클러스터의 노드를 확인합니다. 노드는 Kubernetes 에서 애플리케이션을 실행하는 가상 또는 물리적 작업 머신입니다. Minikube 를 사용하므로 컨트롤 플레인과 작업자 역할을 모두 수행하는 단일 노드가 표시됩니다.

대규모 클러스터에서는 이러한 역할을 분리하는 경우가 많습니다. 컨트롤 플레인 노드는 오케스트레이션에 집중하고, 작업자 노드는 애플리케이션 워크로드를 실행합니다. Minikube 는 학습 환경을 단순하게 유지하기 위해 두 역할을 하나의 노드로 통합합니다. 하지만 명령 출력에는 프로덕션 환경에서 보게 될 것과 동일한 개념이 나타납니다.

클러스터의 모든 노드를 나열하려면 get nodes 명령을 사용합니다.

kubectl get nodes

다음과 비슷한 출력이 표시됩니다.

NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   5m20s   v1.26.1

각 열의 의미는 다음과 같습니다.

  • NAME: 노드 이름입니다 (이 예에서는 minikube).
  • STATUS: 노드 상태입니다. Ready이면 노드가 정상이며 워크로드를 수락할 준비가 되었음을 의미합니다.
  • ROLES: 노드의 역할을 표시합니다 (예: control-plane).
  • AGE: 노드가 실행된 시간입니다.
  • VERSION: 노드에 설치된 Kubernetes 버전입니다.

상태가 NotReady이면 일반적으로 노드가 아직 시작 중이거나 네트워크 문제가 있다는 뜻입니다. 현재 상태가 Ready이므로 클러스터가 정상적으로 작동하고 있습니다.

요약

이 실습에서는 Kubernetes 클러스터에 액세스할 수 있도록 환경을 성공적으로 구성했습니다. 다음 작업을 수행했습니다.

  1. Minikube를 사용해 로컬 Kubernetes 클러스터를 시작했습니다.
  2. 로컬 클러스터를 대상으로 하도록 kubectl 컨텍스트가 올바르게 설정되었는지 확인했습니다.
  3. API 서버와의 연결을 확인하기 위해 클러스터 정보를 조회했습니다.
  4. 클러스터 인프라가 준비되었고 정상인지 확인하기 위해 노드를 나열했습니다.

이는 Kubernetes 에 애플리케이션을 배포하기 전에 필요한 기본 단계입니다. 이제 Kubernetes 학습을 계속 진행할 수 있는 작동하는 로컬 환경이 준비되었습니다.