본문 바로가기

⭐ Kubernetes & EKS/Kubernetes (쿠버네티스)

수동 스케줄링 (원하는 노드에 배치) #

# 수동 스케줄링

- 수동으로 pod를 원하는 node에 수동으로 배치하기

vim http-go.yaml
apiVersion: v1
kind: Pod
metadata:
  name: http-go
spec:
  containers:
  - name: http-go
    image: busybox
  nodeName: work1
kubectl create -f http-go.yaml

* 만약 
error: unable to recognize "http-go.yaml": no matches for kind "Pod" in version "apps/v1"
에러가 발생한다면 yaml 파일의 상단의 버전정보를 apiVersion: apps/v1 > apiVersion: v1 변경하여 주면 된다.

# 실행된 pod 확인하기

kubectl get pod

kubectl get pod -o wide

- 원하는 노드에 배치된 것을 확인 할 수 있다.

ec2-user:~/environment/yaml $ k get pod -o wide
NAME      READY   STATUS             RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
http-go   1/2     CrashLoopBackOff   4          2m26s   192.168.45.179   ip-192-168-41-137.ap-northeast-2.compute.internal   <none>           <none>
ec2-user:~/environment/yaml $

# 레이블링을 통한 수동배치

vim http-go-label.yaml
apiVersion: v1
kind: Pod
metadata:
  name: http-go-gpu
spec:
  containers:
  - name: http-go
    image: busybox
  nodeSelector: 
    gpu: "true"

kubectl create -f http-go-label.yaml 을 실행하면 현재 레이블링이 안되어 있기 때문에 pending 상태로 존재한다.

ec2-user:~/environment/yaml $ kubectl get pod
NAME          READY   STATUS             RESTARTS   AGE
http-go       1/2     CrashLoopBackOff   6          8m43s
http-go-gpu   0/2     Pending            0          26s

# 노드 상세 조회하기

ec2-user:~/environment/yaml $ kubectl get nodes -o wide
NAME                                                STATUS   ROLES    AGE    VERSION               INTERNAL-IP      EXTERNAL-IP      OS-IMAGE         KERNEL-VERSION                CONTAINER-RUNTIME
ip-192-168-41-137.ap-northeast-2.compute.internal   Ready    <none>   116m   v1.21.4-eks-033ce7e   192.168.41.137   54.180.115.230   Amazon Linux 2   5.4.149-73.259.amzn2.x86_64   docker://20.10.7

# 레이블 정보 조회

kubectl get nodes --show-labels
ec2-user:~/environment/yaml $ kubectl get nodes --show-labels
NAME                                                STATUS   ROLES    AGE    VERSION               LABELS
ip-192-168-41-137.ap-northeast-2.compute.internal   Ready    <none>   105m   v1.21.4-eks-033ce7e   alpha.eksctl.io/cluster-name=eksworkshop-eksctl-02,alpha.eksctl.io/nodegroup-name=nodegroup,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=m5.large,beta.kubernetes.io/os=linux,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup-image=ami-01466c7fe3c06aa5b,eks.amazonaws.com/nodegroup=nodegroup,eks.amazonaws.com/sourceLaunchTemplateId=lt-0fac7cc40656f6d76,eks.amazonaws.com/sourceLaunchTemplateVersion=1,failure-domain.beta.kubernetes.io/region=ap-northeast-2,failure-domain.beta.kubernetes.io/zone=ap-northeast-2c,kubernetes.io/arch=amd64,kubernetes.io/hostname=ip-192-168-41-137.ap-northeast-2.compute.internal,kubernetes.io/os=linux,node.kubernetes.io/instance-type=m5.large,topology.kubernetes.io/region=ap-northeast-2,topology.kubernetes.io/zone=ap-northeast-2c

- gpu만 가진 레이블을 조회

kubectl get nodes -L gpu

# work2 배치하기

kubectl label nodes work2 gpu="true"

kubectl get nodes -L gpu

- gpu를 다시 확인해보면 work2에만 true가 붙은것을 확인 할 수 있다.

kubectl get nodes -L gpu 를 해보면 이전에 pending 상태였던 pod가 정상적인 상태로 변한것을 볼 수 있다.