IT/CKA

CKA 실습 - Scheduling

Primes 2023. 7. 31. 10:26
728x90

Labels and Selectors

k get pods --selector env=dev | wc -l // label이 env=dev 인 파드의 개수 조회
k get pods --selector env=dev --no-headers // 헤더 제외하고 조회

단, 위의 옵션으로 조회하면 아래와 같이 결과가 출력된다.

위의 헤더 부분까지 포함하여 총 8 이라고 표시되는 것이므로, 실제로 파드의 개수는 7개다.

헤더 부분을 제외하고 조회하고 싶다면 --no-headers 를 추가하면 된다.

 

pods, replicasets 등 다른 모든 오브젝트에 대해 조회하고 싶다면, all 로 조회하면 된다.

 

Taints and Tolerations

Create a taint on node01 with key of spray, value of mortein and effect of NoSchedule

taint 설정이 완료되었는지는 describe 를 통해 확인해볼 수 있다.

이미지 가장 하단에 설정이 완료되었음을 확인

 

bee 라는 이름의 파드를 nginx 이미지로 생성하고, mortein 이라는 taint에 대응하는 toleration 을 설정한다.

먼저 bee 파드를 만들기 위한 bee.yaml 파일을 생성한다. 명령어로 생성하지 않는 이유는, toleration 을 파드 생성 단계에서 적용하기 위함이다.

 

위와 같이 파일을 작성한다. tolerations 필드를 추가함에 주목하자. 어떠한 옵션값을 넣어줘야 할 지 모른다면 공식 doc을 참고해서 진행한다. 해당 파일로 파드를 생성하고 완료되었음을 확인.

 

node 에 taint 가 설정되어 있는지는 describe 명령어를 통해 확인해볼 수 있다.

여기서 taint 를 제거하고 싶다면, "-" 를 붙인다.

 

 

Node Affinity

yaml 파일로 label key 를 설정할 때, 쿠버네티스 doc 부분을 참조하는 것을 기억하자.

yaml 파일을 kubectl 로 생성하고, 파일을 수정한다.

이 때, spec 하위에 affinity 부분을 추가한다. 해당 내용은 쿠버네티스 doc을 참고한다.

Assign Pods to Nodes using Node Affinity | Kubernetes

 

Assign Pods to Nodes using Node Affinity

This page shows how to assign a Kubernetes Pod to a particular node using Node Affinity in a Kubernetes cluster. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster.

kubernetes.io

 

Static Pod

kubelet의 설정은 아래 경로에서 확인할 수 있다.

cat /var/lib/kubelet/config.yaml

kubelet의 설정 중, staticpod의 경로를 확인할 수 있다.

기본적으로 위와 같이 설정되어 있다. 위 config.yaml을 통해 static pod의 경로를 확인할 수 있음을 기억하자.

 

위 StaticPodPath 의 경로로 들어가보면, staticpod를 생성하는 yaml 파일을 확인할 수 있다.

 

이름이 static-busybox 이고 buxybox 이미지를 사용하며, sleep 1000 커맨드를 포함하는 static pod를 생성한다.

먼저 연습을 위해 명령어를 실행해보고, 실질적으로 문제 해결 및 실행을 위한 yaml 파일을 생성한다.
명령어로 실행한 파드는 Pending 상태에 멈춰있음을 확인
image를 busybox => busybox:1.28.4 로 변경한다. 이후 정상 구동을 확인

 

다음 문제도 진행해본다.

static-greenbox-node01 static pod를 삭제해야 한다.

하지만 kubectl 명령어로는 삭제해도 다시 살아나는 것을 확인할 수 있다. static pod는 kubectl 로 삭제하는 것이 불가능하다. 따라서, manifest 파일을 찾아 직접 삭제해야한다.

 

해당 manifest 파일은 node01의 파드이기 때문에 해당 노드로 내에 존재한다. 따라서 node01로 접속하여 삭제해야 한다.

노드에 접속한 화면

노드의 내부 IP를 확인하고 ssh 를 통해 노드 내로 직접 접속한다.

노드 내에서 manifest 파일을 찾는다.

/etc/kubernetes/manifests 에 없다면, var/lib/kubelet/에 존재할 수도 있다.

경로로 이동하여 파일을 삭제하고 노드에서 나와 다시 확인해보면, 파드가 삭제되는 것을 확인할 수 있다.

 

Multiple Schedulers

ConfigMap 생성하는 과정을 확인해본다.

config 파일은 강의에서 주어진다. 이 파일을 활용하여 configmap 을 생성한다.

kubectl 통해서 생성하고 생성이 완료되었는지 확인

 

새로운 스케줄러 배포하기

/root/my-scheduler.yaml 주어진 파일 통해서 스케줄러를 새로 배포해본다.

친절하게 image 부분이 <use-correct-image> 부분으로 표기되어 있다.

기본 스케줄러의 이미지와 동일한 이미지를 사용하기 위해 아래와 같이 조회해본다.

image 를 그대로 복사

yaml 파일 수정 후, 스케줄러를 생성한다.

정상 생성됨을 확인

파드를 새로 생성할 때 새로 생성된 스케줄러를 지정하는 방법을 확인해본다. 아주 간단하다.

pod의 yaml 파일에 schedulerName 을 설정한다.

 

반응형