Merhaba! Önceki dersimizde, bir CI/CD otomasyonunda kritik bir halkayı tamamladık: GitOps depomuza bir değişiklik gönderildiğinde Rancher Fleet'in bu değişikliği nasıl otomatik olarak algılayıp dağıtım sürecini tetiklediğini öğrendik. Artık kod değişikliğinden dağıtıma giden yolu otomatikleştirecek teorik altyapıya sahibiz.
Ancak, otomasyonun olduğu her yerde olduğu gibi, işler her zaman beklendiği gibi gitmeyebilir. Bir dağıtım takılıp kalırsa, bir manifest dosyası hatalıysa veya bir yapılandırma yanlışsa ne olur? Bu derste, "Happy Path" senaryosundan çıkıp, sorunları nasıl teşhis edip çözeceğimize odaklanacağız.
Bugünkü öğrenme hedefimiz: Fleet bundle durumunu izlemek ve başarısız dağıtımları Rancher UI ve kubectl kullanarak gidermek.
Bu dersin sonunda, çalışan bir Fleet dağıtımının yaşam döngüsünü nasıl gözlemleyeceğinizi ve daha da önemlisi, bir sorun ortaya çıktığında kök nedeni bulmak için hangi araçları ve günlükleri incelemeniz gerektiğini bileceksiniz.
Dağıtım Yaşam Döngüsünü İzleme: "Happy Path"
Bir sorunu çözmeden önce, her şeyin yolunda gittiği bir senaryonun nasıl göründüğünü anlamamız gerekir. Fleet, bir değişikliği Git deposundan alıp kümenize dağıttığında, bu süreç birkaç aşamadan geçer.
1. Rancher Arayüzü (UI) ile İzleme
Rancher UI, dağıtımlarınızın durumu hakkında hızlı bir görsel geri bildirim sağlar.
- Git Repoları: Rancher'da Sürekli Teslimat (Continuous Delivery) bölümüne gittiğinizde,
GitRepokaynaklarınızı ve durumlarını görürsünüz.Activedurumu, Fleet'in depoyu başarıyla klonladığı ve izlediği anlamına gelir. - Bundle'lar (Demetler): Bir
GitRepo'ya tıkladığınızda, içindekiBundle'ları görürsünüz. Her birBundle,fleet.yamldosyanızdaki bir hedef (target) için oluşturulan kaynak koleksiyonunu temsil eder.Bundle'ın durumu da dağıtımın genel sağlığı hakkında bilgi verir.

Aşağıdaki kısa video kesiti, bir değişiklik push edildikten sonra Fleet'in dağıtım durumunu in progress (devam ediyor) olarak nasıl güncellediğini ve ardından kısa sürede completed (tamamlandı) durumuna geçtiğini göstermektedir. Bu, başarılı bir dağıtım döngüsüdür.
Using Rancher Fleet and GitHub Actions for GitOps Releases
Bu video, Rancher arayüzünde bir Fleet dağıtımının durum geçişlerini canlı olarak göstermektedir.
Videonun 09:48 - 10:21 arasındaki bölümünü izleyin. Değişiklik gönderildikten sonra Fleet'in durumu nasıl yakaladığına ve dağıtımı tamamladığına dikkat edin. Fleet'in varsayılan yoklama (polling) süresinin 15 saniye olduğunu belirtiyor; bu süre, değişikliğin algılanmasındaki küçük gecikmeyi açıklar.
2. kubectl ile İzleme
Arayüzün yanı sıra, kubectl komut satırı aracı da size daha detaylı ve script'lenebilir bir izleme imkanı sunar. Fleet'in temel nesneleri Kubernetes CRD'leridir (Custom Resource Definitions).
-
GitRepo: Dağıtımın başlangıç noktası.# fleet-default ad alanındaki (veya sizinkinin) GitRepo'ları listeleyin kubectl get gitrepos -n fleet-defaultÇıktıda
RESOURCESveREADYsütunlarını kontrol edin. Örneğin1/1değeri, hedeflenen 1 bundle'ın da hazır olduğu anlamına gelir.0/1ise bir sorun olduğunu gösterir. -
Bundle:GitRepotarafından oluşturulan ve belirli bir hedef kümeye yönelik kaynakları içeren paket.# Tüm Bundle'ları listeleyin kubectl get bundles -A -
BundleDeployment: BirBundle'ın hedef kümedeki gerçek dağıtımını temsil eden nesne. Her hedef küme için bir tane oluşturulur.# Tüm BundleDeployment'ları listeleyin kubectl get bundledeployments -A

Bu üç kaynak arasında hiyerarşik bir ilişki vardır:GitRepo -> Bundle -> BundleDeployment
Bir sorunu teşhis ederken genellikle bu zinciri yukarıdan aşağıya doğru takip edersiniz.
Sorun Giderme: "Unhappy Path"
Dağıtımınız takıldığında veya başarısız olduğunda, sistematik bir yaklaşımla sorunu bulabilirsiniz. İşte temel sorun giderme adımları ve kontrol edilecek yerler.
Bu süreçte ana kaynağımız Fleet'in resmi sorun giderme rehberi olacak.
Troubleshooting - Rancher Fleet
Fleet'in resmi "Troubleshooting" dokümanı, başarısız dağıtımların kök nedenini bulmak için nereye bakmanız gerektiğini ve hangi komutları kullanacağınızı ayrıntılı olarak açıklar.
Bu dokümanı dersin geri kalanı için bir başvuru kılavuzu olarak kullanacağız. Öncelikle "Where to Look for Root Causes of Issues" (Sorunların Kök Nedenleri İçin Nereye Bakmalı) bölümünü okuyarak sorun giderme sürecindeki ana bileşenleri (fleet-controller, gitjob, GitRepo status, fleet-agent) tanıyın.
Yukarıdaki dokümanı temel alarak sorun giderme adımlarımızı sıralayalım.
Adım 1: Durumu Kontrol Et (kubectl get/describe)
İlk olarak, GitRepo kaynağının durumuna bakın.
# GitRepo'nun detaylı durumunu görmek için 'describe' kullanın
kubectl describe gitrepo <repo-adi> -n fleet-default
Çıktının en altındaki Status ve Events bölümlerini inceleyin. Status.Conditions alanı genellikle hatanın ne olduğuna dair ipuçları içerir. Örneğin, "Repo not found" (Depo bulunamadı) veya "Authentication failed" (Kimlik doğrulama başarısız) gibi mesajlar görebilirsiniz.
Adım 2: İlgili Pod'ların Günlüklerini (Log) İnceleme
Hata mesajı net değilse, bir sonraki adım Fleet'in operasyonel bileşenlerinin günlüklerini kontrol etmektir.
-
Git Klonlama veya İşleme Hataları (
gitjobpod'u): Fleet, Git deposunu klonlamak için geçicigitjobpod'ları oluşturur. Eğer sorun depo erişimiyle ilgiliyse (yanlış URL, yetki sorunu vb.), bu pod'un loglarında hatayı bulursunuz.- Dokümanın "Check errors about watching or checking out the GitRepo..." bölümündeki talimatları izleyerek ilgili
gitjobpod'unu bulun ve loglarını kontrol edin.
- Dokümanın "Check errors about watching or checking out the GitRepo..." bölümündeki talimatları izleyerek ilgili
-
Bundle Oluşturma Hataları (
fleet-controllerpod'u): Fleet'in ana beynifleet-controller'dır.GitRepo'yu işlemekten veBundle'ları oluşturmaktan sorumludur. Manifest dosyalarınızda bir YAML veya Kustomize/Helm hatası varsa, hata büyük ihtimalle bu pod'un loglarında olacaktır.- Dokümanın "Fetch the log from fleet-controller?" bölümündeki
kubectl logskomutunu kullanarak bu pod'un loglarını alın.
- Dokümanın "Fetch the log from fleet-controller?" bölümündeki
-
Hedef Kümeye Dağıtım Hataları (
fleet-agentpod'u): Her bir hedef kümede çalışanfleet-agent,Bundle'ı alıp küme üzerine uygulamaktan sorumludur. Eğer manifestler geçerli ama kümede bir sorun varsa (örn. yetersiz RBAC izinleri, bulunamayan birStorageClassvb.), hatafleet-agentloglarında olacaktır.- Dokümanın "Fetch the log from the fleet-agent?" bölümündeki komutu kullanarak hedef kümedeki agent loglarını kontrol edin.
Adım 3: Gelişmiş Teşhis Aracı: fleet CLI
Fleet, fleet adında bir komut satırı aracı sunar. Bu aracın monitor komutu, tüm Fleet kaynaklarının anlık bir görüntüsünü alarak otomatik teşhisler çalıştırır ve sorunları bulmayı inanılmaz derecede kolaylaştırır.
fleet monitor komutunun resmi dokümanı, bu güçlü teşhis aracının yeteneklerini ve kullanım senaryolarını açıklar.
Dokümanı inceleyerek fleet monitor komutunun ne işe yaradığını anlayın. Özellikle "What It Detects" bölümü, bu aracın ne tür sorunları (kaynak yaşam döngüsü sorunları, veri tutarlılığı, hedef eşleştirme hataları vb.) otomatik olarak tespit edebildiğini listeler. "Common Troubleshooting Scenarios" bölümü ise pratik kullanım örnekleri sunar.
fleet monitor nasıl kullanılır?
Komutu çalıştırmak için fleet CLI'nin kurulu olması gerekir. Çıktısı JSON formatındadır, bu nedenle genellikle jq ile birlikte kullanılır.
# Tüm Fleet kaynaklarının anlık durumunu al ve jq ile formatla
fleet monitor | jq
Örnek Senaryo: Bir Bundle'ın neden dağıtılmadığını teşhis etmek.
fleet monitor çıktısında şu bölümleri kontrol edebilirsiniz:
diagnostics.bundlesWithNoDeployments: Bundle'ınızın herhangi bir hedef kümeyle eşleşip eşleşmediğini gösterir. Eğer burada listeleniyorsa,fleet.yamldosyanızdakiclusterSelectorveyaclusterGrouptanımınızda bir hata var demektir.diagnostics.gitRepoBundleInconsistencies:GitRepoveBundlearasındaki commit karması gibi tutarsızlıkları bulur.diagnostics.clustersWithAgentIssues: Hedef kümedekifleet-agent'ın sağlıklı olup olmadığını kontrol eder.
Bu araç, özellikle karmaşık ve çok kümeli ortamlarda sorunları hızlıca izole etmenizi sağlar.
Özel Bir Durum: "Modified" Statüsü
Bazen bir Bundle'ın durumu Active yerine Modified (Değiştirilmiş) olarak görünür ve orada takılı kalır. Bu, Fleet'in en kafa karıştırıcı yönlerinden biridir.
Modified ne anlama gelir? Git'teki istenen durum ile kümedeki gerçek durum arasında bir fark olduğu anlamına gelir.
Bunun birkaç nedeni olabilir:
- Beklenen Bir Davranış: Örneğin, bir
HorizontalPodAutoscaler(HPA) kullanıyorsanız, HPA'nınreplicassayısını dinamik olarak değiştirmesi beklenir. Bu, Git'teki orijinal manifestten bir sapmadır ve Fleet bunu "Modified" olarak işaretler. Bu durum zararsızdır. - Manuel Değişiklik: Birisi
kubectl editile kümedeki bir kaynağı manuel olarak değiştirdi. - Bir Controller Tarafından Yapılan Değişiklik: Kubernetes'teki başka bir controller (örneğin bir admission webhook), Fleet'in oluşturduğu bir kaynağa ek etiketler veya alanlar ekliyor olabilir.
Fleet'in bu tür sapmaları (drift) sürekli olarak geri almadığını hatırlamak önemlidir. Bu, aracın temel bir tasarım özelliğidir.
Rancher Fleet: GitOps Across A Large Number Of Kubernetes Clusters
Bu videoda, Fleet'in mevcut sınırlamalarından biri olan sürekli sapma tespiti (drift detection) eksikliği tartışılıyor.
Videonun 24:39 - 27:52 arasını izleyin. Konuşmacı, bir kaynağı manuel olarak değiştirdiğinde Fleet'in bu değişikliği otomatik olarak geri almadığını göstererek hayal kırıklığını dile getiriyor. Bu, Modified durumunu anlamak için önemli bir bağlam sağlar. Ardından, 35:50 - 36:41 arasındaki bölümde, sürekli sapma tespiti eksikliğinin Fleet'in en büyük sorunlarından biri olduğunu özetliyor.
Modified durumu nasıl ele alınır?
LINK dokümanının "Fleet deployment stuck in modified state" bölümü çözümü açıklar.
- Sorunu Teşhis Et:
fleet-agentloglarında hangi alanın fark yarattığını gösteren bir hata mesajı arayın. - Farkı Yoksay:
fleet.yamldosyanıza birdiff.comparePatchesbölümü ekleyerek Fleet'e belirli alanlardaki değişiklikleri yoksaymasını söyleyebilirsiniz. Bu, beklenen değişikliklerin (HPA gibi)Modifieddurumuna neden olmasını engeller. - Zorla Güncelleme: Rancher UI'da
GitRepo'yu seçip Force Update (Zorla Güncelle) düğmesine tıklayarak Fleet'i durumu yeniden senkronize etmeye zorlayabilirsiniz.
Özet ve Sonuç
Bu derste, otomatikleştirilmiş bir sistemin kaçınılmaz bir parçası olan sorun giderme sürecini ele aldık. Artık bir Fleet dağıtımı başarısız olduğunda veya beklendiği gibi davranmadığında nereye bakacağınızı biliyorsunuz.
Temel Çıkarımlar:
- Başarılı bir dağıtım, Rancher UI'da ve
kubectl getkomutlarındaActivedurumuyla kendini gösterir. - Sorun giderme,
GitRepo->Bundle->BundleDeploymenthiyerarşisini takip ederek başlar. - Temel teşhis araçları,
kubectl describeile durum ve olayları incelemek vefleet-controller,gitjob,fleet-agentpod'larının loglarını kontrol etmektir. fleet monitorCLI aracı, yaygın sorunları otomatik olarak tespit eden güçlü bir gelişmiş teşhis aracıdır.Modifieddurumu, istenen ve gerçek durum arasındaki bir farkı (drift) gösterir ve logları inceleyerek veyafleet.yamliçinde yapılandırılarak yönetilebilir.
Gelecek Dersin Önizlemesi:
Artık bir dağıtımı nasıl tetikleyeceğimizi ve sorun çıkarsa nasıl çözeceğimizi biliyoruz. Kursumuzun son modülüne geçmeye hazırız! Bir sonraki dersimizde, tüm öğrendiklerimizi bir araya getireceğiz. CI sürecimizin (GitHub Actions) testleri geçtikten sonra, GitOps depomuzdaki imaj etiketini otomatik olarak güncelleyip değişikliği commit eden bir iş akışı yapılandıracağız. Bu, baştan sona tam otomatik CI/CD boru hattımızı tamamlayan son adım olacak.