06_update_k8s_services.yml - Kullanım Kılavuzu
⚠️ Bu playbook canlı bir Kubernetes cluster’ını günceller
Salt-okunur değildir; kubeadm, kubelet, kubectl, containerd paketlerini gerçekten günceller ve node’ları sırayla drain/uncordon eder. Docker bu playbook’un kapsamında değildir. Calico ayrı bir konu olduğu için 07_check_calico.yml içindedir.
Çalıştırmadan önce mutlaka --check --diff ile kuru çalıştırma yapın ve önce kritik olmayan bir cluster’da (ör. tek node’luk lab ortamı) deneyin.
Amaç ve Yaklaşım
Kubernetes’in resmi kubeadm upgrade akışını izler:
- Kontrol düzlemi (
master/singlenode,serial: 1— node’lar tek tek işlenir):- İlk control-plane node:
kubeadm upgrade plan+kubeadm upgrade apply v<version> - Ek control-plane node’lar (varsa):
kubeadm upgrade node - Node drain edilir (
kubectl drain, ilk control-plane node üzerindendelegate_toile) kubeadm/kubelet/kubectlapt paketleri hedef sürüme sabitlenir (apt-mark holdile korunan paketler geçici olarak unhold edilip güncellenir, sonra tekrar hold’a alınır)containerdmevcut apt reposundan en güncel sürüme yükseltilir (k8s sürümüyle sıkı sıkıya versiyon eşleşmesi gerekmediği için “latest” kullanılır)- kubelet yeniden başlatılır, node uncordon edilir
- İlk control-plane node:
- Worker node’lar (
workers,serial: 1): Aynı adımlar, ama her zamankubeadm upgrade node(aslaapply).
Güncelleme öncesi ve sonrası sürümler, 04_check_k8s_versions.yml ile aynı paylaşılan tasks/k8s_versions.yml görev listesiyle tespit edilir (kubectl/kubeadm/kubelet/containerd/runc/etcd) — sürüm tespiti iki yerde ayrı ayrı yazılmaz.
etcd ayrıca bir adım gerektirmez — standart kubeadm (stacked etcd) kurulumlarında etcd static pod olarak çalışır ve kubeadm upgrade apply/node sırasında otomatik güncellenir.
Gereksinimler / Ön Koşullar
kube_versiondeğişkeni zorunludur ve tam olarakX.Y.Zbiçiminde olmalıdır (ör.1.34.3); varsayılan/otomatik “latest” YOKTUR.- Playbook mevcut
kubeadmsürümünü okuyup yükseltme aralığını işlem öncesinde doğrular: major değişikliği, sürüm düşürme ve birden fazla minor atlama reddedilir. Aynı minor içinde yalnızca aynı veya daha yeni patch’e, farklı minor için yalnızca bir sonraki minor’e izin verilir. - Yeni bir minor sürüme geçiyorsanız, playbook’u çalıştırmadan ÖNCE
/etc/apt/sources.list.d/kubernetes.listdosyasını hedef minor’ün resmi reposuna (https://pkgs.k8s.io/core:/stable:/v1.XX/deb/) manuel olarak güncelleyipapt-get updateçalıştırmanız gerekir — bu playbook apt repo dosyanıza dokunmaz (farklı kurulumlarda keyring/dosya yapısı farklı olabileceği için otomatik değiştirmek riskli bulundu). become: true(sudo) kullanılır —ansible_become_passinventory’de tanımlı olmalı.- Node drain/uncordon işlemleri ilk control-plane node’a
delegate_toile,become: true(root) altında çalışır; bu yüzdenKUBECONFIG=/etc/kubernetes/admin.confdoğrudan task’aenvironment:olarak verilir (root kullanıcısının kendi~/.kube/config‘i genelde olmadığı için). - kubeadm kurulu olmayan host’larda (ör.
datanode) güncelleme adımları otomatik atlanır, hata vermez.
Çalıştırma Komutu
# Önce ne değişeceğini görmek için (ZORUNLU ilk adım):
ansible-playbook -i inventories/musteri_a/hosts.ini playbooks/06_update_k8s_services.yml \
--extra-vars "kube_version=1.34.3" --check --diff
# Gerçekten uygulamak için:
ansible-playbook -i inventories/musteri_a/hosts.ini playbooks/06_update_k8s_services.yml \
--extra-vars "kube_version=1.34.3"
# Tek bir node ile sınırlamak için (ör. önce sadece bir worker'da denemek):
ansible-playbook -i inventories/musteri_a/hosts.ini playbooks/06_update_k8s_services.yml \
--extra-vars "kube_version=1.34.3" --limit worker1
Notlar
serial: 1ile her play’de node’lar teker teker işlenir — cluster’ın tamamı aynı anda güncellenmez, bu yüzden çalışan workload’lar için kesinti minimumda tutulur.- Paket sürümü
apt-cache madisonile tam paket sürüm string’i (ör.1.34.3-1.1) bulunarak sabitlenir; sadece1.34.3yazmak apt’ta genelde eşleşmez. - İlk çalıştırmayı mutlaka
--check --diffile ve kritik olmayan bir node/cluster üzerinde yapın. kubeadm upgrade applytransient bir hatayla (ör. etcd restart sonrası bağlantı timeout’u) başarısız olursa cluster kısmen güncellenmiş durumda kalabilir; kubeadm bu duruma karşı idempotenttir — playbook’u aynıkube_versionile tekrar çalıştırmak, zaten tamamlanmış bileşenleri (ör. etcd) atlayıp kaldığı yerden devam eder.