안녕하세요. 정말 오랜만에 글을 쓰게 되었습니다.
회사 업무로 굉장히 바빳던 데다가, 이번에 서버 이전도 함께 진행하게 되어 오래 걸렸습니다.
회사 업무와 업무 사이사이에는 하드웨어 쇼핑을 진행하였습니다.Oracle Cloud infrastructure
는 램은 24GiB로 충분하지만, CPU가 고작 4코어 밖에 할당이 불가능하였습니다.
지금까지는 1코어 8GiB 머신에 k8s를 올려서 워드프레스와 온갖 서비스를 제공하였으나,
성능의 한계를 경험하게 되어 on premise로 구성하게 되었습니다.
글은 약 4개월 만에 쓰게 되었고, 약 3주 정도는 wordpress 접근이 불가능했었습니다.
완벽한 고가용성
기존에는 OCI
의 Network Loadbalancer
와 Instance를 이용하여 k8s를 서비스 하였습니다.
NLB의 장점은 public IP를 받을 수 있다는 점입니다.
게다가 NLB는 당연히 이중화가 되어있죠.
이번에 on premise로 구성하면서도 가용성을 위해 이 NLB
를 사용하고 싶었습니다.
NLB는 종료할일이 없고, OCI VM은 4대로 구성하여 3대가 꺼진다고 하여도 로드 밸런싱이 제공됩니다.
집에 있는 쿠버네티스와 ceph도 3개의 물리 머신으로 quorum이 만족되어있습니다.
마지막으로 쿠버네티스는 3개의 master(server)와 3개의 worker(agent)로 구성하였습니다.
물리머신은 한대까지는 종료되어도 서비스에 지장이 없고,
가상 머신은 워커 노드 한개를 제외한 2개의 워커 노드와 3개의 마스터 노드가 종료되어도 해당 노드에 있는 pod는 서비스하는데 지장이 없습니다.
OCI VM의 역할
NLB가 존재한다고 하여도, NLB는 집에 있는 on premise로 loadbalancing을 제공하지 않습니다.
사실 OCI는 제공을 해주긴 하는데, 유료인데다가 대역폭도 낮습니다.ㅠㅠ
그래서 NLB
에서 OCI
의 인스턴스로 트래픽을 전달하고, OCI
에는 로드밸런싱 애플리케이션과 VPN을 구성하여 on premise의 고가용성을 확보합니다.
이를 위해 gobetween(UDP)
, nginx stream(TCP)
, tailscale(VPN)
을 이용하여 구성하였습니다.
대략 다음과 같은 구성을 가집니다.
네트워크 그림 그린 도구는 GNS3입니다.
OCI 인스턴스에는 성능 차이가 있어서 A1에 가중치가 높습니다.
k8s에도 wordpress는 agent 노드에만 올라가기 때문에 server 노드로 트래픽이 전달 되어도 agent로 전달해주는 역할만 수행합니다.
역시 가중치가 agent에 훨씬 높게 설정 되어있습니다.
마무리
추후 구성 설정 방법에 대해서는 따로 올리도록 하겠습니다.
답글 남기기