CKA (Certified Kubernetes Administrator)/Kode Kloud

02 Scheduling - Manual Scheduling

seulseul 2022. 1. 19. 13:03

LABS – CERTIFIED KUBERNETES ADMINISTRATOR WITH PRACTICE TESTS > SCHEDULING

Scheduling

 

01. A pod definition file nginx.yaml is given. Create a pod using the file.

Only create the POD for now. We will inspect its status next.

  • Pod nginx Created
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  -  image: nginx
     name: nginx
kubectl apply -f ./nginx.yaml

# 혹은 

kubectl create -f ./nginx.yaml

02. What is the status of the created POD?

root@controlplane:~# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   0/1     Pending   0          2m22s

답 : Pending

 

03. Why is the POD in a pending state?

Inspect the environment for various kubernetes control plane components.

root@controlplane:~# kubectl get pods --namespace kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-2ldlf                1/1     Running   0          17m
coredns-74ff55c5b-kvjjr                1/1     Running   0          17m
etcd-controlplane                      1/1     Running   0          18m
kube-apiserver-controlplane            1/1     Running   0          18m
kube-controller-manager-controlplane   1/1     Running   0          18m
kube-flannel-ds-cwc6h                  1/1     Running   0          17m
kube-flannel-ds-zcvns                  1/1     Running   0          17m
kube-proxy-mn9rn                       1/1     Running   0          17m
kube-proxy-rf9sb                       1/1     Running   0          17m

 

Run the command:
kubectl get pods --namespace kube-system
 to see the status of scheduler pod.
 
We have removed the scheduler from this Kubernetes cluster. 

As a result, as it stands, 
the pod will remain in a pending state forever.

# 1번 정답
(1) No Scheduler Present

# (2) Taints & Tolerations
# (3) No nodes available
# (4) Incorrect Label

04. Manually schedule the pod on node01.

Delete and recreate the POD if necessary.

  • Status: Running
  • Pod: nginx

Set nodeName property on the pod.

## 선택한 노드에 스케줄되도록 파드 생성하기

# pending 상태인 pod 삭제
kubectl delete pod nginx

# 파드가 선택한 노드에 실행중인지 확인
kubrctl get pods --output=wide

# nodeName 을 통해 특정노드로 파드를 배포할수 있다.
# pod-nginx-specific-node.yaml
--
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  nodeName: foo-node # 특정 노드에 파드 스케줄
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent

 

05. Now schedule the same pod on the controlplane node.

Delete and recreate the POD if necessary.

  • Status: Running
  • Pod: nginx
  • Node: controlplane?

:) 4번과 같은 방식으로 yaml 파일을 수정한다.

root@controlplane:~# kubectl get pod -o wide
NAME    READY   STATUS              RESTARTS   AGE   IP       NODE           NOMINATED NODE   READINESS GATES
nginx   0/1     ContainerCreating   0          10s   <none>   controlplane   <none>           <none>

 

# 참고

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/kube-scheduler/

 

쿠버네티스 스케줄러

쿠버네티스에서 스케줄링 은 Kubelet이 파드를 실행할 수 있도록 파드가 노드에 적합한지 확인하는 것을 말한다. 스케줄링 개요 스케줄러는 노드가 할당되지 않은 새로 생성된 파드를 감시한다.

kubernetes.io

https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes/#%EC%84%A0%ED%83%9D%ED%95%9C-%EB%85%B8%EB%93%9C%EC%97%90-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%90%98%EB%8F%84%EB%A1%9D-%ED%8C%8C%EB%93%9C-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

 

노드에 파드 할당

이 문서는 쿠버네티스 클러스터의 특정 노드에 쿠버네티스 파드를 할당하는 방법을 설명한다. 시작하기 전에 쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수

kubernetes.io