High Available Multiple Master Kubernetes Cluster Kurulumu
Yapının ayakta olabilmesi için minimum üç adet Master node’u sunucuda ayakta olmalı iki adet
master ayakta olduğu sürece diğer master node’ları kapalı olsa dahi cluster’a erişim
sağlanabilmektedir.
Keepalived ve HAProxy kurulumu yapıldıktan sonra konfigürasyon ayarlamalarının yapılması
gerekmektedir. Bu aşamada her iki loadbalancer node’unda da konfigürasyon ayarlamalarının
yapılması gerekmektedir. Her iki loadbalancer node’una da kurulum yapılmalıdır.
global_defs {
notification_email {
}
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance haproxy-vip {
state BACKUP
priority 100
interface ens192 # Mevcut Network Kart
virtual_router_id 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.1.22 # Mevcut Loadbalancer Makine IP
unicast_peer {
192.168.1.28 # Diğer Loadbalancer IP
}
virtual_ipaddress {
192.168.1.32/24 # Virtual IP Adresi
}
track_script {
chk_haproxy
}
}
EOF
Devamında Keepalived için aşağıdaki script yazılmalıdır.
$ cat >> /etc/keepalived/check_apiserver.sh <<EOF
#!/bin/sh
errorExit() {
echo "*** " 1>&2
exit 1
}
curl --silent --max-time 2 --insecure https://localhost:6443/ -o
/dev/null || errorExit "Error GET https://localhost:6443/"
if ip addr | grep -q 192.168.1.32; then
curl --silent --max-time 2 --insecure https://192.168.1.32:6443/ -o
/dev/null || errorExit "Error GET https://192.168.1.32:6443/"
fi
EOF
HAProxy Konfigürasyonu
$ cat >> /etc/haproxy/haproxy.cfg <<EOF
global
log /dev/log local0 warning
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
log global
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend kube-apiserver
bind *:6443
mode tcp
option tcplog
default_backend kube-apiserver
backend kube-apiserver
mode tcp
option tcplog
option tcp-check
balance roundrobin
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s
maxconn 250 maxqueue 256 weight 100
server kube-apiserver-1 192.168.1.30:6443 check
server kube-apiserver-2 192.168.1.24:6443 check
server kube-apiserver-3 192.168.1.31:6443 check
$ systemctl restart haproxy && systemctl enable haproxy
$ systemctl restart keepalived && systemctl enable keepalived
Kubernetes Cluster Kurulumu
Gerekli kubernetes paketlerinin kurulumu tamamlanıp host dosyaları düzenlendikten
aşağıdaki komut ile devam edilir. Endpoint olarak keepalived virtual ip atanır. Cluster bu ip
üzerinde çalışacaktır. 192.168.1.30 numaralı makine birinci master sunucusudur.
kubeadm init --control-plane-endpoint="192.168.1.32:6443" --apiserver
advertise-address=192.168.1.30 --upload-certs --ignore-preflight
errors=all
Başarılı bir şekilde kurulum yapıldıktan sonra iki adet join command elde edilmektedir. Master
node’ları cluster’a eklemek için birinci komut worker nodeları eklemek için ikinci komut
kullanılır.
High Availablitiy Testi
Bir numaralı master node’u kapatıldığında cluster’a erişim hala sağlanmaktadır.