Kubernetes HA cluster 3M5W on Rocky Linux 8.5 with kubeadm

Merhaba, bu makalede 3 master 5 worker kubernetes cluster kurulumunun notlarını ileteceğim, şu an en güncel versiyon 1.25 olarak gözlemlenmekte, dilerseniz aynı döküman ile farklı bir versiyonda(belirtilecek) kurabilirsiniz.

Bunlara ek olarak aynı cluster kullanılarak; prometheus-stack, portworx, ingress, metallb, etc. dokumanlarida ileriki tarihlerde planlanmakta, Bahsedilen dökümanlar için asagidaki belirtilen altyapiyi kullanacaktır, işletim sistemi ve kernel versiyonu; Rock-Linux 8.5 4.18.0

pretest-kubernetes-master-0110.10.10.111
pretest-kubernetes-master-0210.10.10.112
pretest-kubernetes-master-0310.10.10.113
pretest-kubernetes-worker-0110.10.10.121
pretest-kubernetes-worker-0210.10.10.122
pretest-kubernetes-worker-0310.10.10.123
pretest-kubernetes-worker-0410.10.10.124
pretest-kubernetes-worker-0510.10.10.125

Kuruluma başlamadan önce master ve worker sunucuların /etc/hosts dosyasına ekleyelim.

Aşağıdaki belirtilen bölüme kadar (Master ve Worker ayrımı) olan komutları tüm sunuculara uygulayacağız.

Güncelleştirmeler ile başlayabiliriz.

dnf update

Selinux ve swap kapatılması;

#selinux disable
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo setenforce 0
#disable swap
sudo sed -i '/swap/d' /etc/fstab
sudo swapoff -a

Network tanımları için gerekli adımlar;

sudo cat << EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo cat << EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo sysctl --system

Containerd kurulumuna başlayacağız,

sudo dnf install dnf-utils -y
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y containerd.io
containerd config default > /etc/containerd/config.toml

vim /etc/containerd/config.toml

#To use the systemd cgroup driver in /etc/containerd/config.toml with runc, set;
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
sudo systemctl restart containerd
sudo systemctl enable containerd

Master ve worker nodelara aşağıdaki firewall portlarının eklenmesi gerekmektedir.

#Kubernetes master firewall ports
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10251/tcp
sudo firewall-cmd --permanent --add-port=10252/tcp
sudo firewall-cmd --reload
sudo modprobe br_netfilter
sudo sh -c "echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables"
sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"
#Kubernetes worker firewall ports
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp                                                  
sudo firewall-cmd --reload
sudo modprobe br_netfilter
sudo sh -c "echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables"
sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"

Kubernetes repolarını ekliyoruz, kuruyoruz;

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

Dilerseniz eski bir versiyonda kurabilirsiniz. Örn: dnf install kubelet-1.25.4-0

sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo dnf install -y kubelet-1.25.4-0 kubeadm-1.25.4-0 kubectl-1.25.4-0 --disableexcludes=kubernetes

Versiyon yanlış bir güncelleme ile değişmesin diye kilitliyoruz (opsiyonel)

sudo dnf install yum-plugin-versionlock -y
sudo dnf versionlock kubelet kubeadm kubectl

Servisi ayağa kaldırıyoruz.

sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service

Bu noktada, sadece “master-01” sunucusunda aşağıdaki komutu uygulayabiliriz, kısaca açıklayacak olursak;

–pod-network-cidr – podlar için kullanacağı nıznetwork aralığının belirlenmesi; https://blog.laputa.io/kubernetes-flannel-networking-6a1cb1f8ec7c

–apiserver-advertise-address – Api istekleri masterın karşılayacağını belirtiyoruz, aksi takdirde default network tanımını kullanıyor detay için; https://github.com/kubernetes/kubeadm/issues/1390#issuecomment-462738257

–control-plane-endpoint – isterseniz bir lb kullanabilirsiniz, öyle bir durumda belirtmeniz için; https://stackoverflow.com/questions/57845534/why-is-kubeadm-configs-controlplaneendpoint-necessary

–upload-certs – Sertifikaları diğer master nodelar arasında paylaşılmasının sağlanılması; https://blog.scottlowe.org/2020/02/18/setting-up-k8s-on-aws-kubeadm-manual-certificate-distribution/

#master01
kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address 10.10.10.111 --control-plane-endpoint 10.10.10.111:6443 --upload-certs

Çıktı olarak aşağıdaki gibi bir ekran görmeliyiz;

Gördüğümüz üzere master ve worker nodelar için 2 ayrı join çıktısı var,

          #output;

You can now join any number of the control-plane node running the following command on each as root:

kubeadm join 10.10.10.111:6443 --token xxxxxxxx:xxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxx \
--control-plane --certificate-key xxxxxxxx

You can now join any number of the worker node running the following command on each as root:

kubeadm join 10.10.10.111:6443 --token xxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxx

Join komutlarını girmeden, kubernetes altyapısındaki iletişimin sağlanılabilmesi için, (pod – node – svc etc.) (network plugin yokken diğer master ve worker nodeları clustera dahil ederseniz, doğal olarak NotReady göreceksiniz,) bir network plugini kurmalıyız,

Calico Flannel Weave gibi çokça seçenek var, Weave kurmayı tercih ediyorum https://platform9.com/blog/the-ultimate-guide-to-using-calico-flannel-weave-and-cilium/

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

Bu işlemlerden sonra her sunucuda join işlemini gerçekleştiriyoruz, config dosyasını .kube altında oluşturuyoruz (kubectl için)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
NAME                           STATUS   ROLES           AGE     VERSION
pretest-kubernetes-master-01   Ready	control-plane   8m15s   v1.25.2
pretest-kubernetes-master-02   Ready    control-plane   46s     v1.25.2
pretest-kubernetes-master-03   Ready    control-plane   43s     v1.25.2
pretest-kubernetes-worker-01   Ready    <none>          64s     v1.25.2
pretest-kubernetes-worker-02   Ready    <none>          56s     v1.25.2
pretest-kubernetes-worker-03   Ready    <none>          62s     v1.25.2
pretest-kubernetes-worker-04   Ready    <none>          58s     v1.25.2
pretest-kubernetes-worker-05   Ready    <none>          60s     v1.25.2

Kaynak: #https://citizix.com/how-to-setup-kubernetes-cluster-on-rocky-linux-8-using-kubeadm/ #https://www.linuxtechi.com/install-kubernetes-cluster-on-rocky-linux/ #https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/#stacked-control-plane-and-etcd-nodes

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.