IT/쿠버네티스 / / 2020. 2. 5.

[kubernetes-실습] Scheduling - label 사용한 pod 할당

포스팅 목차

    # Assign Pods Using Labels

    - label에 따라 pod 할당 테스트를 위해 세팅

    # ------------------------------------------
    # label에 따라 pod 할당 테스트를 위해 세팅
    # 1. labeling
    # master : status=vip, worker : status=other
    # ------------------------------------------
    
    # node list 확인. 
    # 실습을 위해서 labels 나 taint 추가된게 없이 ready 상태여야 한다.
    ps0107@k8smaster1:~$ kubectl get nodes
    NAME         STATUS   ROLES    AGE    VERSION
    k8smaster1   Ready    master   7d5h   v1.15.1
    k8sworker1   Ready    <none>   7d5h   v1.15.1
    
    # 현재 노드에 label, taint 정보를 확인.
    ps0107@k8smaster1:~$ kubectl describe nodes | grep -i label
    Labels:             beta.kubernetes.io/arch=amd64
    Labels:             beta.kubernetes.io/arch=amd64
    
    ps0107@k8smaster1:~$ kubectl describe nodes | grep -i taint
    Taints:             <none>
    Taints:             <none>
    
    # 실습을 위해서 kube-system 외에 현재 running 중인 deployment가 없어야 한다. 
    # 만약 존재하면 삭제한 후에 각 노드별로 container 갯수를 확인해 본다.
    ps0107@k8smaster1:~$ kubectl get deployment --all-namespaces
    NAMESPACE     NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    kube-system   calico-typha   0/0     0            0           7d5h
    kube-system   coredns        2/2     2            2           7d5h
    
    # container 갯수 확인
    ps0107@k8smaster1:~$ sudo docker ps | wc -l
    22
    
    ps0107@k8sworker1:~$ sudo docker ps | wc -l
    10
    
    # 실습을 위해서 master 노드에 status=vip 로, 다른 노드는 status=other 로 label 추가
    ps0107@k8smaster1:~$ kubectl label nodes k8smaster1 status=vip
    node/k8smaster1 labeled
    
    ps0107@k8smaster1:~$ kubectl label nodes k8sworker1 status=other
    node/k8sworker1 labeled
    
    # label 확인
    ps0107@k8smaster1:~$ kubectl get nodes --show-labels
    NAME         STATUS   ROLES    AGE    VERSION   LABELS
    k8smaster1   Ready    master   7d5h   v1.15.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster1,kubernetes.io/os=linux,node-role.kubernetes.io/master=,status=vip
    k8sworker1   Ready    <none>   7d5h   v1.15.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker1,kubernetes.io/os=linux,status=other

     

    - master node쪽으로 nodeSelector 를 설정하여 테스트 해보자.

    # ------------------------------------
    # master node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
    # ------------------------------------
    
    # sleep time을 설정한 4개의 busybox 컨테이너를 만들기 위한 yaml 파일을 작성한다. 
    # nodeSelect entry 도 포함한다.
    ps0107@k8smaster1:~$ vi vip.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: vip
    spec:
      containers:
      - name: vip1
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip2
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip3
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip4
        image: busybox
        args:
        - sleep
        - "1000000"
      nodeSelector:
        status: vip  # <- vip 로 label 되어 있는 node로 할당
    
    # pod 생성 후 각 노드 container 갯수 확인
    ps0107@k8smaster1:~$ kubectl create -f vip.yaml
    pod/vip created
    
    # nodeSelector 로 vip label이 있는 master에 container 갯수 증가
    ps0107@k8smaster1:~$ sudo docker ps | wc -l
    27
    
    ps0107@k8sworker1:~$ sudo docker ps | wc -l
    10
    
    # 생성한 vip 라벨링 pod들을 삭제한다.
    ps0107@k8smaster1:~$ kubectl delete pod vip
    pod "vip" deleted

     

    - nodeSelector 설정 없애고 테스트 해보자

    # ------------------------------------
    # nodeSelector 설정 없애고 테스트
    # ------------------------------------
    ps0107@k8smaster1:~$ vi vip.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: vip
    spec:
      containers:
      - name: vip1
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip2
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip3
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: vip4
        image: busybox
        args:
        - sleep
        - "1000000"
    #  nodeSelector:
    #    status: vip
    
    # pod 생성 후 container갯수 확인
    # 이번에는 두개의 노드에 분산되어 컨테이너가 생성된다.
    ps0107@k8smaster1:~$ kubectl create -f vip.yaml
    pod/vip created
    
    ps0107@k8smaster1:~$ sudo docker ps | wc -l
    22
    
    ps0107@k8sworker1:~$ sudo docker ps | wc -l
    15

     

    - worker node쪽으로 nodeSelector 를 설정하여 테스트 해보자.

    # ------------------------------------
    # worker node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
    # ------------------------------------
    ps0107@k8smaster1:~$ cp vip.yaml other.yaml
    ps0107@k8smaster1:~$ sed -i s/vip/other/g other.yaml
    ps0107@k8smaster1:~$ vi other.yaml
    ps0107@k8smaster1:~$ cat other.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: other
    spec:
      containers:
      - name: other1
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: other2
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: other3
        image: busybox
        args:
        - sleep
        - "1000000"
      - name: other4
        image: busybox
        args:
        - sleep
        - "1000000"
      nodeSelector:
        status: other  # <- worker node 쪽으로 
    
    # pod 생성 후 container갯수 확인
    # 이번에는 worker 노드에 컨테이너가 생성된다.
    ps0107@k8smaster1:~$ kubectl create -f other.yaml
    pod/other created
    
    ps0107@k8smaster1:~$ sudo docker ps | wc -l
    22
    
    ps0107@k8sworker1:~$ sudo docker ps | wc -l
    19
    
    # 리소스 정리
    ps0107@k8smaster1:~$ kubectl delete pods vip other
    pod "vip" deleted
    pod "other" deleted

    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유