Durumlu Uygulamalar için StatefulSets
Kararlı ağ tanımlayıcıları ve kalıcı depolama sağlayarak veritabanları gibi durumlu uygulamaları StatefulSets kullanarak dağıtın ve yönetin.
Durumlu Uygulamalar için StatefulSets, CoddyKit'te ücretsiz bir Kubernetes Basics dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kubernetes Basics öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kubernetes Basics kursu toplamda 4 dersten oluşur.
Durum Bilgisi Tutan Uygulamalar için StatefulSets
Hoş geldiniz! Bu derste, durum bilgisi tutan uygulamaları yönetmek için tasarlanmış bir Kubernetes nesnesi olan StatefulSets konusunu ayrıntılı biçimde inceleyeceğiz.
Kolayca ölçeklenip değiştirilebilen durumsuz uygulamaların aksine, durum bilgisi tutan uygulamalar her örnek için benzersiz kimliklere ve kalıcı depolamaya ihtiyaç duyar. Verileri yerel olarak depolayan veritabanlarını, ileti kuyruklarını veya özel uygulamaları düşünün.
Neden Stateful? Zorluk
Geleneksel Dağıtımlar, durumsuz uygulamalar için oldukça uygundur. Bir Pod çalışamaz duruma gelirse onun yerini yeni bir Pod alır ve isteği hangisinin karşıladığı önemli değildir.
Ancak durum bilgisi tutan uygulamalarda her çoğaltmanın genellikle kararlı, benzersiz bir kimliğe ve kendine ait depolama alanına ihtiyacı vardır. Bir veritabanı Pod'u yeniden başlatılırsa kendi veri birimine yeniden bağlanması gerekir.
Kararlı Ağ ve Pod Kimliği
StatefulSets'in önemli bir özelliği, her Pod için kararlı ve benzersiz ağ tanımlayıcıları sağlamasıdır.
- Pod'lar öngörülebilir ve sıralı bir biçimde adlandırılır (ör.
web-0,web-1). - Yeniden başlatılmalar boyunca ana makine adlarını korurlar.
- Bu sayede diğer hizmetler belirli bir çoğaltmaya güvenilir biçimde bağlanabilir.
Kararlı ve Kalıcı Depolama
StatefulSets, her Pod'un kendine ait kararlı ve kalıcı bir depolama alanı edinmesini sağlar. Bu işlem Kalıcı Birim İstemleri (PVCs) kullanılarak gerçekleştirilir.
Bir StatefulSet Pod'u oluşturulduğunda, volumeClaimTemplates tanımına göre otomatik olarak bir PVC oluşturulur. Pod çalışamaz duruma gelir ve yeniden oluşturulursa aynı PVC'ye, dolayısıyla özgün verilerine yeniden bağlanır.
StatefulSet YAML Yapısı
Bir StatefulSet YAML tanımı, bazı önemli eklemeler dışında bir Dağıtım tanımına benzer. Şunları içerir:
apiVersion,kind,metadataspec.replicas,spec.selector,spec.template(Dağıtımlardaki gibi)spec.serviceName: Başsız bir hizmete bağlanır.spec.volumeClaimTemplates: Her Pod için PVC'lerin nasıl oluşturulacağını tanımlar.
Kararlı Kimlikler için Başsız Hizmet
StatefulSets'in kararlı ağ kimlikleri sağlaması için bir Başsız Hizmete ihtiyacı vardır. Başsız bir hizmetin küme IP adresi yoktur. Bunun yerine seçtiği Pod'ların IP adreslerini doğrudan döndürür.
StatefulSet, Pod'larının her biri için DNS kayıtları oluşturmak üzere bu hizmeti kullanır (ör. pod-0.my-service.my-namespace.svc.cluster.local).
apiVersion: v1
kind: Service
metadata:
name: my-app-headless
spec:
ports:
- port: 80
name: web
clusterIP: None # This makes it a headless service
selector:
app: my-appVolumeClaimTemplates
volumeClaimTemplates bölümü StatefulSets'e özgüdür. Her çoğaltma için oluşturulacak Kalıcı Birim İstemleri (PVCs) için bir şablondur.
StatefulSet'teki her Pod (ör. my-app-0, my-app-1), bu şablona göre kendine ait bir PVC (ör. data-my-app-0, data-my-app-1) edinir ve böylece kendine ayrılmış depolama alanına sahip olur.
volumeClaimTemplates:
- metadata:
name: data # This name is used in Pod's volumeMounts
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1GiEksiksiz StatefulSet Örneği
Basit bir Nginx StatefulSet için eksiksiz bir örneği burada bulabilirsiniz. Başsız hizmete bağlanan serviceName ile volumeClaimTemplates bölümüne dikkat edin.
Bunu dağıtmak için nginx-statefulset.yaml adıyla kaydedin ve kubectl apply -f nginx-statefulset.yaml komutunu çalıştırın.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-headless" # Must match headless service name
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www # Mounts the volume from the PVC
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # This name links to volumeMounts.name
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginxPod'ları Adlandırma ve Sıralama
Dağıtım tamamlandığında web-0, web-1 gibi adlara sahip Pod'lar görürsünüz. Bu dizinler kararlı ve benzersizdir.
StatefulSets ölçekleme işlemleri için katı bir sıralama uygular. Pod'lar sırayla (0, 1, 2...) oluşturulur ve ters sırayla (..., 2, 1, 0) sonlandırılır.
Bu sıralı yaklaşım, tutarlılığı korumak için birçok dağıtık ve durum bilgisi tutan sistemde kritik öneme sahiptir.
Ölçekleme ve Aşamalı Güncellemeler
Bir StatefulSet'i, kubectl scale statefulset web --replicas=3 komutunu kullanarak bir Dağıtım gibi ölçekleyebilirsiniz.
Aşamalı güncellemeler de çalışır; ancak aynı sıralama güvenceleri geçerlidir: Pod'lar ters sıra numarası sırasına göre tek tek güncellenir ve önceki Pod hazır olmadan sonraki Pod'un güncellenmemesi sağlanır.
Bu dikkatli düzenleme, durum bilgisi tutan uygulamalardaki kesintiyi en aza indirir.
Anlayışınızı Denetleyin
Aşağıdakilerden hangileri Kubernetes StatefulSets için temel özellikler veya gereksinimlerdir?
Özet: StatefulSets Uygulamada
Harika iş çıkardınız! Bu derste, durum bilgisi tutan uygulamaları yönetmek için güçlü bir Kubernetes nesnesi olan StatefulSets konusunu inceledik.
- Kararlı ağ kimlikleri ve sıralı işlemler sağlarlar.
- Her çoğaltma için kendine ayrılmış, kalıcı depolama alanı sağlamak üzere
volumeClaimTemplateskullanırlar. - Kararlı ağ kimlikleri için bir başsız hizmet zorunludur.
StatefulSets, veritabanlarını ve diğer kritik, durum bilgisi tutan iş yüklerini Kubernetes üzerinde güvenilir biçimde çalıştırmanın temel yapı taşlarındandır.
Sıkça Sorulan Sorular
“Durumlu Uygulamalar için StatefulSets” dersi ücretsiz mi?
Evet — “Durumlu Uygulamalar için StatefulSets” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kubernetes Basics kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kubernetes Basics kursu toplamda 4 dersten oluşur.
“Durumlu Uygulamalar için StatefulSets” dersinde ne öğreneceğim?
Kararlı ağ tanımlayıcıları ve kalıcı depolama sağlayarak veritabanları gibi durumlu uygulamaları StatefulSets kullanarak dağıtın ve yönetin. Kubernetes Basics ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kubernetes Basics öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kubernetes Basics, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Durumlu Uygulamalar için StatefulSets” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kubernetes Basics dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kubernetes Basics dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Durumlu Uygulamalar için StatefulSets
- Düğüme Özel Görevler için DaemonSets
- Kubernetes Operatörlerini Anlama
- Özel Kaynak Tanımları (CRD'ler)