Skip to content

Instantly share code, notes, and snippets.

@ianychoi
Last active July 14, 2021 12:43
Show Gist options
  • Select an option

  • Save ianychoi/44d360170fd8671aa9380741b3920b00 to your computer and use it in GitHub Desktop.

Select an option

Save ianychoi/44d360170fd8671aa9380741b3920b00 to your computer and use it in GitHub Desktop.
쿠버네티스 - 라벨 & 셀렉터 실습
  • 파드에 라벨(레이블) 설정 후 셀렉터를 통한 확인

    • labels.yaml

      apiVersion: v1
      kind: Pod
      metadata:
        name: myweb1
          labels:
          environment: production
          app: nginx
      spec:
        containers:
        - image: nginx
          name: myweb1
          ports:
          - containerPort: 80
            protocol: TCP
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: myweb2
          labels:
          environment: dev
          app: nginx
      spec:
        containers:
        - image: nginx
          name: myweb2
          ports:
          - containerPort: 80
            protocol: TCP
    • 실행 및 확인

      # 파드 생성
      curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/3/labels.yaml
      kubectl apply -f labels.yaml
      
      root@k8s-m:~# kubectl get pod
      NAME     READY   STATUS    RESTARTS   AGE
      myweb1   1/1     Running   0          2m20s
      myweb2   1/1     Running   0          2m20s
      
      # 파드 라벨 정보 확인
      kubectl get pod --show-labels
      root@k8s-m:~# kubectl get pod --show-labels
      NAME     READY   STATUS    RESTARTS   AGE   LABELS
      myweb1   1/1     Running   0          5s    app=nginx,environment=production
      myweb2   1/1     Running   0          5s    app=nginx,environment=dev
      
      # 셀렉터를 통한 확인
      kubectl get pod -l environment=production
      root@k8s-m:~# kubectl get pod -l environment=production
      NAME     READY   STATUS    RESTARTS   AGE
      myweb1   1/1     Running   0          2m50s
      
      kubectl get pod -l app=nginx
      root@k8s-m:~# kubectl get pod -l app=nginx
      NAME     READY   STATUS    RESTARTS   AGE
      myweb1   1/1     Running   0          2m59s
      myweb2   1/1     Running   0          2m59s
      
      # 셀렉터를 활용하여 특정 파드 삭제
      kubectl delete pod -l environment=production
      root@k8s-m:~# kubectl delete pod -l environment=production
      pod "myweb1" deleted
      
      # 라벨 제거
      root@k8s-m:~# kubectl get pod --show-labels
      NAME     READY   STATUS    RESTARTS   AGE   LABELS
      myweb2   1/1     Running   0          36s   app=nginx,environment=dev
      
      # 라벨의 키 뒤에 -
      root@k8s-m:~# kubectl label pod myweb2 app-
      pod/myweb2 labeled
      
      root@k8s-m:~# kubectl get pod --show-labels
      NAME     READY   STATUS    RESTARTS   AGE   LABELS
      myweb2   1/1     Running   0          95s   environment=dev
      
      # 다음 실습을 위해서 생성된 파드 삭제
      kubectl delete pod --all
  • 1노드셀렉터(nodeSelector)** 를 이용한 파드 배포 확인

    • Pod 가 특정 노드에 할당되도록 스케줄링, nodeSelector 라는 property 를 이용

    • 워커노드 1대에 라벨 지정 후 파드가 해당 워커노드에 배포되는지 확인

      # 노드 기본 라벨 정보 확인
      kubectl get node --show-labels
      root@k8s-m:~# kubectl get node --show-labels
      NAME     STATUS   ROLES                  AGE   VERSION   LABELS
      k8s-m    Ready    control-plane,master   98m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-m,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
      k8s-w1   Ready    <none>                 96m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-w1,kubernetes.io/os=linux
      k8s-w2   Ready    <none>                 95m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-w2,kubernetes.io/os=linux
      
      # 커맨드로 노드1에 라벨 설정
      kubectl label node k8s-w1 gpu=ndivia
      root@k8s-m:~# kubectl label node k8s-w1 gpu=ndivia
      node/k8s-w1 labeled
      
      root@k8s-m:~# kubectl get node --show-labels
      NAME     STATUS   ROLES                  AGE    VERSION   LABELS
      k8s-m    Ready    control-plane,master   117m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-m,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
      k8s-w1   Ready    <none>                 115m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=ndivia,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-w1,kubernetes.io/os=linux
      k8s-w2   Ready    <none>                 113m   v1.21.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-w2,kubernetes.io/os=linux
    • labels-node.yaml

      apiVersion: v1
      kind: Pod
      metadata:
        name: myweb
      spec:
        containers:
        - image: nginx
          name: myweb
          ports:
          - containerPort: 80
            protocol: TCP
        nodeSelector:
          gpu: ndivia
    • 파드 배포 후 확인

      curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/3/labels-node.yaml
      kubectl apply -f labels-node.yaml
      
      # 파드 배포 노드 확인
      root@k8s-m:~# kubectl get pod -o wide
      NAME    READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
      myweb   1/1     Running   0          26s   172.16.228.68   k8s-w1   <none>           <none>
      
      # 파드를 3개 더 생성
      cat labels-node.yaml | sed "s/name: myweb/name: myweb2/g" | kubectl apply -f -
      cat labels-node.yaml | sed "s/name: myweb/name: myweb3/g" | kubectl apply -f -
      cat labels-node.yaml | sed "s/name: myweb/name: myweb4/g" | kubectl apply -f -
      cat labels-node.yaml
      
      # 파드 배포 노드 확인 : 파드가 워커 노드에 분산 배치되지 않는다!
      root@k8s-m:~# kubectl get pod -o wide
      NAME     READY   STATUS    RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
      myweb    1/1     Running   0          3m53s   172.16.228.68   k8s-w1   <none>           <none>
      myweb2   1/1     Running   0          27s     172.16.228.69   k8s-w1   <none>           <none>
      myweb3   1/1     Running   0          13s     172.16.228.70   k8s-w1   <none>           <none>
      myweb4   1/1     Running   0          12s     172.16.228.71   k8s-w1   <none>           <none>
      
      # 다음 실습을 위해서 생성된 파드 삭제
      kubectl delete pod --all
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment