Kubespray ile Kubernetes Cluster Kurulumu

bu yazımda bir projede kullanım için hazırladığım kubernetes cluster kurulumundan bahsedeceğim.
Kurulumları Google Cloud üzerinde açtığım sunucularda yapacağım. bu yüzden ansible için ssh key generate edip tek tek sunuculara yerleştirmek yerine
google cloud un güzel bir özelliği olan projectin tümüne etki edecek şekilde key koyacağım.
SSH KEY
normalde on-premise ortamda eğer yapacaksanız ansible host üzerinde ürettiğiniz public keyi diğer sunuculara dağıtmanız gerekiyor. diğer sunucularda da dağıtacağınız userın olması gerekiyor.
bunu daha önce ansible ilk kurulum yazımda anlatmıştım.
ben google cloud üzerinde provision ettiğim instanceler üzerinde ilerleyeceğim. google cloud un bu key dağıtma için çok güzel bir özelliği mevcut. project metadatasına public key i koyabiliyorsunuz. bunu koyduğunuz anda provision ettiğiniz bütün instancelara bu user ı açıyor ve public key i otomatik koyuyor.
öncelikle bir key üretelim. -C ile user belirtiyoruz.
ssh-keygen -t rsa -f ~/.ssh/ansible -C ansible

ürettikten sonra public key i projede > compute engine > metadata ya ekleyeceğiz.

ekledikten sonra saveliyoruz.

önceden de belirttiğim gibi şuan açtığım bütün instancelara ansible_user ekleyecek ve public keyi koyacak. yapmamız gereken ansible host a ürettiğimiz private key i koymak kalıyor.
öncelikle bir ansible host yaratalım. yarattığımızda user ın otomatik olarak geldiğini göreceksiniz.

private key i buraya kopyalayacağım. .ssh dizini altına ki diğer sunuculara erişebilsin.
ANSIBLE
ansible sunucusunda kubespray için gereklilikleri ve ansible ın kendisini yüklememiz gerekiyor.
öncelikle kubespray reposunu çekiyoruz. ve stable olan sürüm için ilgili brancha geçiyoruz ben bunu hazırlarken branch v2.24.3 dü
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray/
git checkout v2.24.3
kurulumları python venv de yapacağız. venv virtual environment demek bir proje için gereklilikleri libraryleri izole bir ortamda yapabileceğiz anlamına geliyor.
venv kullanmak için öncelikle plugin yüklememiz gerekiyor.
sudo apt update && sudo apt install python3.10-venv
daha sonra izole ortamı yaratarak orada kubespray deki requirements ı seçerek install yapıyoruz
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
KUBESPRAY
kubespray yüklemek için ansible gereksinimini hallettik şimdi repodaki bazı config fileları ayarlayarak kubernetes cluster kurmaya geldi.
öncelikle otomatik hazırlaması için sunucu IP lerini declare edeceğiz.
cp -rfp inventory/sample inventory/mycluster
declare -a IPS=(10.255.0.7 10.255.0.6 10.255.0.5)
declare ettikten sonra config file oluşması için python scripti çalıştırıyoruz.
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
config filelarımız kopyaladığımız mycluster directorysinde olacak. öncelikle host file ı editleyelim.
inventory/mycluster/hosts.yaml içinde hangi node master hangi node worker ayarlayacağız.
burda önemli olan kısım hostların user ı ve control pland ile nodelar.
all:
hosts:
node1:
ansible_host: 10.255.0.7
ip: 10.255.0.7
access_ip: 10.255.0.7
ansible_user: ansible
node2:
ansible_host: 10.255.0.6
ip: 10.255.0.6
access_ip: 10.255.0.6
ansible_user: ansible
node3:
ansible_host: 10.255.0.5
ip: 10.255.0.5
access_ip: 10.255.0.5
ansible_user: ansible
children:
kube_control_plane:
hosts:
node1:
node2:
kube_node:
hosts:
node1:
node2:
node3:
benim seçimimde node1 ve node2 control plane. node3 ise worker olacak.
clusterla alakalı değişiklikleri de k8s-cluster dosyasında yapacağız.
inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
bu dosyanın içinde version, CNI cinsi (default u calico), ekstra pluginler ve kubernetes ile alakalı bir çok farklı parametreler bulunuyor. bunları değiştirerek ilerleyebilir ya da default ayarlarla devam edebilirsiniz.
bundan sonra yapacağımız tek şey ansible playbook u çalıştırmak.
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
cluster kurulması 10–15dk arası sürüyor. cluster kurulumu bittikten sonra kubeconfig e herhangi bir master sunucunun etc/kubernetes/admin.conf dosyasından ulaşabilirsiniz.
kubectl için benim scriptimi kullanabilir ya da direk binary indirebilirsiniz.
curl https://raw.githubusercontent.com/alperen-selcuk/kubectl-install/refs/heads/main/install-kubectl-helm.sh | bash -
binary:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/kubectl
admin.conf daki confiği .kube/config dizinine koyarak. ve IP yi 127.0.0.1 den herhangi bir master IP sini yaparak clustera erişebilirsiniz.

eğer bir public IP si olan HAPROXY kurabilirseniz masterların önüne clustera internet üzerinden de erişebilirsiniz.
umarım faydalı olmuştur.
iyi çalışmalar