Home TürkçeKubernetes Kubespray ile Üretim Ortamına Hazır Kubernetes Kurulumu

Kubespray ile Üretim Ortamına Hazır Kubernetes Kurulumu

by Fatih Boy
0 comment

Hatırlayacak olursanız, daha önceki makalemde sizlere Kubernetes Cluster’ını Centos 7 minimal kurulu bir sistem üzerinde nasıl ayağa kaldırabileceğinizi paylaşmıştım. Özellikle bu işle yeni ilgilenenler için hızlıca bir Kubernetes Cluster’ı oluşturabilmeyi hedeflediğim makalem ardından pek çok Kubernetes egzersizini gerçekleştirebildiğinizi umuyorum. Devamındaki makalelerimde ise bu kurulum üzerine ihtiyacımız olan diğer bileşenleri detaylarını da paylaşarak kurmuştuk. Bu makalemde ise artık üretim ortamı kullanımına yönelik olarak bir Kubernetes Cluster’ının ve gerekli olan pek çok bileşenin Kubespray yardımıyla tek kalemde nasıl kurabileceğimizi  sizlerle paylaşmak istiyorum.

Aşağıdaki adımlar takip edilerek, Centos 7 minimal kurulu sistemler üzerinde Kubespray yardımıyla üretim ortamı kullanımına hazır Kubernetes Cluster’ı kurulabilir.

Cluster Planlaması

Kubernetes, doğası gereği esnektir. Üretim ortamında kullanılacak servis, node, master sayıları ve yapılandırmaları ihtiyaçlar doğrultusunda değişiklik gösterecektir. Bu makalede kurulumunu yapacağımız Kubernetes Cluster’ı basit olması adına bir adet master ve 2 adet worker node’dan oluşmaktadır.

Kubespray-Network

Etcd’nin sadece master node üzerinde olması planlanmıştır. Bunun yanında üretim ortamı kullanımlarında ihtiyaç duyulacak Helm, Dashboard, Docker Registery, Nginx Ingress Controller, Metric Server kurulumları da yapılacaktır. Container Network Interface (CNI) olarak varsayılanda gelen calico yerine weave seçilmiştir. Kube Api anonim erişimi kapatılarak basit ve token bazlı erişimler açılmıştır. İhtiyaçlarınız doğrultusunda aşağıda detaylarını paylaştığım bu yapılandırmayı özelleştirebilirsiniz.

Ön Gereksinimler

Kubespray ile Kubernetes Cluster’ının kurulumu için öncelikle aşağıdaki ön gereksinimlerim tamamlanmış olması gerekmekte. Ön gereksinimler, tüm sunucularda çalıştırılacaklar ve kurulumu gerçekleştirecek sunucu olmak üzere ikiye ayrılmıştır.

Tüm Sunuculardaki Ön Gereksinimler

Sunucuların Birbirini Görmesi

Cluster node’larının birbirlerine ulaşabilir durumda olmaları gerekmektedir.

Firewal Yapılandırması

Cluster içi ve dışı iletişimin kesintiye uğramaması adına Cluster üyesi node’larda Firewall’un yapılandırılması ve gerekli izinlerin verilmesi gerekmektedir. Bunun için Master sunucuda aşağıdaki komutlar çalıştırılır;

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload

modprobe br_netfilter

Master dışındaki sunucularda firewall yapılandırması içi aşağıdaki komutlar çalıştırılır;

firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --reload

Bu firewall yapılandırmalarına alternatif olarak Cluster üyelerinin tamamında aşağıdaki komutlar yardımıyla firewall tamamen kapatılabilir;

systemctl stop firewalld
systemctl disable firewalld

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

Ntp İstemci Kurulumu

Kubernetes Cluster’ında zaman konusunda bir sıkıntı yaşanmaması adına Cluster üyelerine ntp istemci kurulumunun yapılmasında fayda olacaktır. Bunun için aşağıdaki komutların çalıştırılması gereklidir;

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

Bu işlemler ardında zaman senkronizasyonu aşağıdaki komutla kontrol edilebilir;

timedatectl
timedatectl

Kurulumu Gerçekleştirecek Sunucu Ön Gereksinimleri

Kubespray’in çalışacağı sunucuda aşağıdaki adımlar takip edilmelidir. Kubespray tamamen ayrı bir sunucuda ya da Kubernetes Cluster üyelerinden birisi üzerinde (tercihen bir master sunucuda) çalıştırılabilir.

Şifresiz SSH Yapılandırması

Tüm sunucular için kurulumu yapacak kullanıcı olan root kullanıcısının şifresiz SSH yapabilmesi için gerekli yapılandırma gerçekleştirilir. Kurulumların root kullanıcısı ile gerçekleştirilmesi bir zorunluluk değildir. Farklı bir kullanıcı oluşturularak işlem yapılabilir. Bu durumda makalenin devamındaki komutların oluşturulan bu kullanıcı ile çalıştırılması gerekmektedir. root kullanıcından farklı senaryolarda pek çok komut sudo ile çalıştırılmalıdır.

Sunucular arası şifresiz ssh erişimi yapılandırılır;

ssh-keygen -q -f ~/.ssh/id_rsa -N ""

ssh key tüm sunuculara kopyalanır;

ssh-copy-id [SUNUCU_IP]

örneğin;

ssh-copy-id 192.168.200.2
ssh-copy-id 192.168.200.3
ssh-copy-id 192.168.200.4

Python Kurulumu

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

Kubespray Kurulumu

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

export KUBESPRAY_RELEASE=$(curl --silent "https://api.github.com/repos/kubernetes-sigs/kubespray/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')
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

Oluşturulan kubespray klasörüne gidilir;

cd kubespray

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

/usr/local/bin/pip3 install -r requirements.txt

Kubernetes Cluster Kurulumu

Cluster isimlendirmesi hazırlanır;

CLUSTER_NAME="k8s"
CLUSTER_DOMAIN="enterprisecoding.local"
CLUSTER_FQDN="$CLUSTER_NAME.$CLUSTER_DOMAIN"

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

Opsiyonel olarak; ihtiyaç olmayan dosyalar silinir;

rm -rf inventory/sample inventory/local/

Ansible inventory dosyası Inventory Builder ile güncellenir;

declare -a IPS=(192.168.200.2 192.168.200.3 192.168.200.4)
CONFIG_FILE=inventory/$CLUSTER_NAME/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

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;

vi inventory/$CLUSTER_NAME/hosts.yml

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

hosts_yml

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

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

Container Network Interface (CNI) olarak varsayılanda kurulan Calico yerine Weave network eklentisinin kurulması istenirse aşağıdaki şekilde belirtilir;

sed -i 's/kube_network_plugin: calico/kube_network_plugin: weave/g' inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml

Weave network eklentisi için bir şifre oluşturularak yapılandırma dosyasına yazılır;

export WEAVE_PASSWORD=$(date +%s | sha256sum | base64 | head -c 32 ; echo)
sed -i "s/# weave_password: ~/weave_password: $WEAVE_PASSWORD/g" inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-net-weave.yml

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.

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

Docker Registery kurulması istenirse;

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

Helm’in kurulması istenirse;

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

Metric Server kurulması istenirse;

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

Nginx Ingress Controller kurulması istenirse;

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

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
ping-all

Yukarıdaki ayarlamalar ardından belirtilen ihtiyaçlar doğrultusunda 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.

play_recap

Kurulum ardından Kubernetes’ Dashboard’a aşağıdaki url üzerinden erişilebilir;

https://[MASTER_SUNUCU_IP]:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

Şu Yazıları da Sevebilirsiniz

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi