Kubespray ile Kubernetes kurulumu
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