1.Kubernetes cluster kurulumu 1 master,3 worker server gereklidir.

2.serverlara root kullanıcıdan erişip nanoyu indirelim.

yum install -y nano

3.root user kullanabilmek için ssh üzerinden root accessi açalım.

sed -i “s/PasswordAuthentication no/PasswordAuthentication yes/g” /etc/ssh/sshd_config && sed -i “s/#PermitRootLogin yes/PermitRootLogin yes/g” /etc/ssh/sshd_config

4.aşağıdaki komutu kullanarak root için password oluşturalım.

passwd

5.ssh serveri restart edelim.

systemctl restart sshd.service

6.centos 7 serverları güncelleyelim.

yum update -y

7.firewalli disable edelim.

systemctl stop firewalld && systemctl disable firewalld

8.selinuxu disable edelim.

sed -i -e s/enforcing/disabled/g /etc/sysconfig/selinux && sed -i -e s/permissive/disabled/g /etc/sysconfig/selinux && setenforce 0 && sed -i –follow-symlinks ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux

9.master serverin /etc/hostuna sunucuların ip tanımlamalarını ekleyelim.

cat << EOF >> /etc/hosts
192.168.10.50 master
192.168.10.51 node1
192.168.10.52 node2
192.168.10.53 node3
EOF

10.master server için ssh key üretelim.

ssh-keygen -q -f ~/.ssh/id_rsa -N “”

11.master serverdaki ssh keyi diğer serverlara kopyalayalım.

for host in master node1 node2 node3 ; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; done
 

12.Her bir servera ntp serveri kuralım.

yum -y install ntp && 

systemctl start ntpd && 

systemctl enable ntpd && 

ntpdate -u -s 0.tr.pool.ntp.org 1.tr.pool.ntp.org 2.tr.pool.ntp.org 3.tr.pool.ntp.org && 

systemctl restart ntpd

13.Tarih ve saatin timezonunu ayarlayalım.

timedatectl set-timezone Europe/Istanbul && 

timedatectl set-ntp true && 

date

14. Tüm sunucularda br_netfilter kernel modelü yüklenir ve kalıcı hale getirilir

modprobe br_netfilter && 

echo ‘1’ > /proc/sys/net/bridge/bridge-nf-call-iptables

15. Aşağıdaki komutlar çalıştırılarak tüm sunuculara python kurulumu yapılır;

yum install -y epel-release && 

yum install –y python36 python36-devel python36-pip && 

pip3 install –upgrade pip

16.master serverda bashrc dosyasına aşağıdaki path bilgilerini ekleyelim.

cat << EOF >> ~/.bashrc
export PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'
EOF

17.master serverdaki bahrc dosyasındaki sourceyi yükleyelim.

source ~/.bashrc

18.sunucuları restart edelim.

reboot

19. aşağıdaki komutlar yardımıyla güncel Kubespray sürümü yerele indirilerek açılır

export KUBESPRAY_RELEASE=v2.10.4 && 

curl -o kubespray.tar.gz -L https://github.com/kubernetes-sigs/kubespray/archive/$KUBESPRAY_RELEASE.tar.gz && 

mkdir kubespray && 

tar -xzf kubespray.tar.gz -C kubespray –strip-components=1

20. Oluşturulan kubespray klasörüne gidilir;

cd kubespray

21. Bu dizinde bulunan requirements.txt dosyası  yardımıyla bağımlı paketlerin kurulumu yapılır;

pip3 install -r requirements.txt

22. Cluster isimlendirmesi hazırlanır;

CLUSTER_NAME=”k8s” && 

CLUSTER_DOMAIN=”cluster.local” && 

CLUSTER_FQDN=”$CLUSTER_NAME.$CLUSTER_DOMAIN”

23.Yukarıdaki değişlenlerden cluster_name ve cluster_domain’i kendi ihtiyaçlarınız doğrultusunda güncelleyebilirsiniz. Cluster yapılandırması için yeni bir dizin oluşturularak örnek dosyalar buraya kopyalanır;

mkdir inventory/$CLUSTER_NAME && 

cp -rfp inventory/sample/* inventory/$CLUSTER_NAME

24. ihtiyaç olmayan dosyalar silinir;

rm -rf inventory/sample inventory/local/

25. Ansible inventory dosyası Inventory Builder ile güncellenir;

declare -a IPS=(192.168.10.50 192.168.10.51 192.168.10.52 192.168.10.53) && 

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

26. Bu komutlar ardından oluşturulan inventory/$CLUSTER_NAME/hosts.yml dosyası yapılandırmanız ve ihtiyaçlarınız doğrultusunda düzenlenmelidir;

nano inventory/$CLUSTER_NAME/hosts.yml

Örneğin, aşağıdaki ekran görüntüsünde birinci makine master, diğer 3 makine ise worker node olarak tanımlanmıştır. etcd sadece master makineye kurulacak şekilde ayarlanmıştır;

27.Bu noktadan itibaren Kubernetes Cluster’ımızı ihtiyaçlarımız doğrultusunda özelleştirmeye başlıyoruz. Değiştirebileceğimiz değerlere sahip parametre dosyaları inventory/$CLUSTER_NAME/group_vars dizini altında yer almaktadır. Aşağıda detayları bulunan parametreler ve daha fazlası için bu dosyalar incelenebilir.

k8s-cluster.yml dosyasındaki cluster adı güncellenir;

sed -i “s/cluster_name: cluster.local/cluster_name: $CLUSTER_FQDN/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml

28. Kube api anonim yetkilendirmesi kapatılarak basic ve token yetkilendirmesi açılır;

sed -i ‘s/kube_api_anonymous_auth: true/kube_api_anonymous_auth: false/g’ inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml && 

sed -i ‘s/# kube_basic_auth: false/kube_basic_auth: true/g’ inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml && 

sed -i ‘s/# kube_token_auth: false/kube_token_auth: true/g’ inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml && 

sed -i ‘s/# kube_apiserver_insecure_port:/kube_apiserver_insecure_port:/g’ inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml && 

sed -i ‘s/kube_apiserver_insecure_port: 0/#kube_apiserver_insecure_port: 0/g’ inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml

29.Cluster kaynak kullanımına dair metriklerin çekilebilmesi için kube salt okunur portu açılır;

sed -i “s/# kube_read_only_port:/kube_read_only_port:/g” inventory/$CLUSTER_NAME/group_vars/all/all.yml

Dikkat: Bu ayar yapılmazsa metrik bilgileri okunamadığı için HPA çalışmayacaktır.

30. Docker storage driver olaray overlay2 yapılandırılır;

sed -i “s/# docker_storage_options:/docker_storage_options:/g” inventory/$CLUSTER_NAME/group_vars/all/docker.yml

31. Docker Registery kurulması istenirse aşağıdaki komut çalıştırılır.

sed -i “s/registry_enabled: false/registry_enabled: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml

32. Helm’in kurulması istenirse aşağıdaki komut çalıştırılır.

sed -i “s/helm_enabled: false/helm_enabled: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml

33. Metric Server kurulması istenirse aşağıdaki komut çalıştırılır.

sed -i “s/metrics_server_enabled: false/metrics_server_enabled: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml

34. Nginx Ingress Controller kurulması istenirse aşağıdaki komut çalıştırılır.

sed -i “s/ingress_nginx_enabled: false/ingress_nginx_enabled: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml && 

sed -i “s/# ingress_nginx_host_network: false/ingress_nginx_host_network: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml

35. Cert Manager kurulması istenirse aşağıdaki komut çalıştırılır.

sed -i “s/cert_manager_enabled: false/cert_manager_enabled: true/g” inventory/$CLUSTER_NAME/group_vars/k8s-cluster/addons.yml

36. Opsiyonel olarak, tanımlı tüm node’lara erişilebildiği aşağıdaki komutla kontrol edilir;

ansible -i inventory/$CLUSTER_NAME/hosts.yml -m ping all

37. Kubernetes Cluster’ının ve çevre uygulamaların kurulum ve yapılandırmalarının gerçekleştirilmesi için aşağıdaki komut kullanılabilir;

ansible-playbook -i inventory/$CLUSTER_NAME/hosts.yml –become –become-user=root cluster.yml

Bu komut yaklaşık 15-20dk içerisinde Kubernetes Cluster’ınızı belirttiğiniz yapılandırma doğrultusunda kuracaktır.

Responses

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir