Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 26

Creating a Fleet GitRepo Resource

Recommended resources

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:

  • kind ve apiVersion: Bu alanlar, Kubernetes'e bunun Fleet tarafından yönetilen bir GitRepo Özel Kaynağı (Custom Resource) olduğunu söyler. Kubernetes tecrübenizden bu standart alanlara aşinasınız.
  • metadata.name: GitRepo kaynağı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çin fleet-local kullanacağız.
  • spec.repo: Fleet'in izleyeceği Git deposunun HTTPS veya SSH URL'si.
  • spec.branch: İzlenecek olan dal (branch). Genellikle main veya master olur.
  • spec.paths: Depo içinde taranacak dizinlerin bir listesi. Fleet, bu dizinlerdeki tüm Kubernetes manifestlerini (bizim durumumuzda k8s dizinindeki SparkApplication manifesti) 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.

Rancher Fleet GitRepo Creation Form
Rancher arayüzündeki bu "GitRepo: Create" formu, bir `GitRepo` YAML manifestinde tanımladığımız alanların (`Name`, `Repository URL`, `Branch`, `Paths`) görsel bir temsilidir.

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:

  1. GitHub'da, depoya okuma erişimi olan bir PAT oluşturmak.
  2. Bu PAT'ı bir Kubernetes Secret'ı içinde saklamak ve GitRepo manifestinde 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:

  1. Kubernetes Secret'ı Oluşturun:
    GitHub'dan PAT'ınızı oluşturup kopyaladıktan sonra, kümenizde bu bilgiyi saklamak için aşağıdaki kubectl komutunu çalıştırabilirsiniz. YOUR_GITHUB_USERNAME ve YOUR_PAT kı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_PAT
    

    Bu komut, fleet-local namespace'i içinde github-secret adında bir Secret oluşturur.

  2. GitRepo Manifestinde Referans Verin:
    Artık GitRepo manifestinizde clientSecretName alanı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:

  • GitRepo kaynağı, repo, branch, paths gibi anahtar alanlar içeren standart bir Kubernetes YAML manifestidir.
  • Tek bir küme için dağıtım yaparken metadata.namespace alanını fleet-local olarak 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 clientSecretName ile GitRepo manifestinde referans gösterilir.
  • fleet/gitrepo.yaml dosyası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.