CRI-O container runtime ve kubeadm ile Kubernetes Cluster kurulumu
bu yazımda cri-o runtime kullanarak hard-way kubernetes cluster provision edeceğiz.

daha önce docker ve containerd clusterları kurmuş ve medium a eklemiştim. özellikle docker ın deprecated olacak olmasından dolayı artık kubernetes clusterlarında yeni container runtimelar kullanmak şart oldu.
containerd bunlardan biri.
şimdi de cri-o runtime ile kubernetes kuracağız.
lab ortamı için google cloud kullanacağım. size 3 aylık 300$ free tier verdiği için yapabilceğiniz şeylerin çok sınırı yok ve devamlı free tier alarak cloud konusunda yetkinliğinizi artırabilirsiniz.
öncelikle 2 adet sunucu kuracağım, ubuntu 18.04 kullanacağım.

2 sunucu üzerinde de gireceğimiz configler olacak, daha sonra master ve worker ayrı configler gireceğiz.
sed -i '/swap/d' /etc/fstab
swapoff -a
systemctl disable --now ufw
makine IP lerinizi etc/hosts üzerinde update edeceğiz.
cat >>/etc/hosts<<EOF
10.166.0.4 k8s-master
10.166.0.5 k8s-worker
EOF
cri-o için kernel ayarlarını yapacağız.
cat >>/etc/modules-load.d/crio.conf<<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
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
sırada cri-o paketlerini yüklememizde. burada dikkat edilmesi gereken VERSION variable ile kubernetes versiyonuna uygun cri-o yüklememiz.
OS=xUbuntu_18.04
VERSION=1.21
cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
EOFcat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /
EOF
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers-cri-o.gpg add -
sudo apt-get update
sudo apt-get install cri-o cri-o-runc crictl
sudo systemctl daemon-reload
sudo systemctl enable crio --now
cri-o runtime ı kurduk ve servisi başlattık.

crictl komutu ile durumuna bakabiliriz.
crictl için “sudo apt-get install cri-tools” yüklememiz yeterli.

kubernetes componentlerini yükleyeceğiz sırada. kubeadm ile cluster kuracağımız için kubeadm kullanacağız.

sudo apt-get install -y apt-transport-https ca-certificates curlsudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgecho "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get update
sudo apt-get install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
sudo apt-mark hold kubelet kubeadm kubectl
buraya kadar yapılan işlemlerin tamamı iki node üzerinde de yapıldı.
MASTER NODE
master üzerinde kubeadm ile cluster i initialize edeceğiz.
“kubeadm config images pull” dersek hangi imageleri kullanacağımızı görebiliriz.

ardından pod networkü ile kubeadm init yapıyoruz.
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
bu komutu girdikten sonra cluster a dahil olması için token verecek bunu workerde kullanacağız.

burada en alt kısımda olan token ile worker i cluster a dahil edeceğiz. bu token ı bir yere not alıp sonra tekrar ekleyeceğiniz zaman kullanabilirsiniz.
WORKER NODE
worker üzerinde çalıştırıyoruz.

cluster a dahil olmuş oluyor.
CLUSTER
kubernetes clusterı isterseniz master node üzerinden yönetebilir isterseniz kubeconfig dosyasını alıp farklı bir node üzerinden kubectl çalıştırabilirsiniz.
ben burada master node üzerinde kubectl kurmuştum oradan komutları çalıştıracağım.
fakat bunun için öncelikle kubectl in config e baktığı yere bu dosyayı koymamız gerekiyor. degault olarak /etc/kubernetes altında bulunuyor. olması gereken yer root directory de .kube file ın içi.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

gördüğünüz gibi worker node da görünmekte, ama status ler not-ready durumda. bunun sebebi kubernetes network için ayrı bir operator e ihtiyaç duyar en bilindikleri. calico, flannel ve weavenet dir.
ben calico kullanacağım.

kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml
direk komutu çalıştırınca CRD ler ile clustera kurmuş olacak.

kurduktan sonra tekrar baktığınızda nodeların ready durumuna geldiğini görebilirsiniz.
kubernetes kurulumndan sonra görsel bir şekilde durumunu izlemek hatta bir GUI üstünden işlemler yapmak istiyorsanız ek olarak LENS kullanabilirisniz.
yazıma aşağıdaki linkten ulaşabilirsiniz.
bir sonraki yazımda görüşmek üzere.
h.a.s.