Kubespray ile Kubernetes kurulumu

Fatih KÜÇÜK
KoçSistem
Published in
4 min readDec 15, 2021

Ansible Hazırlıkları

Selinux ve Firewalld’nin Kapatılması

###Tüm sunucular için

sudo setenforce 0

sudo sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config

sudo systemctl disable firewalld; sudo systemctl stop firewalld; sudo systemctl mask firewalld

Git ve Ansible için Gerekli Paketlerin Yüklenmesi

###

sudo yum update

sudo yum install git

sudo yum install epel-release

-- Yukarıdaki komut çalışmazsa"yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" çalıştırarak kurulum yapılır."

sudo yum install python-pip

sudo pip install --upgrade pip

sudo yum install python36

sudo pip3 install --upgrade pip

Kubespray ve Gerekli Bağımlılıkların Yüklenmesi

###Kubespray'in çalıştırılacağı sunucu için

git clone https://github.com/kubernetes-sigs/kubespray.git

cd kubespray

git checkout release-2.16

###Install requirements

sudo pip3 install -r requirements.txt

###Copy ``inventory/sample`` as ``inventory/mycluster``

sudo cp -rfp inventory/sample inventory/kubeops

SSH Anahtarının Yaratılması ve Diğer Node’lara Kopyalanması

ssh-keygen -t rsa

##Bütün K8s VM ler için yapılacaktır.

ssh-copy-id -p 22 mysuperuser@mysuperipaddress

hosts.ini Konfigürasyonunu için Hazırlık

cd $HOME/kubespray

declare -a IPS=(148.20.57.85 148.20.57.86 148.20.57.87 148.20.57.88 148.20.57.90 148.20.57.92)

CONFIG_FILE=inventory/kubeops/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Kubernetes Cluster Konfigürasyon Dosyası (hosts.ini)

Ansible’ın Tüm Node’lara Erişiminin Kontrolü

ansible -i inventory/kubeops/hosts.yaml -m ping all

Kubernetes Node Hazırlıkları

Docker, K8s on K8s Node’larının Silinmesi ve jq Kurulumu

sudo docker rm $(sudo docker ps -aq) -f

sudo docker rmi $(sudo docker images -q) -f

sudo kubeadm reset

sudo yum remove kubeadm kubectl kubelet kubernetes-cni kube* -y

sudo yum autoremove

sudo rm -rf ~/.kube

###Install jq

(sudo yum install epel-release -y; sudo yum install jq -y)

K8s Versiyon Belirlenmesi

sudo inventory/kubeops/group_vars/k8s_cluster/k8s-cluster.yml

Kurulum Öncesi Alınan Hatalar ve Çözümleri

Ansible script çalışırken yetki hataları aldık.

sudo vi /etc/sudoers — sahip !BASH ve !SHELL kaldırıldı

hosts.ini dosyasında kırmızı ile işaretli olan yer hostname olmalı. Eğer başka bir isim verirseniz, script çalışırken sunucunun ismini güncelliyor.

inventory/kubeops/group_vars/all/all.yml dosyası içerisinde DNS adresinin girilmesi gerekiyor. Girilmediği zaman /etc/resolv.conf sıfırlanıyor ve sunucu internete çıkamıyor.

Ansible script çalışırken docker hatası aldı ve servis durdu.

sudo rm /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl start docker -l
sudo systemctl status docker -l

Ansible script kubespray-2.16.0/inventory/credentials altına bir şey oluşturmaya çalışıyor fakat yetki hatası alıyor.

sudo chmod 755 -R /home/sahip/kubespray/

Cluster Kurulumu

Kurulum Komutları

cd $HOME/kubespray

ansible-playbook -i inventory/kubeops/hosts.yaml cluster.yml --become

15–20 dakika sürebilir…

Kubeconfig

sudo mkdir -p $HOME/.kube

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

kubectl get nodes

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

kubectl get nodes

  • Kurulumlar tamamlandıktan sonra master sunucular için taint eklenmesi gerekmektedir. Bu sayede master sunucularda applicationlar çalıştırılmamış olur.
  • Worker olan sunucuları belirtmek için label verilir.
  • Storage olarak kullanılan sunucular için; uygulama sunucuları bu sunucularda çalıştırılacaksa label, çalıştırılmayacaksa taint verilmesi gerekmektedir.

Taint-Label

kubectl taint nodes <MASTERNODE_NAME> node-role.kubernetes.io/master:NoSchedule

kubectl label nodes <WORKERNODE_NAME> kubernetes.io/role=worker

Cluster’ Yeni Node Eklemek

Cluster’a yeni bir node ekleneceği zaman “inventory/kubeops/hosts.yaml” içerisinde, master ya da worker olma durumuna göre ilgili yerlere bu node eklenir.

Kurulum Komutları

cd $HOME/kubespray

ansible-playbook -i inventory/kubeops/hosts.yaml upgrade-cluster.yml --become

Bonus: GitOps — AzDO Pipeline

Kubespray ile Azure Pipeline içerisinde otomatik olarak Kubernetes Cluster oluşturma, güncelleme ve silme işlemelerini yapabilmekteyiz. Tasklarda bulunan custom conditionlar ile bunu yönetmekteyiz.

Create & Copy SSH Certificate

Sunuculara ssh ile erişebilmemiz için sertifika oluşturulması ve sunuculara kopyalanması gerekmektedir.

Install

Upgrade

Pipeline çalıştırılmadan önce inventory/kubeops/group_vars/k8s_cluster/k8s-cluster.yml dosyasında bulunan versiyon değiştirilmeli.

k8s-cluster.yml## Change this to use another Kubernetes version, e.g. a current beta release
kube_version: v1.20.9

Pipeline YAML

--

--

Fatih KÜÇÜK
KoçSistem

Fatih is a technology lover with interest in DevOps, Agile, Container and Container Orchestration.