Kubernetes LimitRange 리소스 관리

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes 파드에서 리소스 소비에 대한 제한을 설정하는 데 사용되는 Kubernetes LimitRange 에 대해 배우게 됩니다. LimitRange 는 파드에 할당된 리소스를 관리하고 리소스 경합 문제를 방지하는 데 도움이 되는 Kubernetes 기능입니다.

간단한 예제부터 시작하여 점차적으로 더 복잡한 시나리오로 이동하면서 LimitRange 의 다양한 측면을 이해하기 위한 일련의 단계별 지침을 따르게 됩니다. 각 단계에는 Kubernetes 클러스터에 적용하여 LimitRange 의 효과를 확인할 수 있는 YAML 매니페스트 형식의 코드 예제가 포함됩니다.

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를 사용하여 환경을 재설정하십시오.

간단한 LimitRange 생성

이 단계에서는 네임스페이스의 파드에 대한 CPU 및 메모리 리소스에 대한 제한을 설정하는 간단한 LimitRange 를 생성합니다. 방법은 다음과 같습니다.

  1. limitrange.yaml이라는 새 YAML 파일을 다음 내용으로 생성합니다.
cd ~/project
touch limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
spec:
  limits:
    - type: Container
      max:
        cpu: "1"
        memory: "1Gi"
      min:
        cpu: "100m"
        memory: "100Mi"
      default:
        cpu: "500m"
        memory: "500Mi"

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

  • 최대 CPU: 1 코어
  • 최대 메모리: 1 GiB
  • 최소 CPU: 100 밀리코어 (100m)
  • 최소 메모리: 100 MiB
  • 기본 CPU: 500 밀리코어 (500m)
  • 기본 메모리: 500 MiB
  1. kubectl apply 명령을 사용하여 limitrange.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f limitrange.yaml
  1. 다음 명령을 실행하여 LimitRange 가 성공적으로 생성되었는지 확인합니다.
kubectl describe limitrange example-limitrange

spec 섹션에서 지정한 제한 사항과 함께 example-limitrange LimitRange 가 나열되어야 합니다.

Pod 에 LimitRange 적용

이 단계에서는 "간단한 LimitRange 생성"에서 생성한 LimitRange 의 영향을 받는 파드를 생성합니다. 방법은 다음과 같습니다.

  1. pod.yaml이라는 새 YAML 파일을 다음 내용으로 생성합니다.
cd ~/project
touch pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: nginx
      image: nginx

이 파드 정의는 Nginx 이미지를 실행하는 단일 컨테이너가 있는 간단한 파드를 생성합니다.

  1. kubectl apply 명령을 사용하여 pod.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f pod.yaml
  1. 다음 명령을 실행하여 파드가 성공적으로 생성되었는지 확인합니다.
kubectl get pods example-pod

Running 상태로 example-pod 파드가 나열되어야 합니다.

  1. 다음 명령을 실행하여 파드에 적용된 리소스 제한을 확인합니다.
kubectl describe pod example-pod

정의된 대로 파드의 CPU 및 메모리 제한을 확인할 수 있습니다.

LimitRange 적용 테스트

이 단계에서는 LimitRange 에 정의된 리소스 제한을 초과하는 파드를 생성하여 LimitRange 의 적용을 테스트합니다. 방법은 다음과 같습니다.

  1. pod-exceeding-limits.yaml이라는 새 YAML 파일을 다음 내용으로 생성합니다.
cd ~/project
touch 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"

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

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

파드 생성 작업이 거부되는 것을 확인할 수 있습니다. 오류 메시지는 Error from server (Forbidden): error when creating "pod-exceeding-limits. yaml": pod "example-pod-exceeding-limits " Forbidden: [Maximum cpu usage per container is 1, but limited to 2, maximum memory usage per container is 1Gi, but limited to 2Gi] 입니다.

LimitRange 업데이트

이 단계에서는 "간단한 LimitRange 생성"에서 생성한 LimitRange 를 업데이트하여 리소스 제한을 수정합니다. 방법은 다음과 같습니다.

  1. 요구 사항에 따라 리소스 제한을 업데이트하도록 limitrange.yaml 파일을 수정합니다. 예를 들어:
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
spec:
  limits:
    - type: Container
      max:
        cpu: "2"
        memory: "2Gi"
      min:
        cpu: "200m"
        memory: "200Mi"
      default:
        cpu: "1"
        memory: "1Gi"

이 업데이트된 LimitRange 는 다음 제한을 설정합니다.

  • 최대 CPU: 2 코어
  • 최대 메모리: 2 GiB
  • 최소 CPU: 200 밀리코어 (200m)
  • 최소 메모리: 200 MiB
  • 기본 CPU: 1 코어
  • 기본 메모리: 1 GiB
  1. kubectl apply 명령을 사용하여 업데이트된 limitrange.yaml 파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f limitrange.yaml
  1. 다음 명령을 실행하여 LimitRange 가 성공적으로 업데이트되었는지 확인합니다.
kubectl describe limitranges example-limitrange

출력에 업데이트된 리소스 제한이 반영된 것을 확인할 수 있습니다.

요약

이 랩에서는 Kubernetes LimitRange 를 사용하여 파드에서 리소스 소비에 대한 제한을 설정하는 방법을 배웠습니다. 간단한 LimitRange 를 생성하는 것으로 시작하여 파드에 적용하고, 적용을 테스트한 다음 LimitRange 를 업데이트하여 리소스 제한을 수정했습니다. LimitRange 는 Kubernetes 에서 리소스를 관리하고 클러스터에서 효율적인 리소스 활용을 보장하는 강력한 도구입니다.