Ana içeriğe geç

Kubernetes Otomatik Deploy: CircleCI ile CI/CD Kurulumu (Adım Adım)

Kubernetes Otomatik Deploy: CircleCI ile CI/CD Kurulumu

Bu rehberde

oaicite:0
kullanarak
oaicite:1
ortamına otomatik deploy süreci kuracaksınız.

Amaç, GitHub’a yapılan her kod güncellemesinde uygulamayı otomatik yayınlamaktır.


Bu Rehberde Ne Öğreneceksiniz?

  • CircleCI ile CI/CD hattı oluşturmayı
  • Docker imajı üretip registry’ye göndermeyi
  • Kubernetes’e otomatik deployment yapmayı
  • Commit bazlı sürümleme kullanmayı

Teknik Özet

Konu: Kubernetes için otomatik CI/CD
Problem: Manuel deploy süreçlerinin hataya açık olması
Çözüm: CircleCI + Docker + Kubernetes otomasyonu

Bu yapı:

  • GitHub push ile tetiklenir
  • Container bazlı çalışır
  • Ölçeklenebilir deploy sağlar

Ön Gereksinimler

Devam etmeden önce şunlar hazır olmalı:

  • Kubernetes kümesi (örnek:
    oaicite:2
    Kubernetes
    )
  • kubectl kurulu olmalı
  • Docker bilgisi
  • Docker Hub hesabı
  • GitHub hesabı

1️⃣ Kubernetes Kümesine Erişim

Küme oluşturulduktan sonra kubectl erişimini test edin:

kubectl get nodes
  • Bu komut Kubernetes düğümlerini listeler.

No resources found görüyorsanız erişim başarılıdır.


2️⃣ Git Projesini Oluşturma

  1. Örnek uygulama için yeni bir klasör oluşturun:

mkdir ~/k8s-sample-app && cd ~/k8s-sample-app
git init
  • Bu depo CI/CD yapılandırmasını içerecek.

3️⃣ CI/CD İçin Service Account Oluşturma

  1. CI sistemlerinin admin kullanıcıyla bağlanması önerilmez.

  2. Service Account tanımı oluşturun:


apiVersion: v1
kind: ServiceAccount
metadata:
name: cicd
namespace: default
  • Bu hesap sadece CI/CD işlemleri için kullanılır.

Uygulayın:


kubectl apply -f cicd-service-account.yml

4️⃣ Role ve RoleBinding Tanımı

  1. Service Account yetkilerini tanımlayın:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cicd
namespace: default
rules:
- apiGroups: ["", "apps"]
resources: ["deployments", "services", "pods"]
verbs: ["*"]
  • Bu rol temel Kubernetes kaynaklarına erişim verir.

Bağlayın:


kubectl apply -f cicd-role.yml
kubectl apply -f cicd-role-binding.yml

5️⃣ Docker ile Örnek Uygulama

  1. Dockerfile oluşturun:

FROM nginx:1.21
COPY index.html /usr/share/nginx/html/index.html
  • Bu imaj statik HTML yayınlar.

İmajı oluşturun:


docker build -t kullaniciadi/k8s-sample-app .

Test edin:


docker run -p 8080:80 kullaniciadi/k8s-sample-app

6️⃣ Kubernetes Deployment ve Service

  1. Deployment tanımı:

apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-sample-app
spec:
replicas: 1
selector:
matchLabels:
app: k8s-sample-app
template:
metadata:
labels:
app: k8s-sample-app
spec:
containers:
- name: app
image: kullaniciadi/k8s-sample-app:latest
ports:
- containerPort: 80

Service tanımı:


apiVersion: v1
kind: Service
metadata:
name: k8s-sample-app
spec:
type: ClusterIP
selector:
app: k8s-sample-app
ports:
- port: 80
targetPort: 80

Uygulayın:


kubectl apply -f kube/

7️⃣ CircleCI Yapılandırması

  1. .circleci/config.yml dosyasını oluşturun:

version: 2.1
jobs:
build:
docker:
- image: circleci/buildpack-deps:bullseye
steps:
- checkout
- setup_remote_docker
- run: docker build -t app:latest .
- run: docker push app:latest
  • Bu yapı Docker imajını otomatik üretir.

8️⃣ Commit Bazlı Deploy

  1. latest etiketi yerine commit hash kullanın.

CircleCI değişkeni:


$CIRCLE_SHA1
  • Bu sayede her sürüm izlenebilir olur.

  • Deploy işlemi script ile yapılır:

kubectl apply -f kube/

Sıkça Sorulan Sorular (SSS)

  1. Neden CircleCI kullanıyoruz? Hızlı kurulur ve GitHub ile entegredir.

  2. latest etiketi neden önerilmez? Sürüm takibini zorlaştırır.

  3. Bu yapı prod için uygun mu? Evet, küçük ve orta ölçekli sistemler için.

  4. Birden fazla ortam olur mu? Evet, namespace bazlı ayrım yapılabilir.


Sonuç

Bu rehberle:

CircleCI ile CI/CD hattı kurdunuz

Docker imajlarını otomatik ürettiniz

Kubernetes’e otomatik deploy sağladınız

Bu yapıyı Rabisu Bulut Kubernetes altyapısında ölçeklenebilir ve güvenli şekilde kullanabilirsiniz.