일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSV
- CVAT
- jvm
- JavaScript
- kubernetes
- log
- grafana
- ip
- docker
- zookeeper
- Kafka
- helm
- java
- kubeadm
- Vision
- Python
- EC2
- Packet
- tcp
- MAC address
- OS
- aws s3
- AWS
- PostgreSQL
- Spring
- Operating System
- AWS Redshift
- airflow
- kubectl
- Network
- Today
- Total
JUST WRITE
Master Node HA 구성(1) - keepalived 세팅 본문
Master Node HA 구성(1)
Bare Metal Server에 Kubernetes Cluster를 구축하는 업무를 맡게 되었습니다.
총 12대 Server를 1개의 Kubernetes Cluster로 구축하는 업무였습니다.
12대 중 3대를 Master Node, 9대를 Worker Node로 구성하기로 하였습니다.
Master Node를 다수로 구성함으로써 고가용성을 확보하기 위해서였습니다.
keepalived와 HAProxy를 통해 Master Node HA 구성을 해보려고 합니다.
이번 포스팅에서는 먼저 keepalived 세팅을 정리해 보겠습니다.
Master Node, Control Plane
Kubernetes Cluster는 크게 2종류의 Server로 구성합니다.
Master node와 Worker node로 나뉩니다.
Master node는 Cluster를 관리하는 역할입니다.
아래의 Component로 구성되어 있습니다.
- etcd
- kube-apiserver
- kube-scheduler
- kube-controller-manager
- kubelet
- kube-proxy
각 Component가 어떠한 역할인지는 아래 포스팅에서 확인 가능합니다.
Mater Node의 고가용성을 만족하기 위해 3대의 Server로 구성하였으며,
실제로 Cluster를 관리하는 Leader Master는 1대이며 나머지는 대기 상태입니다.
Leader Master에 장애가 생기면 나머지 2대 Server 중 하나가 Leader가 되는 형태로 구성합니다.
keepalived
keepalived는 Virtual IP를 기반으로 고가용성을 제공하는 Tool입니다.
Active 상태의 Master와 Standby 상태의 Backup들로 구성합니다.
Master와 Backup 서버들은 VRRP를 통해 heartbeat를 주고받으며 상태를 체크합니다.
Master에 장애가 발생할 시 우선순위가 제일 높은 Backup이 Virtual IP를 갖는 Active 상태가 됩니다.
keepalived는 고가용성을 보장하기 위해 세팅합니다.
keepalived 설치
먼저 Virtual IP가 준비되야 합니다.
이중화를 위해 배포 서버 2개와 같은 subnet에 남은 IP를 요청해서 받았습니다.
keepalived 설치 전에 Virtual IP 세팅을 위해 2가지 kernel Parameter를 수정한다.
- net.ipv4.ip_nonlocal_bind -> Localhost 주소 외에 Virtual IP를 bind 할 수 있는 Parameter
- net.ipv4.ip_forward -> IP 포워딩할 수 있게 하는 Parameter
$ echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
$ echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
$ sysctl -p
yum을 통해서 간단하게 keepalived를 설치할 수 있습니다.
# 각 Server에 설치
$ yum install -y keepalived
keepalived 설정
설치가 끝나면 keepalived 설정을 해줘야 합니다.
Master와 Backup를 조금 다르게 설정해야 합니다.
/etc/keepalived/keepalived.conf를 수정하면 됩니다.
keepalived 설정값들을 아래와 같이 정리해 보았습니다.
- router_id -> keepalived Server 구분자
- state -> Master, Backup으로 구분
- priority -> 우선순위, 추후 우선순위가 높은 Backup이 Master가 된다.
- authentication -> Master, Backup 동일하게 구성해야 한다.
- virtual_ipaddress -> Virtual IP, Master와 Backup 동일하게 구성
Master keepalived 설정을 아래와 같이 하였습니다.
$ vi /etc/keepalived/keepalived.conf
global_defs {
router_id rtr_0
}
vrrp_instance VI_0 {
state MASTER
interface eth0
virtual_router_id 10
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass P@ssW0rd
}
virtual_ipaddress {
192.168.0.100
}
}
Backup keepalived 설정을 아래와 같이 하였습니다.
state가 MASTER가 아닌 BACKUP으로 설정한 것을 알 수 있습니다.
$ vi /etc/keepalived/keepalived.conf
global_defs {
router_id rtr_1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 10
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass P@ssW0rd
}
virtual_ipaddress {
192.168.0.100
}
}
* 위 설정에서 Password와 Virtual IP는 예시
설정이 끝나고 keepalived 서비스를 구동합니다.
$ systemctl enable keepalived --now
$ systemctl status keeplalived
keepalived 확인
Master로 설정한 Server에서 IP를 확인해 보면 Virtual IP가 생긴 것을 확인할 수 있습니다.
실제로 Virtual IP로 ping을 날리면 정상적으로 가는 것을 확인할 수 있습니다.
$ ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 36:a9:13:03:2e:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.103.101/24 brd 192.168.103.255 scope global eth0
valid_lft forever preferred_lft forever
"inet 192.168.103.110/32 scope global eth0"
valid_lft forever preferred_lft forever
inet6 fe80::34a9:13ff:fe03:2e67/64 scope link
valid_lft forever preferred_lft forever
...
[참고사이트]
'MLOps > Kubernetes' 카테고리의 다른 글
CoreDNS 설정 - Host 강제로 넣기 (0) | 2023.02.12 |
---|---|
Master Node HA 구성(2) - HAProxy 세팅 (0) | 2023.02.02 |
Control Plane Components (0) | 2023.01.21 |
Kubectl auto-completion 세팅 (0) | 2022.12.02 |
AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정 (0) | 2022.12.01 |