본문 바로가기
Kubernetes

[ Kubespray ] node label 추가, addon label selector 설정

by 정윤재 2023. 10. 25.

일반적으로 운영 private kubernetes 클러스터를 구축한다고 하면 

 

아래와 같은 구성으로 클러스터를 생성하게 될 것이다. 

 

kubespray 를 통해 proxy node 들과 worker node 들에 필요한 addon object 를

 

특정 node 에만 할당 되도록 설치 하기 위해선 kubespray 에서 제공하는 node selector 방식을 사용하면 쉽게 

 

할수 있다. 

 

 ingress 와 metallb 를 특정 node 에 뜰 수 있게 label 적용 예를 아래와 같이 확인 해보자

 

일단 inventory.ini ($kubespray_home/inventory/클러스터/inventory.ini )의 예는 아래와 같다.

 

[all]
k8smaster ansible_host=192.168.101.130 ip=192.168.101.130
k8sslave1 ansible_host=192.168.101.128 ip=192.168.101.128
k8sslave2 ansible_host=192.168.101.136 ip=192.168.101.136


[kube_control_plane]
k8smaster

[etcd]
k8smaster

[kube_node]
k8sslave1
k8sslave2

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

[kube_control_plane:vars]
node_labels={"node-role.kubernetes.io/master":"","master":"true"}

[kube_node:vars]
node_labels={"node-role.kubernetes.io/worker":"","worker":"true"}

위의 코드에서 보듯이 

[kube_control_plane] , [kube_node] 로 위에서 선언한 node 들에 대해서 아래 부분에서

 

[kube_control_plane:vars]
node_labels={"node-role.kubernetes.io/master":"","master":"true"}

[kube_node:vars]
node_labels={"node-role.kubernetes.io/worker":"","worker":"true"}

 

와 같이 json 형태로 데이터를 넣어주는 것을 볼수 있다.

 

이렇게 설정한 결과는 아래 이미지와 같이 확인 할 수 있다.

 

여기에 nodeselector 를 통해 ingress, metallb 를 특정 node 에만 기동 시키고 싶다면

 

kubespray 의 addon 설정 파일 경로를 

~/kubespray/inventory/testcluster/group_vars/k8s_cluster 라고 했을 때,

 

해당 경로의 addons.yml 파일의 내용을 아래와 같이 설정 해주면 된다.

 

................

ingress_nginx_enabled: true
# ingress_nginx_host_network: false
ingress_publish_status_address: ""
ingress_nginx_nodeselector:
  worker: "true"

...............

metallb_enabled: true
metallb_speaker_enabled: "{{ metallb_enabled }}"
metallb_ip_range:
  - "192.168.101.200-192.168.101.209"
metallb_pool_name: "loadbalanced"
metallb_auto_assign: true
metallb_speaker_nodeselector:
  worker: "true"
metallb_controller_nodeselector:
  worker: "true"
metallb_protocol: "layer2"

nodeselector 라고 되어 있는 부분만 원하는 label 를 넣어주면

 

해당 node 에만 특정 APP 이 뜨도록 설정 할 수 있다.

 

설정을 진행 했던 파일들은 첨부 하여 놓겠다.

 

inventory.ini
0.00MB
addons.yml
0.01MB


댓글