Kubespray
Kubespray, Kubernetes kurulum ve bakımını otomatikleştiren, Ansible üzerine geliştirilmiş resmi bir araçtır.
Sağladıkları:
- Otomasyon
- HA: https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ha-mode.md
- Node ekleme, çıkarma ve güncelleme
- Eklenti ekleme ve çıkarma
- Farklı topolojileri destekler:
- Master ve etcd aynı sunucularda
- Etcd sunucuları ayrı (>=3, tek haneli)
- Master ve etcd sayıları ayarlanabilir
Gereksinimler
- Ansible kontrol makinası: WSL veya bir Linux makinası olmalıdır.
- Sunucular arası ağ erişimi için port gereksinimleri karşılanmalıdır.
- Kontrol makinasında Docker kurulu olmalıdır.
- Hedef sunuculara SSH anahtarı ile erişim sağlanmış olmalıdır.
Docker ile Kurulum (Önerilen)
Docker imajı kullanmak, sistem bağımlılıklarını yönetmekten kurtarır ve tekrarlanabilir kurulum sağlar.
1. Kubespray Deposunu Klonla
- Bu makinanın linux olması gerekiyor. kubespray içindeki symlinkler windowsta çalışmıyor.
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
2. Docker İmajını Çek
# Kuracağınız Kubernetes sürümüne göre kubespray imaj sürümünü seçin.
# Mevcut sürümler: https://quay.io/repository/kubespray/kubespray?tab=tags
export KUBESPRAY_VERSION=v2.31.0
wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/${KUBESPRAY_VERSION}.tar.gz
tar xzf ${KUBESPRAY_VERSION}.tar.gz
cd kubespray-${KUBESPRAY_VERSION#v}
docker pull quay.io/kubespray/kubespray:${KUBESPRAY_VERSION}
3. Inventory Hazırla
# Hazır şablonu kopyala
cp -rfp inventory/sample inventory/mycluster
# Hedef sunucu IP'lerini tanımla
declare -a IPS=(<server1_ip> <server2_ip> <server3_ip>)
# hosts.yaml dosyasını oluştur (Docker container içinde çalıştır)
docker run --rm \
-v "$(pwd)":/kubespray \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
python3 contrib/inventory_builder/inventory.py ${IPS[@]}
# Oluşturulan dosyayı kontrol et
cat inventory/mycluster/hosts.yaml
İlk 2 IP adresi otomatik olarak master ve etcd node olarak atanır.
4. Ayarları Gözden Geçir
# Genel ayarlar
cat inventory/mycluster/group_vars/all/all.yml
# Kubernetes küme ayarları
cat inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
Sık Kullanılan Ek Ayarlar
# inventory/mycluster/group_vars/all/all.yml
# Hostname değiştirmeyi kapat
override_system_hostname: false
# inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
enable_nodelocaldns: false
# Calico subnet ayarları (mevcut ağınızla çakışmaması için değiştirin)
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/18
# Sertifika otomatik yenileme
auto_renew_certificates: true
auto_renew_certificates_systemd_calendar: "Sat *-*-1,2,3,4,5,6,7 03:0:00"
5. Kubernetes Kümesini Kur
SSH özel anahtarınızı ve inventory dizinini container’a mount ederek kurulum playbook’unu çalıştırın:
# SSH anahtarınızın yolu (genellikle ~/.ssh/id_rsa veya ~/.ssh/id_ed25519)
export SSH_KEY=~/.ssh/id_rsa
# root ile doğrudan erişim
docker run --rm -it \
-v "$(pwd)":/kubespray \
-v "${SSH_KEY}":/root/.ssh/id_rsa:ro \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
ansible-playbook -i inventory/mycluster/hosts.yaml \
--private-key /root/.ssh/id_rsa \
--become --become-user=root \
cluster.yml
docker run --rm -it --mount type=bind,source="$(pwd)"/inventory/sample,dst=/inventory \
--mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} bash
# docker container içinde
ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa cluster.yml
# eğer user/sadece parola varsa sudo yetkisi olmak
ansible-playbook -i /inventory/inventory.ini -kK -b -u <user> cluster.yml
# Sudo yetkili kullanıcı ile erişim (-kK: SSH ve sudo parolası sorar)
docker run --rm -it \
-v "$(pwd)":/kubespray \
-v "${SSH_KEY}":/root/.ssh/id_rsa:ro \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
ansible-playbook -i inventory/mycluster/hosts.yaml \
--private-key /root/.ssh/id_rsa \
-b -u <kullanıcı> -kK \
cluster.yml
# Ek değişkenler ve hardening ile kurulum
docker run --rm -it \
-v "$(pwd)":/kubespray \
-v "${SSH_KEY}":/root/.ssh/id_rsa:ro \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
ansible-playbook -v cluster.yml \
-i inventory/mycluster/hosts.yaml \
--private-key /root/.ssh/id_rsa \
--become -u <kullanıcı> -kK \
-e "@vars.yaml" \
-e "@hardening.yaml"
Desktop Ortamda Test (Bonus)
Kendi bilgisayarınızda test etmek için vagrant dosyasındaki Vagrant ve VirtualBox araçlarını kullanabilirsiniz.
Yeni Node Ekleme
Worker node eklemek için:
# Yeni IP'yi de dahil ederek inventory'yi güncelle
declare -a IPS=(<server1_ip> <server2_ip> <server3_ip> <yeni_node_ip>)
docker run --rm \
-v "$(pwd)":/kubespray \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
python3 contrib/inventory_builder/inventory.py ${IPS[@]}
# Sadece yeni node'a playbook çalıştır
docker run --rm -it \
-v "$(pwd)":/kubespray \
-v "${SSH_KEY}":/root/.ssh/id_rsa:ro \
quay.io/kubespray/kubespray:${KUBESPRAY_VERSION} \
ansible-playbook -i inventory/mycluster/hosts.yaml \
--private-key /root/.ssh/id_rsa \
-b -u <kullanıcı> -kK \
scale.yml \
--limit=<hosts.yaml_içindeki_node_adı>
Sertifika Yenileme
Otomatik yenileme kapalıysa sertifikaları elle yenileyin:
# Sertifika sürelerini kontrol et
sudo /usr/local/bin/kubeadm certs check-expiration
# Tüm control-plane node'larında çalıştır
sudo /usr/local/bin/k8s-certs-renew.sh
# Tüm worker node'larda kubelet'i yeniden başlat
sudo systemctl restart kubelet
Dashboard ve Eklenti Kurulumu
Kaynaklar: