소개
이 랩에서는 Kubernetes 파드에서 리소스 소비에 대한 제한을 설정하는 데 사용되는 Kubernetes LimitRange 에 대해 배우게 됩니다. LimitRange 는 파드에 할당된 리소스를 관리하고 리소스 경합 문제를 방지하는 데 도움이 되는 Kubernetes 기능입니다.
간단한 예제부터 시작하여 점차적으로 더 복잡한 시나리오로 이동하면서 LimitRange 의 다양한 측면을 이해하기 위한 일련의 단계별 지침을 따르게 됩니다. 각 단계에는 Kubernetes 클러스터에 적용하여 LimitRange 의 효과를 확인할 수 있는 YAML 매니페스트 형식의 코드 예제가 포함됩니다.
Minikube 클러스터 시작
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/projectMinikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.
minikube start- 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube statuskubelet및apiserver와 같은 구성 요소가Running으로 나열되어 있는지 확인합니다.- 클러스터가 실행 중이지 않으면
minikube start를 다시 실행합니다.
Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
간단한 LimitRange 생성
이 단계에서는 네임스페이스의 파드에 대한 CPU 및 메모리 리소스에 대한 제한을 설정하는 간단한 LimitRange 를 생성합니다. 방법은 다음과 같습니다.
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
kubectl apply명령을 사용하여limitrange.yaml파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f limitrange.yaml
- 다음 명령을 실행하여 LimitRange 가 성공적으로 생성되었는지 확인합니다.
kubectl describe limitrange example-limitrange
spec 섹션에서 지정한 제한 사항과 함께 example-limitrange LimitRange 가 나열되어야 합니다.
Pod 에 LimitRange 적용
이 단계에서는 "간단한 LimitRange 생성"에서 생성한 LimitRange 의 영향을 받는 파드를 생성합니다. 방법은 다음과 같습니다.
pod.yaml이라는 새 YAML 파일을 다음 내용으로 생성합니다.
cd ~/project
touch pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx
image: nginx
이 파드 정의는 Nginx 이미지를 실행하는 단일 컨테이너가 있는 간단한 파드를 생성합니다.
kubectl apply명령을 사용하여pod.yaml파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f pod.yaml
- 다음 명령을 실행하여 파드가 성공적으로 생성되었는지 확인합니다.
kubectl get pods example-pod
Running 상태로 example-pod 파드가 나열되어야 합니다.
- 다음 명령을 실행하여 파드에 적용된 리소스 제한을 확인합니다.
kubectl describe pod example-pod
정의된 대로 파드의 CPU 및 메모리 제한을 확인할 수 있습니다.
LimitRange 적용 테스트
이 단계에서는 LimitRange 에 정의된 리소스 제한을 초과하는 파드를 생성하여 LimitRange 의 적용을 테스트합니다. 방법은 다음과 같습니다.
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).
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 를 업데이트하여 리소스 제한을 수정합니다. 방법은 다음과 같습니다.
- 요구 사항에 따라 리소스 제한을 업데이트하도록
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
kubectl apply명령을 사용하여 업데이트된limitrange.yaml파일을 Kubernetes 클러스터에 적용합니다.
kubectl apply -f limitrange.yaml
- 다음 명령을 실행하여 LimitRange 가 성공적으로 업데이트되었는지 확인합니다.
kubectl describe limitranges example-limitrange
출력에 업데이트된 리소스 제한이 반영된 것을 확인할 수 있습니다.
요약
이 랩에서는 Kubernetes LimitRange 를 사용하여 파드에서 리소스 소비에 대한 제한을 설정하는 방법을 배웠습니다. 간단한 LimitRange 를 생성하는 것으로 시작하여 파드에 적용하고, 적용을 테스트한 다음 LimitRange 를 업데이트하여 리소스 제한을 수정했습니다. LimitRange 는 Kubernetes 에서 리소스를 관리하고 클러스터에서 효율적인 리소스 활용을 보장하는 강력한 도구입니다.


