Merhaba! Önceki dersimizde GitOps'un ne olduğunu ve Rancher Fleet'in bu modeli GitRepo ve Bundle kaynakları aracılığıyla nasıl uyguladığını teorik olarak ele aldık. Bir GitRepo kaynağının, Fleet'e hangi Git deposunu izlemesi gerektiğini söyleyen bir "işaret" olduğunu öğrendik.
Bugün teoriyi pratiğe döküyoruz. Bu dersin sonunda, PySpark ETL projemizi içeren Git deposunu Kubernetes kümemize bağlayacak olan ilk GitRepo kaynağımızı oluşturmuş olacaksınız. Bu, CI/CD otomasyon zincirimizin "Sürekli Dağıtım" (CD) halkasını kurmadaki ilk somut adımımızdır.
Bugünkü Öğrenme Hedefimiz: Kubernetes manifestlerini içeren bir Git deposuna işaret eden bir Fleet GitRepo kaynağı oluşturmak.
GitRepo Manifestinin Anatomisi
Önceki derste teorik olarak bahsettiğimiz GitRepo kaynağı, aslında standart bir Kubernetes YAML dosyasıdır. Yapısını anlamak, onu doğru bir şekilde yapılandırmanın anahtarıdır.
Aşağıda, Fleet dokümantasyonundan alınmış temel bir GitRepo manifest örneğini inceleyelim:
# gitrepo.yaml
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: my-app-repo
namespace: fleet-local
spec:
repo: https://github.com/my-user/my-pyspark-project.git
branch: main
paths:
- k8s
clientSecretName: my-github-secret
Bu manifesti temel parçalarına ayıralım:
kindveapiVersion: Bu alanlar, Kubernetes'e bunun Fleet tarafından yönetilen birGitRepoÖzel Kaynağı (Custom Resource) olduğunu söyler. Kubernetes tecrübenizden bu standart alanlara aşinasınız.metadata.name:GitRepokaynağınız için benzersiz bir isim.metadata.namespace: Bu çok önemli bir alandır. Fleet'in bu kaynağı nerede arayacağını belirtir.fleet-local: Kaynağı yalnızca Rancher'ın çalıştığı yerel (local) kümeye dağıtmak için kullanılır. Kişisel geliştirme ortamınız gibi tek küme kurulumları için genellikle doğru seçim budur.fleet-default: Kaynağı, Rancher tarafından yönetilen tüm aşağı akış (downstream) kümelere dağıtmak için kullanılır.
Biz projemiz içinfleet-localkullanacağız.
spec.repo: Fleet'in izleyeceği Git deposunun HTTPS veya SSH URL'si.spec.branch: İzlenecek olan dal (branch). Genelliklemainveyamasterolur.spec.paths: Depo içinde taranacak dizinlerin bir listesi. Fleet, bu dizinlerdeki tüm Kubernetes manifestlerini (bizim durumumuzdak8sdizinindekiSparkApplicationmanifesti) bulup uygulayacaktır.spec.clientSecretName: (İsteğe bağlı) Özel (private) bir depoya erişim için gereken kimlik bilgilerini içeren Kubernetes Secret'ının adıdır. Birazdan bu konuya detaylıca gireceğiz.
Bu alanların Rancher arayüzündeki karşılığını görmek, YAML yapısını daha da netleştirebilir.

GitRepo kaynağının farklı kullanım senaryoları (Helm, Kustomize, vb.) için nasıl yapılandırılabileceğini gösteren çeşitli örnekleri incelemek isterseniz, aşağıdaki dokümana göz atabilirsiniz.
Creating a Deployment - Fleet - Rancher
Rancher Fleet'in resmi dokümantasyonundaki "Creating a Deployment" sayfası, çeşitli manifest türleri için gitrepo.yaml örnekleri sunar.
Bu sayfadaki "Multi-Cluster Examples" başlığı altında yer alan gitrepo.yaml örneklerini hızlıca gözden geçirin. Her birinin spec altında repo, paths ve targets alanlarını nasıl kullandığına dikkat edin. Şu an için sadece yapıya odaklanmanız yeterli.
Özel Depolar için Kimlik Doğrulama (Authentication)
Projelerimiz genellikle özel (private) Git depolarında barındırılır. Fleet'in bu depolara erişebilmesi için ona gerekli kimlik bilgilerini sağlamalıyız. En yaygın yöntem, GitHub'dan bir Kişisel Erişim Jetonu (Personal Access Token - PAT) kullanmaktır.
Süreç iki adımlıdır:
- GitHub'da, depoya okuma erişimi olan bir PAT oluşturmak.
- Bu PAT'ı bir Kubernetes Secret'ı içinde saklamak ve
GitRepomanifestinde bu Secret'a referans vermek.
Aşağıdaki video, bu sürecin Rancher arayüzü üzerinden nasıl yapıldığını adım adım gösteriyor. Biz YAML ile çalışacak olsak da, videodaki adımlar PAT oluşturma ve gerekli bilgileri anlama konusunda çok faydalı olacaktır.
GitOps Made Easy with Fleet. Kubernetes At Home - Part 7
Jim's Garage kanalından "GitOps Made Easy with Fleet" videosu, özel bir GitHub deposunu Fleet'e bağlamak için gereken kimlik doğrulama adımlarını pratik olarak gösteriyor.
Videonun 00:57 - 04:33 aralığını izleyin. İzlerken şunlara odaklanın: PAT Oluşturma (01:45 - 02:34): GitHub'da yeni bir "fine-grained personal access token" nasıl oluşturulduğunu gösteriyor. Bu jetonu kopyalayıp güvenli bir yere kaydetmenin önemi vurgulanıyor. GitRepo Yapılandırması (02:34 - 04:33): Videoda Rancher arayüzü kullanılıyor olsa da, doldurulan alanlar bizim YAML dosyamızdaki alanlarla birebir aynıdır: Repository URL, Branch Name, Username ve Password (bizim PAT'ımız).
Videoda gösterilen süreci YAML'e dökelim:
-
Kubernetes Secret'ı Oluşturun:
GitHub'dan PAT'ınızı oluşturup kopyaladıktan sonra, kümenizde bu bilgiyi saklamak için aşağıdakikubectlkomutunu çalıştırabilirsiniz.YOUR_GITHUB_USERNAMEveYOUR_PATkısımlarını kendi bilgilerinizle değiştirin.kubectl create secret generic github-secret -n fleet-local \ --type=kubernetes.io/basic-auth \ --from-literal=username=YOUR_GITHUB_USERNAME \ --from-literal=password=YOUR_PATBu komut,
fleet-localnamespace'i içindegithub-secretadında bir Secret oluşturur. -
GitRepoManifestinde Referans Verin:
ArtıkGitRepomanifestinizdeclientSecretNamealanını kullanarak bu Secret'a işaret edebilirsiniz:spec: # ... diğer alanlar ... clientSecretName: github-secret
Bu konuda daha fazla detay ve SSH anahtarları gibi diğer kimlik doğrulama yöntemleri için resmi dokümantasyon her zaman en iyi kaynaktır.
Create a GitRepo Resource - Rancher Fleet
"Create a GitRepo Resource" dokümanı, özel depolar için desteklenen tüm kimlik doğrulama mekanizmalarını detaylandırır.
"Adding A Private Git Repository" başlığı altındaki "Using HTTP Auth" bölümünü okuyun. Bu bölüm, kubectl create secret komutunu ve clientSecretName alanının GitRepo tanımında nasıl kullanıldığını özetlemektedir.
Uygulama: GitRepo Manifestini Oluşturma
Sıra geldi kendi projemiz için GitRepo manifestini oluşturmaya.
Proje deponuzun ana dizininde fleet adında yeni bir klasör oluşturun. Bu klasörün içine gitrepo.yaml adında bir dosya ekleyin ve içeriğini aşağıdaki gibi doldurun. YOUR_GITHUB_USERNAME ve YOUR_REPO_NAME kısımlarını kendi bilgilerinizle güncellemeyi unutmayın.
fleet/gitrepo.yaml:
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
# Kaynağı tanımlamak için bir isim.
name: pyspark-etl-job
# Tek küme dağıtımı için fleet-local namespace'ini kullanıyoruz.
namespace: fleet-local
spec:
# Deponuzun HTTPS URL'si.
repo: https://github.com/YOUR_GITHUB_USERNAME/YOUR_REPO_NAME.git
# İzlenecek dal.
branch: main
# SparkApplication manifestimizin bulunduğu klasör.
paths:
- k8s
# Deponuz private ise bu alanı ekleyin.
# Önceden 'kubectl create secret' ile oluşturduğunuz Secret'ın adını yazın.
# Eğer deponuz public ise bu satırı silebilirsiniz.
clientSecretName: github-secret
Bu dosyayı oluşturup reponuza push'ladığınızda, henüz bir şey olmayacaktır. Çünkü bu GitRepo tanımının kendisi, Fleet'in çalıştığı yönetim kümesine (management cluster) bir şekilde uygulanmalıdır. Bunu genellikle bir kereye mahsus kubectl apply -f fleet/gitrepo.yaml komutuyla yaparız. Bu komut çalıştırıldıktan sonra, Fleet artık deponuzu izlemeye başlar ve k8s klasöründeki herhangi bir değişikliği otomatik olarak kümenize uygular.
Özet ve Sonuç
Bu derste, GitOps kurulumumuzun en önemli adımlarından birini atarak teoriden pratiğe geçtik.
Temel Çıkarımlar:
GitRepokaynağı,repo,branch,pathsgibi anahtar alanlar içeren standart bir Kubernetes YAML manifestidir.- Tek bir küme için dağıtım yaparken
metadata.namespacealanınıfleet-localolarak ayarlamak önemlidir. - Özel (private) depolarla çalışmak için GitHub'dan bir Kişisel Erişim Jetonu (PAT) oluşturulur, bu jeton bir Kubernetes Secret'ına kaydedilir ve
clientSecretNameileGitRepomanifestinde referans gösterilir. fleet/gitrepo.yamldosyasını oluşturarak, Fleet'e projemizin Kubernetes manifestlerini nereden bulacağını ve nasıl izleyeceğini söyledik.
Gelecek Dersin Önizlemesi:
Artık Fleet'e nereye bakacağını söyledik. Peki ya farklı ortamlar (geliştirme, test, üretim) için farklı yapılandırmalar uygulamak istersek? Örneğin, geliştirme ortamında daha az kaynakla çalışmak veya üretimde farklı bir veritabanına bağlanmak gibi. Bir sonraki derste, tam da bu işe yarayan fleet.yaml dosyasını ve bu dosyanın GitRepo ile birlikte çalışarak ortam bazlı özelleştirmeleri nasıl sağladığını öğreneceğiz.