쿠버네티스 클러스터 아키텍처 구축

KubernetesBeginner
지금 연습하기

소개

쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 컨테이너 오케스트레이션 플랫폼입니다. 이번 챌린지에서는 쿠버네티스 클러스터를 구성하는 다양한 요소들과 그들 사이의 상호작용을 포함한 쿠버네티스 아키텍처를 살펴봅니다.

이 콘텐츠는 챌린지 과제입니다. 가이드가 제공되는 실습과 달리, 학습 단계를 따라가는 것이 아니라 스스로 과제를 해결해야 합니다. 챌린지는 다소 난이도가 있을 수 있습니다. 해결이 어렵다면 Labby 와 상의하거나 모범 답안을 확인하세요. 통계에 따르면 이 과제는 초급 수준이며, 통과율은 91%, 학습자 만족도는 100%를 기록하고 있습니다.

쿠버네티스 제어 평면 구성 요소

쿠버네티스 제어 평면 (Control Plane) 은 클러스터의 전체 상태를 관리하며 애플리케이션의 배포와 확장을 담당합니다. 제어 평면의 주요 구성 요소는 다음과 같습니다.

  • kube-apiserver: 쿠버네티스 제어 평면의 프런트엔드로, 클러스터에 대한 모든 관리 요청을 처리합니다.
  • etcd: 쿠버네티스 클러스터의 모든 구성 데이터를 저장하는 분산 키 - 값 저장소입니다.
  • kube-scheduler: 클러스터 내의 노드 중에서 포드를 실행할 적절한 노드를 선택하는 역할을 합니다.
  • kube-controller-manager: 다양한 쿠버네티스 오브젝트의 상태를 관리하는 컨트롤러들을 실행합니다.

과제

제어 평면 구성 요소인 kube-apiserver, etcd, kube-scheduler, kube-controller-manager 의 상태를 조회하고 확인하십시오.

요구 사항

  • kubectl 명령어를 사용하여 제어 평면 구성 요소의 상태를 조회해야 합니다.
  • 명령어는 /home/labex/project 디렉토리에서 실행하십시오.
  • 출력 결과에는 각 제어 평면 구성 요소의 상태가 표시되어야 합니다.

예시

제어 평면 구성 요소의 상태를 조회했을 때의 예상 출력 결과는 다음과 같습니다.

NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok
✨ 솔루션 확인 및 연습

쿠버네티스 노드 구성 요소

쿠버네티스 노드 (Node) 구성 요소는 컨테이너를 실행하고 애플리케이션을 위한 런타임 환경을 제공합니다. 노드의 주요 구성 요소는 다음과 같습니다.

  • kubelet: 노드의 상태를 관리하고 컨테이너가 올바르게 실행되도록 보장하는 노드 에이전트입니다.
  • kube-proxy: 트래픽을 적절한 컨테이너로 전달하는 쿠버네티스 네트워크 프록시입니다.

과제

쿠버네티스 클러스터에서 실행 중인 노드의 이름, 상태 및 기타 관련 세부 정보를 표시하십시오.

요구 사항

  • kubectl 명령어를 사용하여 쿠버네티스 클러스터의 노드 목록을 확인해야 합니다.
  • 명령어는 /home/labex/project 디렉토리에서 실행하십시오.
  • 출력 결과에는 클러스터 내 각 노드에 대한 상세 정보가 포함되어야 합니다.

예시

노드 정보를 표시했을 때의 예상 출력 결과는 다음과 같습니다.

NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   2m52s   v1.26.1
✨ 솔루션 확인 및 연습

쿠버네티스 포드 구성 요소

쿠버네티스 포드 (Pod) 는 쿠버네티스에서 배포할 수 있는 가장 작은 단위로, 클러스터에서 실행되는 프로세스의 단일 인스턴스를 나타냅니다. 각 포드는 동일한 네트워크 네임스페이스와 스토리지 볼륨을 공유하는 하나 이상의 컨테이너로 구성됩니다.

과제

  1. Nginx 컨테이너 설정을 포함한 simple-pod.yaml 파일을 생성하십시오.
  2. 적절한 kubectl 명령어를 사용하여 포드를 배포하십시오.
  3. 쿠버네티스 클러스터에서 실행 중인 포드 정보를 확인하십시오.

요구 사항

  • /home/labex/project 디렉토리에 Nginx 이미지를 사용하는 simple-pod라는 이름의 포드 설정 파일 simple-pod.yaml을 생성하십시오.
  • kubectl 명령어를 사용하여 해당 YAML 파일로부터 포드를 생성하십시오.
  • 또 다른 kubectl 명령어를 사용하여 클러스터에서 실행 중인 포드 목록을 확인하십시오.

예시

포드 생성 및 조회 시의 예상 출력 결과는 다음과 같습니다.

pod/simple-pod created
NAME         READY   STATUS    RESTARTS   AGE
simple-pod   1/1     Running   0          29s
✨ 솔루션 확인 및 연습

쿠버네티스 서비스 구성 요소

쿠버네티스 서비스 (Service) 는 포드 집합과 그 포드들에 접근하기 위한 정책을 정의하는 추상화된 개념입니다. 서비스의 주요 구성 요소는 다음과 같습니다.

  • Service IP: 서비스에 할당된 가상 IP 주소입니다.
  • Service Port: 서비스에 할당된 포트 번호입니다.
  • Endpoint: 서비스 뒤에 있는 포트들을 가리키는 IP 주소와 포트 번호의 목록입니다.

과제

  1. Nginx 포드를 위한 서비스 설정을 포함한 nginx-service.yaml 파일을 생성하십시오.
  2. 적절한 kubectl 명령어를 사용하여 서비스를 배포하십시오.
  3. 쿠버네티스 클러스터에서 실행 중인 서비스 정보를 확인하십시오.

요구 사항

  • /home/labex/project 디렉토리에 80 번 포트를 노출하는 nginx-service라는 이름의 서비스 설정 파일 nginx-service.yaml을 생성하십시오.
  • kubectl 명령어를 사용하여 해당 YAML 파일로부터 서비스를 생성하십시오.
  • 또 다른 kubectl 명령어를 사용하여 클러스터에서 실행 중인 서비스 목록을 확인하십시오.

예시

서비스 정보를 표시했을 때의 예상 출력 결과는 다음과 같습니다.

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP   5m42s
nginx-service   ClusterIP   10.96.184.71   <none>        80/TCP    4s
✨ 솔루션 확인 및 연습

요약

이번 챌린지에서는 제어 평면, 노드, 포드 및 서비스 구성 요소를 포함한 쿠버네티스의 전반적인 아키텍처를 살펴보았습니다. 다양한 구성 요소의 상태를 확인하는 방법, 간단한 포드와 서비스를 생성하는 방법, 그리고 외부 애플리케이션에 포드를 노출하는 방법을 학습했습니다. 쿠버네티스 클러스터를 구성하는 요소들과 그들 간의 상호작용을 이해하는 것은 컨테이너화된 애플리케이션을 배포하고 관리하는 데 있어 매우 중요한 기초가 됩니다.