Kubernetes 리소스 쿼터 관리

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes ResourceQuota 를 사용하여 Kubernetes 클러스터에서 리소스 소비에 대한 제한을 설정하는 방법을 배우게 됩니다. ResourceQuota 를 사용하면 Kubernetes 클러스터의 네임스페이스에 대한 CPU 및 메모리와 같은 리소스 할당을 제어하고 관리할 수 있습니다. 간단한 예제로 시작하여 점차적으로 더 복잡한 시나리오로 진행할 것입니다. 각 단계에서는 코드 예제와 이를 Kubernetes 클러스터에 적용하는 방법에 대한 지침을 제공합니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

ResourceQuota 생성

이 단계에서는 네임스페이스에서 사용할 수 있는 CPU 및 메모리의 양을 제한하는 간단한 ResourceQuota 를 생성합니다. 방법은 다음과 같습니다.

  1. resourcequota.yaml이라는 파일을 만들고 다음 내용을 입력합니다.
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "1"
    memory: "1Gi"

이 ResourceQuota 는 다음과 같은 hard 제한을 설정합니다.

  • CPU: 1 코어
  • 메모리: 1 GiB
  1. kubectl apply 명령을 사용하여 resourcequota.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f resourcequota.yaml
  1. 다음 명령을 실행하여 ResourceQuota 가 성공적으로 생성되었는지 확인합니다.
kubectl describe resourcequota example-resourcequota

출력에서 ResourceQuota 의 세부 정보를 확인할 수 있습니다.

Namespace 에 ResourceQuota 적용

이 단계에서는 Step:Creating a ResourceQuota에서 생성된 ResourceQuota 를 네임스페이스에 적용합니다. 방법은 다음과 같습니다.

  1. namespace.yaml이라는 파일을 만들고 다음 내용을 입력합니다.
apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace

이 네임스페이스 정의는 example-namespace라는 네임스페이스를 생성합니다.

  1. kubectl apply 명령을 사용하여 namespace.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f namespace.yaml
  1. kubectl apply 명령을 사용하여 ResourceQuota 를 example-namespace 네임스페이스에 적용합니다.
kubectl apply -f resourcequota.yaml -n example-namespace
  1. 다음 명령을 실행하여 ResourceQuota 가 네임스페이스에 적용되었는지 확인합니다.
kubectl describe namespace example-namespace

출력에서 네임스페이스에 적용된 ResourceQuota 의 세부 정보를 확인할 수 있습니다.

ResourceQuota 적용 테스트

이 단계에서는 ResourceQuota 에 정의된 리소스 제한을 초과하는 Pod 를 생성하고, ResourceQuota 가 제한을 적용하는지 확인합니다. 방법은 다음과 같습니다.

  1. pod-exceeding-limits.yaml이라는 파일을 만들고 다음 내용을 입력합니다.
apiVersion: v1
kind: Pod
metadata:
  name: example-pod-exceeding-limits
spec:
  containers:
    - name: nginx
      image: nginx
      resources:
        limits:
          cpu: "2"
          memory: "2Gi"

이 Pod 정의는 Step:Creating a ResourceQuota에서 생성된 ResourceQuota 에 설정된 제한을 초과하는 리소스 (CPU: 2 코어, 메모리: 2 GiB) 를 요청하는 컨테이너가 있는 Pod 를 생성합니다.

  1. kubectl apply 명령을 사용하여 pod-exceeding-limits.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f pod-exceeding-limits.yaml

Pod 생성 작업이 거부되는 것을 확인할 수 있습니다. 오류 메시지는 다음과 같습니다: Error from server (Forbidden): error when creating "pod-exceeding-limits.yaml": pods "example-pod-exceeding-limits" is forbidden: exceeded quota: example-resourcequota, requested: cpu=2,memory=2Gi, used: cpu=0,memory=0, limited: cpu=1,memory=1Gi.

ResourceQuota 수정

이 단계에서는 기존 ResourceQuota 를 수정하여 리소스 제한을 업데이트하는 방법을 배웁니다. 방법은 다음과 같습니다.

  1. resourcequota.yaml 파일을 편집하여 CPU 및 메모리 제한을 더 높은 값으로 업데이트합니다.
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "2"
    memory: "2Gi"

이렇게 하면 ResourceQuota 가 더 높은 CPU 및 메모리 제한 (각각 2 코어 및 2 GiB) 을 허용하도록 업데이트됩니다.

  1. kubectl apply 명령을 사용하여 업데이트된 resourcequota.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f resourcequota.yaml
  1. 다음 명령을 실행하여 ResourceQuota 가 업데이트되었는지 확인합니다.
kubectl describe resourcequotas example-resourcequota

출력에서 업데이트된 CPU 및 메모리 제한을 확인할 수 있습니다.

요약

이 랩에서는 Kubernetes ResourceQuota 를 사용하여 Kubernetes 클러스터에서 리소스 소비에 대한 제한을 설정하는 방법을 배웠습니다. 간단한 ResourceQuota 를 생성하고, 네임스페이스에 적용한 다음, 리소스 제한을 초과하는 Pod 를 생성하여 적용을 테스트하는 것으로 시작했습니다. 또한 기존 ResourceQuota 를 수정하여 리소스 제한을 업데이트하는 방법도 배웠습니다. ResourceQuota 는 Kubernetes 클러스터에서 리소스를 관리하고 애플리케이션이 과도한 리소스를 소비하지 않도록 보장하는 강력한 도구입니다.