> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ArgoCD ile Versiyon Yönetimi

> Argo CD, Kubernetes ortamları için geliştirilen açık kaynaklı bir GitOps Continuous Deployment aracıdır. GitOps'un temel taşı olan Single Source of Truth modeline dayanan bir mimariye sahiptir ve belirli aralıklarla Kubernetes'e dağıtılmış uygulamaları izleyerek git deposundaki yaml dosyalarıyla karşılaştırır. Herhangi bir değişiklik tespit ettiğinde otomatik olarak senkronize eder.

## ArgoCD Kurulumu

ArgoCD'nin Kubernetes Cluster'a kurulumunu gerçekleştirmek için aşağıdaki adımları izleyin.

<Steps>
  <Step title="Namespace oluşturma">
    ArgoCD için namespace oluşturun:

    ```bash theme={null}
    kubectl create namespace argocd
    ```
  </Step>

  <Step title="ArgoCD kurulumu">
    GitHub deposundan ArgoCD manifest dosyalarını uygulayın:

    ```bash theme={null}
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    ```
  </Step>

  <Step title="Pod durumunu izleme">
    Pod'ların başlatılmasını izleyin:

    ```bash theme={null}
    watch kubectl get pods -n argocd
    ```

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/01-pods.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=8b6c547f99de0b1a2eefb9b685ded4aa" alt="ArgoCD Pod'ları" width="741" height="176" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/01-pods.png" />
  </Step>

  <Step title="Servis tipini yapılandırma">
    ArgoCD arayüzüne erişim sağlamak için servis tipini NodePort olarak yapılandırın:

    ```bash theme={null}
    kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
    kubectl get svc argocd-server -n argocd
    ```

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/02-service.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=b10dd71721d516bd6ffe70e7a36e62bb" alt="ArgoCD Service" width="793" height="129" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/02-service.png" />
  </Step>

  <Step title="Arayüze erişim">
    Servisinizin dışarı açtığı port adresini kullanarak ArgoCD arayüzüne erişin:

    ```
    http://<KUBERNETES_WORKER_IP_ADDRESS>:<PORT>
    ```

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/03-ui.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=ff4324ef4d1b825be6a9b23a13420234" alt="ArgoCD Arayüzü" width="1200" height="533" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/03-ui.png" />
  </Step>

  <Step title="Şifre alma">
    Base64 formatında kodlanmış şifreyi decode ederek görüntüleyin:

    ```bash theme={null}
    kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
    ```

    <Info>
      Varsayılan kullanıcı adı **admin**'dir. Bu bilgileri kullanarak ArgoCD arayüzüne giriş yapabilirsiniz.
    </Info>
  </Step>
</Steps>

## Git Kurulumu ve Repository Yapılandırması

Deployment dosyalarını GitHub'a push etmek için Git kurulumunu gerçekleştirin ve repository'yi yapılandırın.

<Steps>
  <Step title="Git kurulumu">
    Git paketini kurun:

    ```bash theme={null}
    sudo apt update
    sudo apt install git
    git --version
    ```

    <Warning>
      Git sizden kullanıcı bilgilerini isteyebilir. Aşağıdaki komutları kullanarak yapılandırın:

      ```bash theme={null}
      git config --global user.email "you@example.com"
      git config --global user.name "Your Name"
      ```
    </Warning>
  </Step>

  <Step title="GitHub repository oluşturma">
    Deployment dosyalarınızı tutmak için GitHub üzerinden bir repository oluşturun.
  </Step>

  <Step title="Remote address yapılandırması">
    GitHub repository'sine dosya ekleyebilmek için git sistemine remote address olarak ekleyin.

    <Warning>
      **Authentication Hatası Çözümü**

      Eğer git kullanımında "Authentication failed" hatası alırsanız, aşağıdaki adımları takip edin:

      1. GitHub hesabınıza giriş yapın
      2. Sağ üst köşedeki profil resminize tıklayın ve "Settings" (Ayarlar) seçeneğini seçin
      3. Sol menüden "Developer settings" (Geliştirici ayarları) altında "Personal access tokens" seçeneğine gidin
      4. "Token" ardından "Generate new token" düğmesine tıklayın
      5. Gerekli izinleri verin
      6. Sayfanın en altına gidin ve "Generate token" düğmesine tıklayın
      7. **Token değerini kopyalayın ve güvenli bir yere kaydedin. Bu değeri tekrar görüntüleyemezsiniz.**

      Token ile remote address'i yapılandırın:

      ```bash theme={null}
      git remote set-url origin https://<USERNAME>:<ACCESS_TOKEN>@<REPO_ADDRESS>
      ```

      Örnek: `https://test:ghp_xxxx@github.com/test/test.git`
    </Warning>
  </Step>

  <Step title="Deployment dosyalarını push etme">
    Apinizer Manager deployment yaml dosyasını git versiyon sistemine ekleyin ve uzak repository'ye push edin:

    ```bash theme={null}
    git init
    git add apinizer-api-manager-deployment.yaml
    git commit -m "manager add"
    git remote add origin <GITHUB_REPO_ADDRESS>
    git push -u origin master
    ```
  </Step>
</Steps>

## Git Repository'sinin ArgoCD'ye Eklenmesi

YAML dosyalarını GitHub repository'sine ekledikten sonra, ArgoCD arayüzünden bu repository adresini eklemeniz gerekmektedir.

Birçok bağlantı yöntemi vardır. HTTPS yöntemi için aşağıdaki alanları doldurmanız gereklidir.

<img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/04-git-repo.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=f48c3465fbc4ab347aa56040533a9fb0" alt="Git Repository Ekleme" width="1200" height="577" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/04-git-repo.png" />

<Warning>
  **Önemli**

  Bağlantı yöntemi olarak **HTTPS** seçilirse, **password** kısmına önceki adımda oluşturduğunuz **token** değerini yazınız.
</Warning>

<img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/05-git-repo-detail.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=2ac8d40147d1534fa0a90715bc31e7e3" alt="Git Repository Bağlantı Detayları" width="1200" height="317" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/05-git-repo-detail.png" />

## ArgoCD Uygulama Oluşturma

ArgoCD üzerinde uygulama oluşturarak deployment süreçlerinizi otomatikleştirebilirsiniz.

<Steps>
  <Step title="Uygulama adı belirleme">
    Uygulama için bir isim verin.
  </Step>

  <Step title="Sync Policy yapılandırması">
    ArgoCD'nin repository'deki güncellemeleri otomatik olarak kontrol etmesini istiyorsanız, **SYNC POLICY** seçeneğini **Automatic** olarak ayarlayın.

    <Info>
      Automatic sync policy aktif olduğunda, ArgoCD sizin yerinize 3 dakikada bir kontrol sağlar.
    </Info>

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/06-app-create.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=1c7624c47e4168e7ba33bb9966038384" alt="Uygulama Oluşturma" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/06-app-create.png" />
  </Step>

  <Step title="Namespace otomatik oluşturma">
    <Info>
      Kubernetes Cluster'ınızda daha önceden oluşturulmamış bir namespace'e ihtiyaç duyduğunuzda, **AUTO-CREATE NAMESPACE** seçeneği ile ArgoCD Kubernetes cluster'ınızda bir namespace oluşturur.
    </Info>

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/07-auto-namespace.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=cc601447c3c038d7e754b73aecdebf0c" alt="Auto-create Namespace" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/07-auto-namespace.png" />

    <img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/08-app-detail.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=b8f8a6b854669bbab786d6dc2fac309b" alt="Uygulama Detayları" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/08-app-detail.png" />
  </Step>
</Steps>

### Uygulama Yönetimi

ArgoCD size deployment, replica set ve pod'ları görsel olarak gösterir. Pod'ların anlık log verilerini görüntüleyebilirsiniz.

<img src="https://mintcdn.com/apinizer/rfZaKpIysRC7U9dY/images/setup/kubernetes/argocd/09-pod-logs.png?fit=max&auto=format&n=rfZaKpIysRC7U9dY&q=85&s=3e1666c4459cc23fc488891308861dec" alt="Pod Logları" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/kubernetes/argocd/09-pod-logs.png" />

**Manuel Senkronizasyon:** YAML dosyanızda yapılan bir değişikliği manuel olarak **SYNC** butonuna basarak senkronize edebilirsiniz.

**Otomatik Senkronizasyon:** YAML dosyalarında yapılan her değişikliği otomatik olarak tespit eden ArgoCD, pod'larınızı güncelleyerek deploy süreçlerinizi otomatikleştirir. Bu sayede deploy süreçleriniz daha verimli ve hızlı bir şekilde gerçekleşirken, manuel müdahalelerin ve hataların önüne geçebilirsiniz.
