top of page
  • Yazarın fotoğrafıemirhanaydin

Kubernetes HA (Highly Available) Cluster Kurulumu



Load Balancer

10.10.0.51

Ubuntu 20.04

512M RAM

1 CPU

Load Balancer

10.10.0.52

Ubuntu 20.04

512M RAM

1 CPU

Master

10.10.0.101

Ubuntu 20.04

2G RAM

2 CPU

Master

10.10.0.102

Ubuntu 20.04

2G RAM

2 CPU

Master

10.10.0.103

Ubuntu 20.04

2G RAM

2 CPU

Worker​

10.10.0.201

Ubuntu 20.04

2G RAM

2 CPU


Virtual IP: 10.10.0.100
Keepalived ve Haproxy'yi yükleyelim


sudo apt update && apt install -y keepalived haproxy

Sonrasında her iki load balancer node’unda da Keepalived konfigürasyonlarını yapmamız gerekiyor.


API server’ın çalışıp çalışmadığını kontrol edebilmek için bir kontrol script’ine ihtiyacımız var. Sanal IP adresinize göre düzenleyip her iki load balancer node’u üzerinde de çalıştırın.


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 10.10.0.100; then
  curl --silent --max-time 2 --insecure https://10.10.0.100:6443/ -o /dev/null || errorExit "Error GET https://10.10.0.100:6443/"
fi
EOF

chmod +x /etc/keepalived/check_apiserver.sh


Keepalived konfigürasyonunu yapalım burada sanal ipinizi değiştirmeyi ve "interface eth1" network interface adınızı değştirmeyi unutmayın.

cat >> /etc/keepalived/keepalived.conf <<EOF
vrrp_script check_apiserver {
  script "/etc/keepalived/check_apiserver.sh"
  interval 3
  timeout 10
  fall 5
  rise 2
  weight -2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 1
    priority 100
    advert_int 5
    authentication {
        auth_type PASS
        auth_pass mysecret
    }
    virtual_ipaddress {
        10.10.0.100
    }
    track_script {
        check_apiserver
    }
}
EOF


Keepalived servisini aktif ediyoruz.

sudo systemctl enable --now keepalived

HAProxy Konfigürasyonu

Konfigürasyon dosyamıza masterlarımızın hostnamelerini ve ipilerini yazıyoruz.

Her iki LoadBalancer üzerinde de çalıştırılacak.

cat >> /etc/haproxy/haproxy.cfg <<EOF

frontend kubernetes-frontend
  bind *:6443
  mode tcp
  option tcplog
  default_backend kubernetes-backend

backend kubernetes-backend
  option httpchk GET /healthz
  http-check expect status 200
  mode tcp
  option ssl-hello-chk
  balance roundrobin
    server kmaster1 10.10.0.101:6443 check fall 3 rise 2
    server kmaster2 10.10.0.102:6443 check fall 3 rise 2
    server kmaster3 10.10.0.103:6443 check fall 3 rise 2

EOF

Çalıştırdıktan sonra HAProxy servisini aktif edip yeniden başlatalım.

sudo systemctl enable haproxy && systemctl restart haproxy

Master ve Worker Node Konfigürasyonları

Swap’i kapatalım.


sudo swapoff -a; sed -i '/swap/d' /etc/fstab
Firewall’ı devre dışı bırakalım.

systemctl disable --now ufw
Kernel modüllerini aktif edelim.
{
cat >> /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter
}


Kernel ayarlarını yapalım.


{
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system
}

Container runtime için containerd kurulumunu yapalım.



{
  apt update
  apt install -y containerd apt-transport-https
  mkdir /etc/containerd
  containerd config default > /etc/containerd/config.toml
  systemctl restart containerd
  systemctl enable containerd
}
Kubernetes bileşenlerini kurabilmek için gerekli repository’yi ekleyelim.


{
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
}
Gerekli Kubernetes bileşenlerini kuralım.


{
  apt update
  apt install -y kubeadm=1.22.0-00 kubelet=1.22.0-00 kubectl=1.22.0-00
}

Kubernetes Cluster’ı Oluşturma

kmaster1

Kubernetes cluster başlatalım


kubeadm init --control-plane-endpoint="10.10.10.100:6443" --upload-certs --apiserver-advertise-address=10.10.0.101 --pod-network-cidr=192.168.0.0/16

Copy the commands to join other master nodes and worker nodes.


Deploy Calico network


kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml

Cluster Networking

Cluster’ımızı başarıyla oluşturduk. Şimdi POD’ların kendi aralarındaki iletişimleri, servislerle arasındaki iletişimi ve dış dünyayla olan iletişimlerini yönetebilecek bir network plugin’ine ihtiyacımız var. Burada Flannel, Weave Net, Calico, Canal gibi birçok seçeneğimiz var ben sağladığı esneklik ve performans nedeniyle Calico ile devam edeceğim.

Aşağıdaki komutu master01 node’unda iken çalıştıralım.



Aşağıda ki komudu kmaster1 de çalıştıralım.

kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://projectcalico.docs.tigera.io/manifests/calico.yaml

Master Node’ları Cluster’a Dahil Etme

Cluster kurulumumuzu tamamlamak için son olarak geri kalan master ve worker node’ları dahil etme işlemlerini yapacağız.

kmaster2 ve kmaster3 node’larını dahil etmek için

“You can now join any number of the control-plane node runiing the following command on each as root:” yazısının altındaki komuta --apiserver-advertise-address parametresini ekleyerek çalıştıralım.


kmaster2 için


kubeadm join 10.10.0.100:6443 --apiserver-advertise-address=10.10.0.102 --token xxx \
        --discovery-token-ca-cert-hash sha256:xxx \
        --control-plane --certificate-key xxx

kmaster3 için


kubeadm join 10.10.0.100:6443 --apiserver-advertise-address=10.10.0.103 --token xxx \
        --discovery-token-ca-cert-hash sha256:xxx \
        --control-plane --certificate-key xxx

Worker Node Cluster’a Dahil Etme


Worker node cluster’a dahil etmek için worker nodelar da


“Then you can join any number of worker nodes by running the following on each as a root:” yazısının altındaki komutunu olduğu gibi çalıştıralım.



kubeadm join 10.10.0.100:6443 --token xxx \
        --discovery-token-ca-cert-hash sha256:xxx


Cluster kurulumumuz bitti. Şimdi yapımızın load balancer’lardan birini kaybettiğinde yada master node’larından bir tanesini dahi kaybetse çalışabilir olduğunu görebilirsiniz.


197 görüntüleme0 yorum

Son Yazılar

Hepsini Gör

Commentaires


bottom of page