들어가며
- pod의 수가 증가함에 따라, pod를 관리할 때 pod를 그룹화하면 그룹별 pod들에 원하는 작업을 일괄적으로 적용시킬 수 있습니다.
Label이란?
- label은 pod와 같은 오브젝트에 첨부된 key-value 로 구성됩니다.
- label은 오브젝트의 특성을 식별하는 데 사용됩니다.
- node를 포함하여 pod, deployment, service 등 모든 리소스에 할당할 수 있습니다.
- 중요한 것은, label이 label selector와 함께 사용된다는 것입니다.
label selector는 특정 label로 tag된 pod의 부분 집합을 선택하여 원하는 작업을 수행합니다. label selector는 특정 값과 label을 갖는지 여부에 따라 리소스를 필터링하는 기준이 됩니다.
Label을 작성하는 방법은 아래와 같습니다.
"metadata": { "labels": { "key1" : "value1", "key2" : "value2" } }
pod에 label을 구성하는 방법을 알아보겠습니다.
- yaml로 작성하기
apiVersion: v1 kind: Pod metadata: name: label-demo labels: environment: production app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
kubectl get po --show-labels | grep label-demo NAME READY STATUS RESTARTS AGE LABELS label-demo 1/1 Running 0 27s app=nginx,environment=production
cli로 작성하기
kubectl label pod <pod name> <key>=<value> kubectl get po --show-labels | grep demo NAME READY STATUS RESTARTS AGE LABELS label-demo 1/1 Running 0 27s app=nginx,environment=production label-demo2 1/1 Running 0 27s <none>
현재 label-demo2 pod에는 label이 구성되어 있지 않습니다.kubectl label pod label-demo2 name=test pod/label-demo2 labeled kubectl get po --show-labels | grep demo NAME READY STATUS RESTARTS AGE LABELS label-demo 1/1 Running 0 27s app=nginx,environment=production label-demo2 1/1 Running 0 27s name=test
key는 name, value는 test 라는 label이 생성된 것을 확인할 수 있습니다.
pod label의 key, value값을 재정의 하는 방법은 아래와 같습니다.
kubectl label pod <pod name> <key>=<new value> --overwrite kubectl label pod label-demo2 name=test2 --overwrite pod/label-demo2 labeled kubectl get po --show-labels | grep demo NAME READY STATUS RESTARTS AGE LABELS label-demo2 1/1 Running 0 27s name=test2
pod의 label을 삭제하는 방법은 아래와 같습니다.
kubectl label pod <pod name> <key>- kubectl label pod label-demo app- pod/label-demo labeled kubectl get po --show-labels | grep demo NAME READY STATUS RESTARTS AGE LABELS label-demo 1/1 Running 0 27s environment=production
다음으로, node에 label을 구성하는 방법을 알아보겠습니다.
node label node의 특성을 label로 설정하여, pod를 배치할 때 node를 선택할 수 있도록 합니다.
- node의 label 조희
kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master Ready master 76d v1.18.19 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux, kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,master=true, node-role.kubernetes.io/master=,sodaflow/nginx-proxy=true,sodaflow/sodaflow-master-area=true, sodaflow/sodaflow-worker-area=true worker Ready <none> 69d v1.18.19 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux, kubernetes.io/arch=amd64,kubernetes.io/hostname=worker,kubernetes.io/os=linux,sodaflow/gpu-enabled=true,sodaflow/nginx-proxy=true,sodaflow/sodaflow-master-area=true,sodaflow/sodaflow-worker-area=true,worker=true
- node에 label 지정
kubectl label nodes <node name> <key>=<value> kubectl label node worker testKey=testValue node/worker labeled kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master Ready master 76d v1.18.19 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux, kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,master=true, node-role.kubernetes.io/master=,sodaflow/nginx-proxy=true,sodaflow/sodaflow-master-area=true, sodaflow/sodaflow-worker-area=true worker Ready <none> 69d v1.18.19 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux, kubernetes.io/arch=amd64,kubernetes.io/hostname=worker,kubernetes.io/os=linux,sodaflow/gpu-enabled=true,sodaflow/nginx-proxy=true,sodaflow/sodaflow-master-area=true,sodaflow/sodaflow-worker-area=true,testKey=testValue,worker=true
worker 라는 이름의 node에 key 값은 testKey, value값은 testValue 가 설정되었습니다. - node label을 활용하여 pod 배치하기
pod의 yaml파일에 아래와 같이 nodeSelector을 활용하여, 원하는 node에 pod를 배치할 수 있습니다.apiVersion: v1 kind: Pod metadata: name: label-demo spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 nodeSelector: testKey: testValue
nodeSelector에 key값은 testKey, value 값은 testValue를 지정하여 pod를 생성한 결과, 해당 label을 가지고 있는 worker node에 pod가 배치되었습니다.kubectl get po -owide NAME READY STATUS RESTARTS AGE IP NODE label-demo 1/1 Running 0 3m48s 6.2.171.108 worker
마무리
- label이 무엇 인지와 역할에 대해 알아보았습니다.
- pod와 node에 label을 지정하는 방법을 알아보았습니다.
- pod의 nodeSelector를 보고, msater가 적정한 node에 pod를 배치하는 것을 확인해 보았습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.