3. Namespace 생성, LimitRange 를 이용한 자원 사용량 제한, POD 및 Deployment 생성, 자원 제한 확인
3. Namespace 생성, LimitRange 를 이용한 자원 사용량 제한, POD 및 Deployment 생성, 자원 제한 확인
1) Namespace 생성
test-ns 라는 이름의 네임스페이스를 만듭니다.
# kubectl create ns test-ns
생성된 네임스페이스를 확인합니다.
# kubectl get ns
NAME STATUS AGE
calico-apiserver Active 19h
calico-system Active 19h
default Active 20h
kube-node-lease Active 20h
kube-public Active 20h
kube-system Active 20h
test-ns Active 2s
tigera-operator Active 19h
2) LimitRange 설정
네임스페이스에 LimitRange 설정을 하기 위해 yaml 파일을 생성합니다.
# vi test-limitrange.yaml
apiVersion: v1 kind: LimitRange metadata: name: test-limitrange spec: limits: - default: # 기본 제한값 (생략 가능) cpu: 1 memory: 1Gi defaultRequest: # 요청 제한 값 (생략 가능) cpu: 1 memory: 1Gi max: # 최대값 (생략 가능) cpu: 1 memory: 1Gi min: # 최소값 (생략 가능) cpu: 1 memory: 500Mi type: Container |
test-ns 네임스페이스에 적용 합니다.
# kubectl apply -f test-limitrange.yaml -n test-ns
limitrange/test-limitrange created
모든 네임스페이스에 설정된 LimitRange 목록을 확인 할 수 있습니다.
# kubectl get limitrange -n test-ns // 네임스페이스 지정하여 보기
# kubectl get limitrange --all-namespaces // 네임스페이스 전체 보기
NAMESPACE NAME CREATED AT
test-ns test-limitrange 2022-12-29T02:08:54Z
자세한 LimitRange 정보를 보고 싶을땐 아래와 같이 실행합니다.
# kubectl get limitrange test-limitrange --output=yaml -n test-ns
3) POD 생성
httpd 이미지를 이용해 POD 를 생성합니다.
기존에 httpd 이미지를 받지 못하였을 경우 crictl 명령을 이용해 다운로드 합니다.
# crictl pull httpd
Image is up to date for docker.io/library/httpd@sha256:753edbf6bf19a74c580c57f7d98e05b6b34073adc929234da6eb193a8029ab91
POD 을 생성하기 위한 환경 파일을 만듭니다.
# vi test-httpd.yaml
apiVersion: v1 kind: Pod metadata: name: test-httpd spec: containers: - name: test-container image: httpd |
test-ns 네임스페이스 POD 를 생성 합니다. // yaml 파일을 이용해 POD 를 생성하는 방법
# kubectl apply -f test-httpd.yaml -n test-ns
pod/test-httpd created
생성된 POD 정보를 자세히 보고싶을 경우 아래와 같이 실행합니다.
# kubectl get pods test-httpd --output=yaml -n test-ns
* 참고
POD 를 생성 한 뒤 Namespace 에 LimitRange 를 적용할 경우 기존의 POD 에는 LimitRange 가 반영되지 않습니다.
* 참고 : 네임스페이스를 삭제하면 해당 Namespace 와 쿠버네티스 오브젝트들이 삭제되고, 할당되있던 리소스들이 자동으로 해제됩니다.
# kubectl delete ns test-ns
namespace "test-ns" deleted
4) Deployment 생성
한개의 httpd 컨테이너를 더 만들어 봅니다.
원래는 POD 생성후 Deployment 생성이 순서이지만 Deployment 생성시 POD 이 없다면 자동 생성됩니다.
우선 CRI-O 명령을 이용해 이미지를 다운로드 합니다.
httpd 이미지를 이용해 deployment 를 생성 합니다. // 명령줄에서 POD를 생성, 배포하는 방법
// POD 없이 deployment 하면 POD 자동 생성 후 배포가 됩니다.
자원 사용에 제한을 주기 위해 test-ns 라는 네임스페이스 안에 생성합니다.
# kubectl create deployment test-httpd2 --image httpd -n test-ns
deployment.apps/test-httpd2 created
test-ns 네임스페이스 내 POD 현황입니다.
생성된 POD 는 두 개가 보입니다.
# kubectl get pods -n test-ns
NAME READY STATUS RESTARTS AGE
test-httpd 1/1 Running 0 12m
test-httpd2-7c7c8bd5d-x4jl5 1/1 Running 0 3m55s // 자동 생성이라 이름에 난수값이 들어감
test-ns 네임스페이스 내 배포 현황입니다.
배포된 컨테이너는 한 개라서 test-httpd2 만 보입니다.
# kubectl get deployments -n test-ns
NAME READY UP-TO-DATE AVAILABLE AGE
test-httpd2 1/1 1 1 45s
5) LimitRange 적용 확인 (부하 테스트)
이제 httpd 컨테이너 쉘에 접근하여 부하를 주면, control 노드에서 확인되는 부하는
위에서 제한한 LimitRange 한도로 제한되는것을 확인 할 수 있습니다.
# kubectl exec -it test-httpd -n test-ns -- bash // httpd 컨테이너 쉘 접근
# apt -y update
# apt install stress // 부하 테스트 패키지 설치 후
# cat /proc/cpuinfo |grep processor |wc -l // 서버의 코어수 확인
# stress -c 2 // CPU 부하 시작
다른 터미널 창을 띄워 control-node 에서 컨테이너별 자원 사용량 체크 툴을 설치합니다.
# git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
# cd kubernetes-metrics-server
# kubectl create -f .
# kubectl top pod -n test-ns
NAME CPU(cores) MEMORY(bytes)
test-httpd 1000m 24Mi // 1000m 은 1core 를 의미합니다.
test-httpd2-7c7c8bd5d-x4jl5 1m 0Mi
컨테이너에서 stress 테스트를 중지했을때
# kubectl top pod -n test-ns
NAME CPU(cores) MEMORY(bytes)
test-httpd 1m 23Mi
test-httpd2-7c7c8bd5d-x4jl5 1m 0Mi
참고로 노드별 자원 사용량도 확인이 가능합니다.
# kubectl top node -n test-ns
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
control-node 85m 4% 1759Mi 46%
work-node-1 27m 1% 1200Mi 31%
work-node-2 39m 1% 1273Mi 33%
'리눅스 > Containers & Kubernetes' 카테고리의 다른 글
Docker 컨테이너 생성하지 않고 이미지 쉘에 접근하기 (0) | 2023.04.05 |
---|---|
4. Kubernetes 대시보드 설치 (0) | 2023.01.03 |
2. CRI-O 와 Kubernetes 를 활용한 httpd 배포 (0) | 2022.12.28 |
1. Ubuntu 22.04 에서 CRI-O, Kubernetes 1.26, Calico 설치하기 (0) | 2022.12.26 |
6. Docker PHPMyAdmin 설치 (0) | 2022.12.23 |