External ETCD (수정 중)
External etcd 구성은 쿠버네티스 클러스터에서 etcd 컴포넌트를 마스터 노드와 분리하여 외부에 배치하는 것을 의미한다.
etcd는 쿠버네티스 클러스터의 상태 정보를 안전하게 저장하기 위한 신뢰성 있는 분산형 키-값 저장소
이미 마스터 노드에 포함 되어 있는 컴포넌트를 따로 분리 하여 별도에 노드에 배치하여 제일 좋은 점은 보안이라고 볼 수 있다. 그 외에도 몇 가지 장점을 표현 한다면:
-
가용성 향상: etcd를 마스터 노드와 분리하여 외부에 배치하면 신뢰성과 가용성을 향상시킬 수 있다. 마스터 노드에 장애가 발생할 경우에도 etcd 클러스터가 별도로 유지되므로 클러스터의 상태 정보를 안전하게 유지할 수 있다.
-
확장성: 외부 etcd 클러스터를 사용하면 쿠버네티스 클러스터를 확장할 때 좀 더 유연성을 가질 수 있다. etcd 클러스터는 더 많은 리소스를 할당하여 고가용성 및 높은 처리량을 제공할 수 있으며, 대규모 클러스터 운영에 필수적이다.
-
유지 보수 및 업그레이드 용이성: etcd를 외부로 분리하면 클러스터의 유지 보수 및 업그레이드 작업이 간편해진다. 마스터 노드의 유지 보수 작업이 etcd 클러스터에 영향을 미치지 않고 수행될 수 있다.
-
분리된 관리 및 보안: etcd를 외부에 배치하면 마스터 노드에서 실행되는 다른 구성 요소와 분리된 관리와 보안을 제공할 수 있다. etcd 클러스터는 전용 네트워크 또는 보안 그룹을 통해 격리되어 안전한 환경에서 운영될 수 있다.
Etcd 컴포넌트를 마스터 노드에서 분리 하여 배치 하는 작업은 클러스터 생성시 설정을 하면 된다. 이미 Kubespray및 Kubeadm으로 클러스터를 생성 해 보았지만, etcd노드를 분리 하여 해 보지는 않았다. 그래서 이번에는 Kubespray를 통해 쿠버네티스 클러스터를 아래와 같은 구성으로 생성 해 보았다
- Control Node (Ubuntu 22.04): 192.168.1.90
- Master Node (CentOS 7): 192.168.1.150
- Worker Node (CentOS 7): 192.168.160
- ETCD Node (CentOS 7): 192.168.1.170
- ETCD Node 2 (CentOS 7): 192.168.1.180
- ETCD Node 3 (CentOS 7): 192.168.1.190
Kubespray를 통해 클러스터 생성
Kubespray를 통해 쿠버네티스 클러스터 생성 하는 방법은 이미 여기에 정리 해 놓았다. 설정 방법과 진행은 다 동일 하지만 다른 점은 hosts.yml
파일 속 추가 된 내용이다.
vi inventory/mycluster/hosts.yml
all:
hosts:
node1:
ansible_host: 192.168.1.150 # 작업을 실행하기 위해 대상 노드에 연결할 때 사용하는 IP 주소 또는 호스트 이름을 지정하는 필드
ip: 192.168.1.150
access_ip: 192.168.1.150
node2:
ansible_host: 192.168.1.160
ip: 192.168.1.160
access_ip: 192.168.1.160
node3:
ansible_host: 192.168.1.170
ip: 192.168.1.170
access_ip: 192.168.1.170
node4:
ansible_host: 192.168.1.180
ip: 192.168.1.180
access_ip: 192.168.1.180
node5:
ansible_host: 192.168.1.190
ip: 192.168.1.190
access_ip: 192.168.1.190
children:
kube_control_plane: # 마스터 노드 지정 하는 곳
hosts:
node1:
node2:
node3:
kube_node: # 워커 노드 지정 하는 곳
hosts:
node4:
etcd: # etcd 노드 지정 하는 곳
hosts:
node5:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
이렇게 hosts.yml
파일 수정 후 Kubespray Ansible Playbook을 실행 한다. 아무 문제 없이 완료 되면 결과를 확인 할 수 있다.
이제 마스터 노드 쪽에서 클러스터 생성 결과를 확인 하기 위해:
it is normal that when you use the kubectl get nodes
command from your master node, you will not see the etcd nodes included in the output. The kubectl get nodes
command provides information about the worker nodes in your cluster, not the etcd nodes.
Etcd nodes are not considered as part of the worker node pool and are typically not included in the output of the kubectl get nodes
command. Etcd operates as a separate distributed key-value store that stores the cluster's state and configuration information. It is responsible for providing data persistence and coordination among the control plane components.