Kubernetes
[ Kubernetes ] 특정 노드에 리소스 배포 - 레이블(labels)
블루빔
2023. 11. 28. 14:00
쿠버네티스에서 리소스를 배포하게 되면 쿠버네티스가 알아서 적절한 노드에 리소스를 배포해 줍니다. 하지만 필요에 따라 특정 노드에 특정 리소스를 배포해야 하는 경우도 있으므로 아래 해당 방법에 대해 기재하겠습니다.
작업 환경 : node 3개가 있는 환경에서 특정 노드에 특정 pod를 배포해 보겠습니다.
kubectl get nodes
-------------------------------------------------------------------------------------
NAME STATUS ROLES AGE VERSION
gke-blue-test-default-pool-1 Ready <none> 25h v1.27.3-gke.100
gke-blue-test-default-pool-2 Ready <none> 25h v1.27.3-gke.100
gke-blue-test-default-pool-3 Ready <none> 25h v1.27.3-gke.100
목차
▶ 노드 label 추가
▶ nodeSelector 선언
▶ 최종 확인
▶ 노드 label 추가
node(gke-blue-test-default-pool-1)에 group=test 레이블을 추가하고
node(gke-blue-test-default-pool-2)에 group=prod 레이블을 추가합니다.
kubectl label node <노드네임> Key=Value
$ kubectl label node gke-blue-test-default-pool-1 group=test
------------------------------------------------------------------------
node/gke-blue-test-default-pool-1 labeled
위에서 설정한 Key 값으로 노드를 조회 해보면 아래와 같이 설정된 것을 확인할 수 있습니다.
$ kubectl get nodes -L group
-------------------------------------------------------------------------------------------
NAME STATUS ROLES AGE VERSION GROUP
gke-blue-test-default-pool-1 Ready <none> 25h v1.27.3-gke.100 test
gke-blue-test-default-pool-2 Ready <none> 26h v1.27.3-gke.100 prod
gke-blue-test-default-pool-3 Ready <none> 25h v1.27.3-gke.100
▶ nodeSelector 선언
Yaml 파일 형식으로 생성
(예시) pod 배포 시 node 지정
apiVersion: v1
kind: Pod
metadata:
name: test-app
labels:
group: test
spec:
nodeSelector: # <== nodeSelector로 배포하고 싶은 노드를 특정 시킴
group: test
containers:
- name: test-app-cn
image: nginx:1.14.2
ports:
- containerPort: 8080
resources:
limits:
cpu: "100m"
memory: "120Mi"
command로 생성
[ --overrides='{"spec": {"nodeSelector": {"Key": "Value"}}}' ]
(예시) pod 배포 시 node 지정
kubectl run <pod네임> --image=<이미지> --overrides='{"spec": {"nodeSelector": {"Key": "Value"}}}'
$ kubectl run test-app2 --image=nginx:1.14.2 --overrides='{"spec": {"nodeSelector": {"group": "test"}}}'
▶ 최종 확인
test-app들은 group=test 노드(gke-blue-test-default-pool-1)에
prod-app들은 group=prod 노드(gke-blue-test-default-pool-2)에 배포된 것을 확인할 수 있습니다.
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
prod-app 1/1 Running 0 28m 10.240.2.7 gke-blue-test-default-pool-2 <none> <none>
test-app 1/1 Running 0 28m 10.240.0.14 gke-blue-test-default-pool-1 <none> <none>
test-app2 1/1 Running 0 20s 10.240.2.8 gke-blue-test-default-pool-1 <none> <none>