DEV Community

Fatih ASLAN
Fatih ASLAN

Posted on

Kubeadm ile Kubernetes Cluster Install (3Node=1Master+2Worker) on Ubuntu20LTS

Kubeadm ile Kubernetes Cluster kurulumu...

NAME                STATUS   ROLES                  AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
kubernetes-master   Ready    control-plane,master   122m   v1.23.3   10.10.10.113  <none>        Ubuntu 20.04.3 LTS   5.4.0-97-generic   containerd://1.5.5
kubernetes-node01   Ready    <none>                 115m   v1.23.3   10.10.10.114  <none>        Ubuntu 20.04.3 LTS   5.4.0-97-generic   containerd://1.5.5
kubernetes-node02   Ready    <none>                 115m   v1.23.3   10.10.10.115  <none>        Ubuntu 20.04.3 LTS   5.4.0-97-generic   containerd://1.5.5
Enter fullscreen mode Exit fullscreen mode

1- Tüm Node'ler de çalıştırılmalıdır.

sudo vim /etc/hosts

10.10.10.113 kubernetes-master
10.10.10.114 kubernetes-node01
10.10.10.115 kubernetes-node02
Enter fullscreen mode Exit fullscreen mode

Gerekli paketleri kuralım.

sudo apt update && sudo apt -y install curl apt-transport-https vim git wget gnupg2 software-properties-common ca-certificates
Enter fullscreen mode Exit fullscreen mode

Akabinde swap alanını kapatalım.

sudo swapoff -a
sudo sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab
Enter fullscreen mode Exit fullscreen mode

Şimdi container runtime kurulumu yapacağız. Alternatifler containerd, docker ve cri-o'dur fakat kubernetes dockershim deprecation yaptığı için biz containerd yapacağız, zaten default olarak containerd geliyor.

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

sudo apt install -y containerd

sudo mkdir -p /etc/containerd

sudo containerd config default | sudo tee /etc/containerd/config.toml

sudo systemctl restart containerd.service

#To use the systemd cgroup driver, "set plugins.cri.systemd_cgroup = true" in /etc/containerd/config.toml. When using kubeadm, manually configure the cgroup driver for kubelet
Enter fullscreen mode Exit fullscreen mode

Bu arada container runtime Unix domain socket yolları aşağıdaki gibidir.

Docker      > /var/run/docker.sock
Containerd  > /run/containerd/containerd.sock
Cri-o       > /var/run/crio/crio.sock
Enter fullscreen mode Exit fullscreen mode

Şimdi ise kubernetes paketlerini kuralım.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update
sudo apt -y install kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
kubectl version --client && kubeadm version
Enter fullscreen mode Exit fullscreen mode

2- Sadece Master Node'sinde çalıştırılmalıdır.

Bu aşamada POD Network'ünü de oluşturacağız. Alternatifler Calico, Canal, Flannel, Romana ve Weave'dir. Biz Calico kurulumu yapacağız.
Kubeadm init ile Cluster'ı oluştururken bunu(--pod-network-cidr) dikkate alacağız.

#calico.yaml dosyasındaki ip bilgisine uygun olarak, bir pod network range'i belirleyerek kubernetes cluster'ımızı oluşturabiliriz,
#subneti "vi calico.yaml" ile değiştirmek istersek, aşağıdaki komutta da ilgili subneti belirtmeliyiz.

curl https://docs.projectcalico.org/manifests/calico.yaml -O

sudo kubeadm init --pod-network-cidr=192.168.0.0/16
Enter fullscreen mode Exit fullscreen mode

Çıktı aşağıdaki gibi olmalıdır. Hem aşağıdaki adımları takip edeceğiz hem de kubeadm join ile cluster'a yeni node'ler ekleyeceğiz.

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.10.10.113:6443 --token 6sdzxn.pvgby7g42xq59mfb \
    --discovery-token-ca-cert-hash sha256:c4de5f8322be732828565761ed82274d31f282591017b64ef70891f00bc838a8
Enter fullscreen mode Exit fullscreen mode

Hemen yapalım.

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

#export KUBECONFIG=/etc/kubernetes/admin.conf olarak direk çalıştırmıyorum çünkü permission hatası alırım,
export KUBECONFIG=.kube/config
Enter fullscreen mode Exit fullscreen mode
sudo systemctl status kubelet.service
Enter fullscreen mode Exit fullscreen mode

Hemen calico'yu da deploy edelim. Dosyayı yukarda indirmiştik ve cluster'ı ona göre init etmiştik.

kubectl apply -f calico.yaml
Enter fullscreen mode Exit fullscreen mode

Kubeconfig dosyasinin bulundugu dizin, manifestleri, api-server ve etcd'nin manifestlerini incelemek isterseniz,

ls /etc/kubernetes
ls /etc/kubernetes/manifests
sudo more /etc/kubernetes/manifests/etcd.yaml
sudo more /etc/kubernetes/manifests/kube-apiserver.yaml
Enter fullscreen mode Exit fullscreen mode

Cluster'ı gözlemleyebilirsiniz.

kubectl cluster-info

kubectl get pods -A [--watch]

kubectl get nodes -o wide

#Master'da init sürecinde token bilgisi verilmisti eğer not almadıysanız aşağıdaki komut ile master node üerinden token'ınızı listeleyebilirsiniz,
kubeadm token list

#Var olan token'ı kaydetmediyseniz, elde etmek için,
kubeadm token create --print-join-command

#Master uzerinden ca cert hash'i elde etmek için,
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Enter fullscreen mode Exit fullscreen mode

3- Sadece Worker None'sinde çalıştırılmalıdır.

Yukarıda master node'yi oluştururken elde ettiğimiz ya da not almadıysak var olan token'ı tekrar elde ettiğimiz komut vasıtasıyla worker node'leri cluster'a dahil edelim.

#sudo kubeadm join <ip>:6443 --token <token> --discovery-token-ca-cert-hash <ca_cert_hash>

sudo kubeadm join 10.10.10.113:6443 --token 6sdzxn.pvgby7g42xq59mfb \
    --discovery-token-ca-cert-hash sha256:c4de5f8322be732828565761ed82274d31f282591017b64ef70891f00bc838a8
Enter fullscreen mode Exit fullscreen mode

Tekrar cluster'ın durumunu gözlemleyebilirisiniz.

Son olarak bashrc'yi edit'leyerek aşağıdaki satırları ilgili node'lere ekleyelim.

sudo vi .bashrc
Enter fullscreen mode Exit fullscreen mode

Tüm Node

swapoff -a
Enter fullscreen mode Exit fullscreen mode

Sadece MASTER/S Node

swapoff -a
export KUBECONFIG=.kube/config
Enter fullscreen mode Exit fullscreen mode

NoT : Ek bilgi

kubeadm init parametreleri:

--control-plane-endpoint : set the shared endpoint for all control-plane nodes. Can be DNS/IP

--pod-network-cidr : Used to set a Pod network add-on CIDR

--cri-socket : Use if have more than one container runtime to set runtime socket path

--apiserver-advertise-address : Set advertise address for this particular control-plane node's API server

Örnek olarak 3 ya da daha fazla Master Node'yi Haproxy ve Keepalived aracılığı ile eklemek isterseniz kubeadm init'i aşağıdaki gibi çalıştırmalısınız.

Yani --control-plane-endpoint adresi belirlediğiniz vrrp olacak, --apiserver-advertise-address ip'si de ilk master node'nizin ip'sini yazabilirsiniz.

sudo kubeadm init --control-plane-endpoint="10.10.10.200:6443" --apiserver-advertise-address=10.10.10.113 --pod-network-cidr=192.168.0.0/16 --upload-certs
Enter fullscreen mode Exit fullscreen mode

Top comments (0)