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을 실행 한다. 아무 문제 없이 완료 되면 결과를 확인 할 수 있다.