일반적으로 운영 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 이 뜨도록 설정 할 수 있다.
설정을 진행 했던 파일들은 첨부 하여 놓겠다.
'Kubernetes' 카테고리의 다른 글
[ kubespray ] fatal: [노드명]: FAILED! => {"msg": "module (kube) is missing interpreter line"} (0) | 2024.03.07 |
---|---|
[ Kubernetes ] K8S 1.24 부터 service account 생성 및 token 생성 (5) | 2023.12.03 |
kubernetes 의 pod 내 container 목록 조회 (0) | 2023.05.29 |
[Kubernetes] daemonset 재기동, scale 0, shutdown 방법 (0) | 2023.05.17 |
클러스터 관리 툴 kubeadm vs kubespray 비교 (0) | 2023.05.16 |
댓글