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-01 | 10.10.10.111 |
pretest-kubernetes-master-02 | 10.10.10.112 |
pretest-kubernetes-master-03 | 10.10.10.113 |
pretest-kubernetes-worker-01 | 10.10.10.121 |
pretest-kubernetes-worker-02 | 10.10.10.122 |
pretest-kubernetes-worker-03 | 10.10.10.123 |
pretest-kubernetes-worker-04 | 10.10.10.124 |
pretest-kubernetes-worker-05 | 10.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