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%     

 

반응형

댓글()