Genel

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.