# Özel Docker Registry’nizi DigitalOcean Spaces ve Kubernetes ile Kurma
Meta Açıklaması: DigitalOcean Spaces ve Kubernetes kullanarak özel bir Docker registry nasıl kurulur? Bu rehberde, adım adım uygulamalı bir kılavuz, performans optimizasyonu ipuçları ve gerçek dünya senaryolarıyla güvenli ve ölçeklenebilir bir Docker registry oluşturmayı öğreneceksiniz.
Günümüzde, Docker ve Kubernetes, uygulama dağıtım ve yönetiminde vazgeçilmez teknolojiler haline geldi. Ancak, Docker imajlarınızı güvenli bir şekilde saklamak ve ekiplerinizle paylaşmak için özel bir registry’ye ihtiyacınız olabilir. Bu makalede, DigitalOcean Spaces’i depolama ve DigitalOcean Kubernetes’i yönetim için kullanarak kendi özel Docker registry’nizi nasıl kuracağınızı adım adım açıklayacağız. Bu sayede, imajlarınızın güvenliğini sağlarken maliyetlerinizi de optimize edebilirsiniz. Hazırsanız, başlayalım!
Temel Kavramlar: Docker, Kubernetes ve DigitalOcean Spaces
Öncelikle, bu rehberi anlamanız için gerekli temel kavramları özetleyelim.
Docker: Uygulamalarınızı ve bağımlılıklarını içeren kapsayıcılar (containers) oluşturmanıza ve yönetmenize olanak sağlayan bir platformdur. Docker imajları, uygulamalarınızın çalıştırılması için gereken her şeyi içeren paketlerdir.
Kubernetes (K8s): Kapsayıcılaştırılmış uygulamalarınızı ölçeklendirmenize, yönetmenize ve otomatikleştirmenize yardımcı olan açık kaynaklı bir kapsayıcı orkestrasyon sistemidir. K8s, uygulamalarınızın yüksek kullanılabilirliğini ve ölçeklenebilirliğini sağlar.
DigitalOcean Spaces: S3 uyumlu bir nesne depolama hizmetidir. Ucuz, güvenilir ve ölçeklenebilir bir şekilde dosyalarınızı ve verilerinizi saklamak için idealdir. Biz de Docker imajlarımızı burada depolayacağız.
DigitalOcean Spaces Depolama Alanınızı Hazırlama
İlk adımımız, DigitalOcean Spaces’te bir depolama alanı oluşturmak. DigitalOcean kontrol panelinize giriş yapın ve Spaces hizmetini aktifleştirin. Yeni bir Space oluştururken, anlamlı bir isim seçin (örneğin, docker-registry). Bölge seçimi performans için önemlidir; uygulamalarınızın ve Kubernetes kümenizle yakın bir bölge seçmeniz önerilir. Depolama sınıfını seçerken, maliyet ve performans arasında denge kurmanız gerekecektir.
Özel Docker Registry’nizi Kurmak: Adım Adım Uygulama
Bu bölümde, özel Docker registry’nizi kurmak için adım adım bir kılavuz sunacağız. Örnekleri daha anlaşılır kılmak için, my-registry adlı bir Docker registry kullanacağız.
# 1. Adım: Registry İmajını Çekme ve Çalıştırma
İlk olarak, özel Docker registry’nizi çalıştıracak olan resmi registry imajını çekmemiz gerekiyor:
docker pull registry:2
Daha sonra, bu imajı bir kapsayıcı olarak çalıştıracağız. Aşağıdaki komut, registry’yi 5000 portunda çalıştırır. Bu portu Kubernetes’te daha sonra kullanacağız.
docker run -d -p 5000:5000 --restart=always --name my-registry registry:2
Yeni Başlayan: Yukarıdaki komutları çalıştırmak için Docker’ın sisteminize kurulu ve çalışıyor olması gerekir. docker run komutu bir kapsayıcı çalıştırır, -d arka planda çalıştırır, -p port yönlendirmesi yapar, --restart=always kapsayıcının yeniden başlatıldığında otomatik olarak başlamasını sağlar ve --name kapsayıcıya bir isim verir.
# 2. Adım: Kubernetes Deployment Oluşturma
Şimdi, Docker registry’yi Kubernetes kümemize dağıtmak için bir deployment oluşturacağız. Aşağıdaki YAML dosyasını deployment.yaml olarak kaydedin:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-registry
spec:
replicas: 1
selector:
matchLabels:
app: my-registry
template:
metadata:
labels:
app: my-registry
spec:
containers:
- name: my-registry
image: registry:2
ports:
- containerPort: 5000
Bu dosyayı kubectl apply -f deployment.yaml komutu ile Kubernetes kümenize uygulayın.
# 3. Adım: Kubernetes Service Oluşturma
Deployment’ımız çalışıyor, ancak dış dünyadan erişilebilir değil. Bunun için bir service oluşturacağız:
apiVersion: v1
kind: Service
metadata:
name: my-registry
spec:
selector:
app: my-registry
ports:
- protocol: TCP
port: 5000
targetPort: 5000
type: LoadBalancer # veya NodePort, ihtiyaçlarınıza göre seçin
Bu dosyayı kubectl apply -f service.yaml komutu ile uygulayın. type: LoadBalancer seçeneği, DigitalOcean’ın sizin için bir yük dengeleyici oluşturmasını sağlar. Eğer NodePort seçerseniz, Kubernetes node’larınızın IP adresini ve port numarasını kullanarak registry’ye erişmeniz gerekecektir.
# 4. Adım: DigitalOcean Spaces ile Entegrasyon
Şimdi, Docker registry’mizi DigitalOcean Spaces ile entegre edeceğiz. Bunun için, registry’nin Spaces’e erişebilmesi için gerekli kimlik bilgilerini sağlamalıyız. DigitalOcean’ın sağladığı AWS benzeri kimlik bilgileri (Access Key ID ve Secret Access Key) kullanılacaktır. Bu bilgileri güvenli bir şekilde saklamak için Kubernetes Secrets kullanacağız.
apiVersion: v1
kind: Secret
metadata:
name: registry-credentials
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: <YOUR_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY: <YOUR_SECRET_ACCESS_KEY>
Bu secret’i kubectl apply -f secret.yaml ile uygulayın. Daha sonra, deployment’ı güncellememiz gerekiyor ki registry bu secret’i kullanabilsin. Bu güncelleme, registry’nin çevre değişkenlerini ayarlayarak Spaces’e bağlanmasını sağlayacaktır. (Detaylı konfigürasyon için DigitalOcean dokümanlarına bakın.)
Performans Optimizasyonu ve Ölçeklendirme
Özel Docker registry’niz çalışıyor olsa da, performansını optimize etmek önemlidir. Bunu, aşağıdaki stratejileri kullanarak yapabilirsiniz:
* Daha güçlü sunucular kullanın: Daha fazla işlemci ve bellek, registry’nin performansını artıracaktır.
* Cache kullanın: Sık kullanılan imajları önbelleğe alarak, tekrar tekrar indirme işlemlerini azaltabilirsiniz.
* Replica kullanın: Registry’nin birden fazla kopyasını çalıştırarak yüksek kullanılabilirlik ve ölçeklenebilirlik sağlayabilirsiniz. Bu, Kubernetes’in sağladığı replica setleri ile kolayca yapılabilir.
* Content Delivery Network (CDN) kullanın: Bir CDN, imajların daha hızlı bir şekilde dağıtılmasını sağlar.
* İmaj boyutlarını optimize edin: Gereksiz dosyaları imajlardan çıkararak boyutlarını küçültün.
Gerçek Dünya Senaryoları ve Vaka Analizleri
Senaryo 1: Bir e-ticaret şirketinin, ürün kataloglarını içeren Docker imajlarını güvenli bir şekilde saklaması ve dağıtması gerekiyor. Özel Docker registry, bu imajları güvenli bir şekilde depolayarak, yetkisiz erişimi önler.
Senaryo 2: Bir yazılım geliştirme ekibi, sürekli entegrasyon/sürekli dağıtım (CI/CD) boru hattında özel Docker registry kullanarak, imajların sürüm kontrolünü ve dağıtımını otomatikleştirir.
İleri Düzey Konular: Performans Analizi ve Edge Case’ler
Performans Analizi: Kubernetes’in sağladığı metrikler ve günlükleri kullanarak registry’nin performansını izleyebilirsiniz. Yavaş yanıt süreleri, yüksek CPU kullanımı gibi sorunları tespit edip, performansı iyileştirmek için gerekli adımları atabilirsiniz.
Edge Case’ler: Registry’nin beklenmedik durumlarla nasıl başa çıktığını test etmek önemlidir. Örneğin, ağ kesintileri, disk doluluğu gibi durumları simüle ederek, sistemin güvenilirliğini artırabilirsiniz. Bu testler için, [fatihsoysal.com](https://fatihsoysal.com) adresinde bulabilirsiniz.
Sonuç
Bu rehberde, DigitalOcean Spaces ve Kubernetes kullanarak özel bir Docker registry kurmayı adım adım öğrendiniz. Özel bir registry, imajlarınızın güvenliğini ve kontrolünü sağlar. Performans optimizasyonu ve ölçeklendirme stratejileri ile, ihtiyaçlarınıza uygun bir çözüm oluşturabilirsiniz.
Sıkça Sorulan Sorular:
1. Registry’ye nasıl erişebilirim? Kubernetes Service’in sağladığı IP adresi ve portu kullanarak erişebilirsiniz.
2. Registry’nin güvenliğini nasıl sağlayabilirim? HTTPS kullanarak ve yetkilendirme mekanizmaları (örneğin, token tabanlı yetkilendirme) uygulayarak güvenliği artırabilirsiniz.
3. Registry’yi nasıl yedekleyebilirim? DigitalOcean Spaces’in sağladığı yedekleme mekanizmalarını veya üçüncü parti yedekleme çözümlerini kullanabilirsiniz.
4. Registry’nin ölçeklenebilirliğini nasıl artırabilirim? Kubernetes’in sağladığı ölçeklendirme mekanizmaları (örneğin, Horizontal Pod Autoscaler) kullanarak registry’nin ölçeklenebilirliğini artırabilirsiniz.
5. Registry’nin maliyeti nedir? Maliyet, kullandığınız DigitalOcean Spaces depolama alanı ve Kubernetes kümesinin büyüklüğüne bağlıdır.
Yazar: Fatih Soysal