Kubernetes Otomatik Deploy: CircleCI ile CI/CD Kurulumu (Adım Adım)
Kubernetes Otomatik Deploy: CircleCI ile CI/CD Kurulumu
Bu rehberde
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:2Kubernetes)
kubectlkurulu 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
- Ö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
-
CI sistemlerinin admin kullanıcıyla bağlanması önerilmez.
-
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ı
- 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
- 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
- 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ı
- .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
- 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)
-
Neden CircleCI kullanıyoruz? Hızlı kurulur ve GitHub ile entegredir.
-
latest etiketi neden önerilmez? Sürüm takibini zorlaştırır.
-
Bu yapı prod için uygun mu? Evet, küçük ve orta ölçekli sistemler için.
-
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.