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.
Comentários