1. Introduction
- Elasticsearch 6.8을 Kubernetes에 설치
- Kubernetes는 Bare-Metal에 직접 설치한 버전
- LoadBalancer가 없어 MetalLB 사용
- 이번 글에서는 k8s에 Elasticsearch Cluster를 구성하기 위한 Load-Balancer 설치 및 Service를 구동함
2. Environment
- CentOS 7.9
- Kubernetes 1.18
- Elasticsearch 6.8
- MetalLB 0.9.5
- Calico 3.8.9
3. Install ipvs & Reload kube-system
- Metal Load-Balancer를 사용하기 위해서는 Kubernetes가 ipvs를 사용해야 한다.
- 먼저 ipvs 설치
- Reload Kube-system
- Main Control Plane Node에서 작업
- Elasticsearch는 일반적으로 여러 개의 노드로 클러스터를 구성함
- 따라서 Service의 Publishing Type으로 Load Balancer를 쓰는게 적당함
- 하지만, 처음에는 Bare-metal k8s에는 Load Balancer 없다.
- 공식문서에 따르면, “클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다.” 인데… 우린 k8s를 직접 설치했기 때문이다.
- 인그레스(Ingress)를 사용할 수도 있다고 한다. (이 부분은 실패함…)
- Bare-Metal에서 Load Balancer Type을 사용할 수 있게 해주는 방법은 Metal LB을 설치하는 것
- Layer 2와 BGP, 두 가지 방식이 있음
- 연구실의 Network는 소규모이고, 아이피 관리가 잘 되지 않아, Layer 2를 사용
- Install Metal LB
- Configuration Metal LB
5. Create Service
- Elasticsearch는 두 개의 포트를 사용(9200, 9300)
- 9200은 Rest API, 간단하게 말하면 유저와의 통신
- 9300은 Node Communicate을 위해 사용
-
따라서, 서비스도 두 가지가 필요
- 먼저 Cluster 간 통신을 위한 포트
- Pod들 간의 통신이기 때문에, 굳이 외부로 아이피를 공개할 필요가 업승ㅁ
- ClusterIP type으로 생성
- metadata.name은 기억 필수, 추후 elasticsearch 환경변수에서 사용함
- 6.8 버전에서는 discovery.zen.ping.unicast.hosts에 사용
- 두번 째는, Rest API Port
- 이는 유저와 통신을 담당해야하는 부분이라서 외부 IP가 필요
- Elasticsearch Cluster를 3개로 구성할 것이기 때문에, Load Balancer Type으로 사용
6. Reference