KUBERNETES NESNELERİ VE GÖREVLERİ
Kubernetes Nesneleri ve Uygulamalı Anlatım
POD NEDİR?
Kubernetes'te Pod, bir veya daha fazla konteyneri barındıran en küçük ve en temel dağıtım birimidir. Pod'lar, aynı ağ alanını ve depolama kaynaklarını paylaşan konteyner gruplarını temsil eder. Her pod, bir uygulamanın tek bir örneğini çalıştırmak için tasarlanmıştır ve genellikle bir konteyner içerir, ancak bazı durumlarda birden fazla konteyner içerebilir.
Pod'un Özellikleri
- Konteyner Grubu: Pod'lar, bir veya daha fazla konteyneri barındırır ve bu konteynerler aynı ağ alanını ve depolama kaynaklarını paylaşır.
- Ağ Alanı: Pod'lar, aynı IP adresini ve portları paylaşır, bu da konteynerler arasındaki iletişimi kolaylaştırır.
- Depolama: Pod'lar, kalıcı veya geçici depolama kaynaklarını paylaşabilir.
- Yaşam Döngüsü: Pod'lar, belirli bir yaşam döngüsüne sahiptir ve Kubernetes tarafından yönetilir.
Pod Kullanım Senaryoları
- Uygulama Dağıtımı: Uygulama bileşenlerini dağıtmak ve yönetmek için pod'lar kullanılır.
- Yük Dengeleme: Pod'lar, yük dengeleme ve ölçeklendirme için kullanılır.
- Ağ İzolasyonu: Pod'lar, ağ izolasyonu ve güvenlik sağlamak için kullanılır.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
my-pod
adlı Pod, nginx:latest
görüntüsünü kullanan bir konteyner içerir ve 80 numaralı portu dinler.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 8080
targetPort: 80
Podu servisin arkasına alan ve 8080 portundaki talebi container içerisindeki port 80'e port forward eden örnek yaml dosyası.
REPLICASET NEDİR?
Kubernetes'te ReplicaSet, belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlamak için kullanılan bir nesnedir. ReplicaSet, pod'ların belirli bir sayıda kopyasını (replika) çalıştırarak uygulamanın yüksek kullanılabilirliğini ve ölçeklenebilirliğini sağlar. ReplicaSet, pod'ların istenen sayıda çalışmasını sağlamak için sürekli olarak pod'ları izler ve gerektiğinde yeni pod'lar oluşturur veya mevcut pod'ları siler.
ReplicaSet'in Özellikleri
- Yüksek Kullanılabilirlik: ReplicaSet, belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlar.
- Ölçeklenebilirlik: ReplicaSet, pod'ların sayısını otomatik olarak ölçeklendirir ve uygulamanın performansını artırır.
- Otomatik İyileşme: ReplicaSet, pod'ların durumunu izler ve gerektiğinde yeni pod'lar oluşturarak veya mevcut pod'ları silerek otomatik olarak iyileşir.
ReplicaSet Kullanım Senaryoları
- Uygulama Dağıtımı: Uygulama bileşenlerini dağıtmak ve yönetmek için ReplicaSet kullanılır.
- Yük Dengeleme: ReplicaSet, pod'lar arasında yük dengeleme sağlar ve uygulamanın performansını artırır.
- Otomatik Ölçeklendirme: ReplicaSet, pod'ların sayısını otomatik olarak ölçeklendirir ve uygulamanın performansını artırır.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 8080
targetPort: 80
type: ClusterIP
my-replicaset
adlı ReplicaSet, nginx:latest
görüntüsünü kullanan ve 80 numaralı portu dinleyen 3 pod'un her zaman çalışır durumda olmasını sağlar. Servis sayesinde my-app selectoru ile seçilecek podları yönetecek bir servis devreye anılmış ve 8080 pottuna gelen talepler bu podların 80 portuna port forward edilmiştir.
DEPLOYMENT NEDİR?
Kubernetes'te Deployment, uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini otomatikleştiren bir nesnedir. Deployment, pod'ların istenen durumunu tanımlar ve Kubernetes'in bu durumu korumasını sağlar. Deployment, pod'ların güncellenmesi, ölçeklendirilmesi ve geri alınması gibi işlemleri kolaylaştırır.
Replicaset'in sonradan geliştirilen daha gelişmiş ve yeni yetenekler ile donatılmış halidir. Bir deployment yayına alındığında, takip için otomatik bir replicaset üretilir ve podların istenilen sayıda olması güvencesi replicaset'e verilir.
Deployment'in Özellikleri
- Otomatik Güncelleme: Deployment, pod'ların yeni sürümlerini otomatik olarak dağıtır ve günceller.
- Ölçeklendirme: Deployment, pod'ların sayısını otomatik olarak ölçeklendirir ve uygulamanın performansını artırır.
- Geri Alma: Deployment, hatalı güncellemeleri geri alarak uygulamanın kararlılığını sağlar.
- Durum Yönetimi: Deployment, pod'ların istenen durumunu tanımlar ve Kubernetes'in bu durumu korumasını sağlar.
Deployment Kullanım Senaryoları
- Uygulama Dağıtımı: Uygulama bileşenlerini dağıtmak ve yönetmek için Deployment kullanılır.
- Yük Dengeleme: Deployment, pod'lar arasında yük dengeleme sağlar ve uygulamanın performansını artırır.
- Otomatik Ölçeklendirme: Deployment, pod'ların sayısını otomatik olarak ölçeklendirir ve uygulamanın performansını artırır.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
my-deployment
adlı Deployment, nginx:latest
görüntüsünü kullanan ve 80 numaralı portu dinleyen 3 pod'un her zaman çalışır durumda olmasını sağlar.
Daha geniş bir bakış açısıyla hareket edelim. Port 80 ile içeride yayın yapan podları deployment ile 5 örnek çalışacak hale getiren, ama dışarıdan 8080 portundan erişmek isteyeeğimiz bir pod yığını için nasıl bir kod yazmalıydık?
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 5
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 8080
targetPort: 80
type: ClusterIP
Servis ve selector olarka my-app sayesinde istenilen senaryo sağlanabilir.
REPLICASET VE DEPLOYMENT ARASINDAKİ FARKLAR
ReplicaSet ve Deployment, Kubernetes'te uygulamaların yönetimi ve ölçeklendirilmesi için kullanılan iki önemli nesnedir.
ReplicaSet
- Amaç: Belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlar.
- Özellikler:
- Pod'ların belirli bir sayıda kopyasını (replika) çalıştırır.
- Pod'ların durumunu izler ve gerektiğinde yeni pod'lar oluşturur veya mevcut pod'ları siler.
- Yüksek kullanılabilirlik ve ölçeklenebilirlik sağlar.
- Kullanım Senaryoları:
- Uygulama bileşenlerini dağıtmak ve yönetmek.
- Yük dengeleme ve otomatik ölçeklendirme sağlamak.
Deployment
- Amaç: Uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini otomatikleştirir.
- Özellikler:
- Pod'ların istenen durumunu tanımlar ve Kubernetes'in bu durumu korumasını sağlar.
- Pod'ların yeni sürümlerini otomatik olarak dağıtır ve günceller.
- Hatalı güncellemeleri geri alarak uygulamanın kararlılığını sağlar.
- Pod'ların sayısını otomatik olarak ölçeklendirir ve uygulamanın performansını artırır.
- Kullanım Senaryoları:
- Uygulama bileşenlerini dağıtmak ve yönetmek.
- Yük dengeleme ve otomatik ölçeklendirme sağlamak.
- Uygulama güncellemelerini yönetmek ve hatalı güncellemeleri geri almak.
NOT:
- Deployment ve ReplicaSet İlişkisi: Deployment, pod'ların istenen durumda olmasını sağlamak için ReplicaSet oluşturur ve yönetir. ReplicaSet, belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlar.
- Container Kaynaklarındaki Değişiklikler: Container kaynaklarında bir değişiklik olduğunda (örneğin, yeni bir görüntü sürümü), Deployment yeni bir ReplicaSet oluşturur ve bu ReplicaSet ile yeni pod'ları yönetir.
- Geri Alma Mekanizması: Deployment, hatalı güncellemeleri geri alarak uygulamanın kararlılığını sağlar. Bu, yeni ReplicaSet'in devre dışı bırakılması ve önceki ReplicaSet'in yeniden etkinleştirilmesi ile gerçekleştirilir.
Bu mekanizmalar, Kubernetes'te uygulamaların yüksek kullanılabilirliğini ve kararlılığını sağlamak için kullanılır.
Karşılaştırma
- Yönetim: Deployment, ReplicaSet'i yönetir ve pod'ların istenen durumunu korur. Deployment, ReplicaSet'in üzerinde bir soyutlama katmanı sağlar.
- Güncellemeler: Deployment, pod'ların yeni sürümlerini otomatik olarak dağıtır ve günceller. ReplicaSet ise sadece belirli bir sayıda pod'un çalışır durumda olmasını sağlar.
- Geri Alma: Deployment, hatalı güncellemeleri geri alarak uygulamanın kararlılığını sağlar. ReplicaSet'te bu özellik yoktur.
- Ölçeklendirme: Her iki nesne de pod'ların sayısını otomatik olarak ölçeklendirebilir, ancak Deployment bu işlemi daha yönetilebilir ve esnek bir şekilde yapar.
Deployment, ReplicaSet'in üzerinde bir soyutlama katmanı sağlar ve uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini daha kolay ve esnek hale getirir. ReplicaSet ise belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlar ve yüksek kullanılabilirlik sağlar.
STATEFULSET NEDİR?
Kubernetes'te StatefulSet, durum bilgisi olan uygulamaların dağıtımını ve yönetimini sağlamak için kullanılan bir nesnedir. StatefulSet, her bir pod'un benzersiz bir kimliğe sahip olmasını ve belirli bir sırayla oluşturulmasını, ölçeklendirilmesini ve silinmesini sağlar. Bu, durum bilgisi olan uygulamaların (örneğin, veritabanları, dağıtılmış dosya sistemleri) doğru çalışmasını ve veri tutarlılığını sağlar.
StatefulSet'in Özellikleri
- Benzersiz Kimlik: Her bir pod, benzersiz bir kimliğe (isim) sahiptir ve bu kimlik, pod yeniden başlatıldığında bile korunur.
- Sıralı Oluşturma ve Silme: Pod'lar belirli bir sırayla oluşturulur ve silinir. Bu, durum bilgisi olan uygulamaların doğru çalışmasını sağlar.
- Kalıcı Depolama: StatefulSet, her bir pod için kalıcı depolama (PersistentVolume) sağlar ve bu depolama, pod yeniden başlatıldığında bile korunur.
- Ağ Kimliği: Her bir pod, benzersiz bir ağ kimliğine sahiptir ve bu kimlik, pod yeniden başlatıldığında bile korunur.
StatefulSet Kullanım Senaryoları
- Veritabanları: Veritabanı pod'larının benzersiz kimliklere ve kalıcı depolamaya ihtiyaç duyduğu durumlar.
- Dağıtılmış Dosya Sistemleri: Dağıtılmış dosya sistemlerinin doğru çalışması için benzersiz kimliklere ve kalıcı depolamaya ihtiyaç duyduğu durumlar.
- Durum Bilgisi Olan Uygulamalar: Durum bilgisi olan uygulamaların doğru çalışması ve veri tutarlılığının sağlanması için benzersiz kimliklere ve kalıcı depolamaya ihtiyaç duyduğu durumlar.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
serviceName: "my-service"
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
volumeClaimTemplates:
- metadata:
name: my-storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
my-statefulset
adlı StatefulSet, nginx:latest
görüntüsünü kullanan ve 80 numaralı portu dinleyen 3 pod'un her zaman çalışır durumda olmasını sağlar. Her bir pod, benzersiz bir kimliğe ve kalıcı depolamaya sahiptir.
Kubernetes'te StatefulSet kullanarak oluşturulan pod'ların isimleri belirli bir kalıba göre oluşturulur. StatefulSet, her bir pod'a benzersiz bir kimlik verir ve bu kimlik, StatefulSet adı ve bir sıra numarası içerir. Örneğin, my-statefulset
adlı StatefulSet için pod isimleri şu şekilde olacaktır:
my-statefulset-0
my-statefulset-1
my-statefulset-2
Bu isimler, StatefulSet'in replicas
sayısına göre artar. Örneğin, replicas: 3
olarak ayarlandığında, üç pod oluşturulur ve isimleri yukarıdaki gibi olur.
Bu isimleri görmek için kubectl get pods
komutunu kullanabilirsiniz:
kubectl get pods -l app=my-app
Bu komut, app=my-app
etiketiyle işaretlenmiş tüm pod'ları listeleyecektir ve StatefulSet tarafından oluşturulan pod'ların isimlerini görebilirsiniz.
DEMONSET NEDİR?
Kubernetes'te DaemonSet, her bir node üzerinde belirli bir pod'un çalışmasını sağlamak için kullanılan bir nesnedir. DaemonSet, her yeni node eklendiğinde otomatik olarak bu node üzerinde bir pod oluşturur ve node kaldırıldığında ilgili pod'u siler. Bu, her node üzerinde belirli bir hizmetin (örneğin, log toplama, izleme, ağ eklentileri) çalışmasını sağlamak için kullanılır.
DaemonSet'in Özellikleri
- Her Node Üzerinde Pod: DaemonSet, her bir node üzerinde belirli bir pod'un çalışmasını sağlar.
- Otomatik Pod Yönetimi: Yeni node eklendiğinde otomatik olarak pod oluşturur ve node kaldırıldığında ilgili pod'u siler.
- Durum Yönetimi: DaemonSet, pod'ların istenen durumunu tanımlar ve Kubernetes'in bu durumu korumasını sağlar.
DaemonSet Kullanım Senaryoları
- Log Toplama: Her node üzerinde log toplama hizmeti çalıştırmak.
- İzleme: Her node üzerinde izleme hizmeti çalıştırmak.
- Ağ Eklentileri: Her node üzerinde ağ eklentileri çalıştırmak.
- Güvenlik: Her node üzerinde güvenlik hizmetleri çalıştırmak.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
my-daemonset
adlı DaemonSet, nginx:latest
görüntüsünü kullanan ve 80 numaralı portu dinleyen bir pod'un her node üzerinde çalışmasını sağlar.
JOB NEDİR?
Kubernetes'te Job, belirli bir görevi tamamlamak için bir veya daha fazla pod çalıştıran bir nesnedir. Job, pod'ların başarılı bir şekilde tamamlanmasını sağlar ve görev tamamlandığında pod'ları sonlandırır. Job, tekrarlanan veya paralel görevlerin yönetimi için kullanılır.
Job'un Özellikleri
- Görev Tamamlama: Job, belirli bir görevi tamamlamak için pod'ları çalıştırır ve görev tamamlandığında pod'ları sonlandırır.
- Tekrarlanan Görevler: Job, tekrarlanan görevlerin yönetimi için kullanılabilir.
- Paralel Görevler: Job, paralel görevlerin yönetimi için kullanılabilir.
- Başarı Durumu: Job, pod'ların başarılı bir şekilde tamamlanmasını sağlar ve görev tamamlandığında başarılı durumu raporlar.
Job Kullanım Senaryoları
- Veri İşleme: Büyük veri işleme görevlerini yönetmek.
- Yedekleme: Veritabanı yedekleme görevlerini yönetmek.
- Batch İşlemleri: Batch işlemlerini yönetmek.
- Tek Seferlik Görevler: Tek seferlik görevleri yönetmek.
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
template:
metadata:
name: my-job
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Hello, Kubernetes! && sleep 30"]
restartPolicy: Never
backoffLimit: 4
my-job
adlı Job, busybox
görüntüsünü kullanan ve "Hello, Kubernetes!" mesajını yazdıran bir pod çalıştırır. Pod, görev tamamlandığında sonlandırılır ve Job başarılı durumu raporlar.
CRONJOB NEDİR?
Kubernetes'te CronJob, belirli zaman aralıklarında veya belirli zamanlarda tekrarlanan görevleri otomatik olarak çalıştırmak için kullanılan bir nesnedir. CronJob, Unix tabanlı sistemlerde kullanılan cron işlerine benzer şekilde çalışır ve belirli bir zamanlama formatı kullanarak görevlerin ne zaman çalıştırılacağını tanımlar.
CronJob'in Özellikleri
- Zamanlanmış Görevler: CronJob, belirli zaman aralıklarında veya belirli zamanlarda tekrarlanan görevleri çalıştırır.
- Otomatik Yönetim: CronJob, görevlerin otomatik olarak başlatılmasını ve yönetilmesini sağlar.
- Tekrarlanan Görevler: CronJob, tekrarlanan görevlerin yönetimi için kullanılır.
- Başarı Durumu: CronJob, görevlerin başarı durumunu izler ve raporlar.
CronJob Kullanım Senaryoları
- Veri Yedekleme: Belirli zaman aralıklarında veritabanı yedekleme görevlerini çalıştırmak.
- Raporlama: Belirli zaman aralıklarında raporlama görevlerini çalıştırmak.
- Bakım Görevleri: Belirli zaman aralıklarında bakım görevlerini çalıştırmak.
- Batch İşlemleri: Belirli zaman aralıklarında batch işlemlerini çalıştırmak.
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Hello, Kubernetes! && sleep 30"]
restartPolicy: OnFailure
my-cronjob
adlı CronJob, her gün gece yarısında (0 0 * * *
zamanlama formatı) busybox
görüntüsünü kullanan ve "Hello, Kubernetes!" mesajını yazdıran bir pod çalıştırır. Pod, görev tamamlandığında sonlandırılır ve CronJob başarılı durumu raporlar.
HORIZANTAL POD AUTOSCALER NEDİR?
Kubernetes'te Horizontal Pod Autoscaler (HPA), bir uygulamanın pod sayısını otomatik olarak ölçeklendiren bir nesnedir. HPA, CPU kullanımı, bellek kullanımı veya özel metrikler gibi belirli metriklere dayalı olarak pod'ların sayısını artırır veya azaltır. Bu, uygulamanın performansını ve kaynak kullanımını optimize eder.
Horizontal Pod Autoscaler'in Özellikleri
- Otomatik Ölçeklendirme: HPA, belirli metriklere dayalı olarak pod'ların sayısını otomatik olarak artırır veya azaltır.
- Performans Optimizasyonu: HPA, uygulamanın performansını ve kaynak kullanımını optimize eder.
- Esneklik: HPA, CPU kullanımı, bellek kullanımı veya özel metrikler gibi çeşitli metriklere dayalı olarak çalışabilir.
Horizontal Pod Autoscaler Kullanım Senaryoları
- Yük Dengeleme: Uygulamanın yükünü dengelemek ve performansını artırmak.
- Kaynak Optimizasyonu: Kaynak kullanımını optimize etmek ve maliyetleri azaltmak.
- Otomatik Yönetim: Pod'ların sayısını otomatik olarak yönetmek ve ölçeklendirmek.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50
my-hpa
adlı Horizontal Pod Autoscaler, my-deployment
adlı Deployment'ın pod sayısını CPU kullanımına göre otomatik olarak ölçeklendirir. Pod sayısı, CPU kullanımı %50'yi aştığında artırılır ve %50'nin altına düştüğünde azaltılır. Minimum pod sayısı 1, maksimum pod sayısı ise 10 olarak belirlenmiştir.
VERTICAL POD AUTOSCALER NEDİR?
Kubernetes'te Vertical Pod Autoscaler (VPA), pod'ların CPU ve bellek kaynaklarını otomatik olarak ayarlayan bir nesnedir. VPA, pod'ların kaynak kullanımını izler ve gerektiğinde pod'ların kaynak taleplerini ve sınırlarını dinamik olarak ayarlar. Bu, uygulamanın performansını optimize eder ve kaynak kullanımını dengeler.
Vertical Pod Autoscaler'in Özellikleri
- Otomatik Kaynak Ayarlama: VPA, pod'ların CPU ve bellek kaynaklarını otomatik olarak ayarlar.
- Performans Optimizasyonu: VPA, uygulamanın performansını optimize eder ve kaynak kullanımını dengeler.
- Esneklik: VPA, pod'ların kaynak taleplerini ve sınırlarını dinamik olarak ayarlar.
Vertical Pod Autoscaler Kullanım Senaryoları
- Kaynak Optimizasyonu: Uygulamanın kaynak kullanımını optimize etmek ve maliyetleri azaltmak.
- Performans Yönetimi: Uygulamanın performansını artırmak ve kaynak kullanımını dengelemek.
- Otomatik Yönetim: Pod'ların kaynak taleplerini ve sınırlarını otomatik olarak yönetmek ve ayarlamak.
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-deployment
updatePolicy:
updateMode: "Auto"
my-vpa
adlı Vertical Pod Autoscaler, my-deployment
adlı Deployment'ın pod'larının CPU ve bellek kaynaklarını otomatik olarak ayarlar. updateMode
değeri "Auto" olarak ayarlanmıştır, bu da VPA'nın pod'ların kaynak taleplerini ve sınırlarını otomatik olarak güncelleyeceği anlamına gelir.
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-deployment
updatePolicy:
updateMode: "Auto" # Alternatifler: "Off", "Initial"
Alternatif updateMode
Seçenekleri
- Auto: VPA, pod'ların kaynak isteklerini otomatik olarak günceller.
- Off: VPA, pod'ların kaynak isteklerini güncellemez, sadece önerilerde bulunur.
- Initial: VPA, sadece yeni oluşturulan pod'ların kaynak isteklerini günceller, mevcut pod'ları etkilemez.
Kubernetes'te pod'lar için kaynak limitleri ve istekleri tanımlamak, kaynak kullanımını kontrol etmek ve sınırlamak için önemlidir. Bu, pod'ların CPU ve bellek gibi kaynakları aşırı kullanmasını engeller ve küme içindeki kaynakların adil bir şekilde dağıtılmasını sağlar. Aşağıda, bir pod için kaynak limitleri ve isteklerinin nasıl atanacağını gösteren bir YAML dosyası örneği verilmiştir:
Kaynak Limitleri ve İstekleri Tanımlama
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- requests: Konteynerin başlatılması ve çalışması için gereken minimum kaynak miktarını belirtir.
memory: "64Mi"
: Konteynerin başlatılması için minimum 64 MiB bellek gereklidir.cpu: "250m"
: Konteynerin başlatılması için minimum 250 millicore CPU gereklidir.
- limits: Konteynerin kullanabileceği maksimum kaynak miktarını belirtir.
memory: "128Mi"
: Konteynerin kullanabileceği maksimum bellek miktarı 128 MiB'dir.cpu: "500m"
: Konteynerin kullanabileceği maksimum CPU miktarı 500 millicore'dur.
Bu kaynak limitleri ve istekleri, pod'ların kaynak kullanımını kontrol etmek ve sınırlamak için kullanılır. Bu sayede, küme içindeki kaynakların adil bir şekilde dağıtılması ve aşırı kaynak kullanımının engellenmesi sağlanır. VPA bu limitler içerisinde kaynakları atayabilir.
SERVICES NEDİR?
Kubernetes'te Service, bir grup pod'a ağ üzerinden erişim sağlamak için kullanılan bir nesnedir. Service, pod'ların IP adreslerini ve portlarını soyutlar ve yük dengeleme, keşif ve erişim kontrolü gibi işlevleri sağlar. Service, pod'ların yaşam döngüsünden bağımsız olarak çalışır ve pod'lar yeniden başlatıldığında veya ölçeklendirildiğinde bile tutarlı bir erişim noktası sağlar.
Service'in Özellikleri
- Yük Dengeleme: Service, bir grup pod arasında yük dengeleme sağlar.
- Keşif: Service, pod'ların IP adreslerini ve portlarını soyutlayarak keşif sağlar.
- Erişim Kontrolü: Service, pod'lara ağ üzerinden erişim kontrolü sağlar.
- Tutarlı Erişim Noktası: Service, pod'ların yaşam döngüsünden bağımsız olarak tutarlı bir erişim noktası sağlar.
Service Türleri
- ClusterIP: Service, yalnızca Kubernetes kümesi içindeki pod'lar tarafından erişilebilir.
- NodePort: Service, her node üzerinde belirli bir portu açar ve bu port üzerinden erişim sağlar.
- LoadBalancer: Service, bulut sağlayıcısı tarafından yönetilen bir yük dengeleyici oluşturur ve bu yük dengeleyici üzerinden erişim sağlar.
- ExternalName: Service, DNS adını başka bir adrese yönlendirir.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: ClusterIP
my-service
adlı Service, my-app
etiketine sahip pod'lara 80 numaralı port üzerinden erişim sağlar ve bu pod'ların 9376 numaralı portunu hedefler. Service türü ClusterIP
olarak ayarlanmıştır, bu da yalnızca Kubernetes kümesi içindeki pod'lar tarafından erişilebilir olduğu anlamına gelir.
ClusterIP
ClusterIP: Bu, Kubernetes'teki varsayılan Service türüdür. ClusterIP, yalnızca Kubernetes kümesi içindeki pod'lar tarafından erişilebilir. Bu tür Service, dahili iletişim için kullanılır ve dış dünyadan erişilemez.
Kullanım Senaryoları: Mikro hizmetler arasındaki dahili iletişim, veritabanı hizmetleri gibi dış dünyadan erişim gerektirmeyen hizmetler.
apiVersion: v1 kind: Service metadata: name: my-clusterip-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP
NodePort
NodePort: Bu Service türü, her node üzerinde belirli bir portu açar ve bu port üzerinden erişim sağlar. NodePort, dış dünyadan erişim sağlamak için kullanılır ve her node'un IP adresi ve belirli bir port üzerinden erişilebilir.
Kullanım Senaryoları: Dış dünyadan erişim gerektiren hizmetler, test ve geliştirme ortamları.
apiVersion: v1 kind: Service metadata: name: my-nodeport-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30007 type: NodePort
LoadBalancer
LoadBalancer: Bu Service türü, bulut sağlayıcısı tarafından yönetilen bir yük dengeleyici oluşturur ve bu yük dengeleyici üzerinden erişim sağlar. LoadBalancer, dış dünyadan erişim sağlamak için kullanılır ve otomatik olarak bir yük dengeleyici oluşturur.
Kullanım Senaryoları: Üretim ortamları, yüksek erişilebilirlik gerektiren hizmetler.
apiVersion: v1 kind: Service metadata: name: my-loadbalancer-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
ExternalName
ExternalName: Bu Service türü, DNS adını başka bir adrese yönlendirir. ExternalName, Kubernetes dışındaki bir hizmete erişim sağlamak için kullanılır ve DNS adını başka bir DNS adıyla değiştirir.
Kullanım Senaryoları: Kubernetes dışındaki hizmetlere erişim, üçüncü taraf hizmetler.
apiVersion: v1 kind: Service metadata: name: my-externalname-service spec: type: ExternalName externalName: example.com
Bu Service türleri, Kubernetes'te farklı erişim ve yük dengeleme senaryolarını desteklemek için kullanılır. Her bir tür, belirli kullanım senaryolarına uygun çözümler sunar.
my-app
etiketine sahip ve 3 replika içeren bir ReplicaSet ve bu ReplicaSet'in arkasında çalışan Service örnekleri verilmiştir. Bu örnekler, farklı Service türlerini içermektedir.
ClusterIP Service
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-clusterip-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
NodePort Service
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
type: NodePort
LoadBalancer Service
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
ExternalName Service
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-externalname-service
spec:
type: ExternalName
externalName: example.com
my-app
etiketine sahip pod'ları seçen ve farklı Service türleri ile erişim sağlayan YAML dosyalarını içermektedir. Her bir Service türü, farklı kullanım senaryolarına uygun çözümler sunar.
INGRESS NEDİR?
Kubernetes'te Ingress, dış dünyadan Kubernetes kümesindeki hizmetlere (Services) HTTP ve HTTPS erişimi sağlamak için kullanılan bir nesnedir. Ingress, bir veya daha fazla hizmete gelen trafiği yönlendiren kuralları tanımlar ve yük dengeleme, SSL/TLS sonlandırma ve sanal ana bilgisayar tabanlı yönlendirme gibi işlevleri sağlar.
Ingress'in Özellikleri
- HTTP ve HTTPS Erişimi: Ingress, dış dünyadan Kubernetes kümesindeki hizmetlere HTTP ve HTTPS erişimi sağlar.
- Yük Dengeleme: Ingress, bir veya daha fazla hizmete gelen trafiği yük dengeleyerek yönlendirir.
- SSL/TLS Sonlandırma: Ingress, SSL/TLS sonlandırma işlevi sağlar ve güvenli bağlantılar için sertifikaları yönetir.
- Sanal Ana Bilgisayar Tabanlı Yönlendirme: Ingress, sanal ana bilgisayar adlarına (örneğin,
example.com
) dayalı olarak trafiği yönlendirebilir.
Ingress Kullanım Senaryoları
- Web Uygulamaları: Web uygulamalarına dış dünyadan erişim sağlamak.
- API Hizmetleri: API hizmetlerine dış dünyadan erişim sağlamak.
- Yük Dengeleme: Birden fazla hizmete gelen trafiği yük dengelemek.
- SSL/TLS Yönetimi: Güvenli bağlantılar için SSL/TLS sertifikalarını yönetmek.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
my-ingress
adlı Ingress, example.com
ana bilgisayar adına gelen trafiği my-service
adlı hizmetin 80 numaralı portuna yönlendirir.
TLS (Transport Layer Security) ekleyen bir Ingress örneği verilmiştir. Bu örnek, HTTPS üzerinden güvenli erişim sağlamak için bir TLS sertifikası kullanır.
TLS Ekleyen Ingress Örneği
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- example.com
secretName: my-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Açıklamalar
- annotations:
nginx.ingress.kubernetes.io/rewrite-target
anotasyonu, URL yeniden yazma işlemi için kullanılır. - tls: TLS ayarlarını içerir.
hosts
alanı, TLS sertifikasının geçerli olduğu ana bilgisayar adlarını belirtir.secretName
alanı, TLS sertifikasını içeren Kubernetes Secret nesnesinin adını belirtir. - rules: HTTP kurallarını tanımlar.
host
alanı, Ingress'in geçerli olduğu ana bilgisayar adını belirtir.paths
alanı, belirli bir yol için yönlendirme kurallarını tanımlar.
TLS Sertifikası Oluşturma
TLS sertifikasını içeren bir Kubernetes Secret nesnesi oluşturmak için aşağıdaki komutu kullanabilirsiniz:
kubectl create secret tls my-tls-secret --cert=path/to/tls.crt --key=path/to/tls.key
Bu komut, my-tls-secret
adlı bir TLS Secret nesnesi oluşturur ve belirtilen sertifika ve anahtar dosyalarını kullanır.
Bu örnek, HTTPS üzerinden güvenli erişim sağlamak için TLS sertifikası ekler ve example.com
ana bilgisayar adına gelen trafiği my-service
adlı hizmetin 80 numaralı portuna yönlendirir.
INGRESSCLASSES NEDİR?
Kubernetes'te IngressClass, bir Ingress nesnesinin hangi Ingress denetleyicisi tarafından yönetileceğini belirlemek için kullanılan bir nesnedir. IngressClass, farklı Ingress denetleyicileri arasında ayrım yapmayı ve her bir Ingress nesnesinin belirli bir denetleyici tarafından işlenmesini sağlar. Bu, aynı Kubernetes kümesinde birden fazla Ingress denetleyicisi kullanıldığında özellikle faydalıdır.
IngressClass'in Özellikleri
- Denetleyici Belirleme: IngressClass, bir Ingress nesnesinin hangi Ingress denetleyicisi tarafından yönetileceğini belirler.
- Çoklu Denetleyici Desteği: IngressClass, aynı Kubernetes kümesinde birden fazla Ingress denetleyicisi kullanmayı sağlar.
- Esneklik: IngressClass, farklı Ingress denetleyicileri arasında ayrım yapmayı ve her bir Ingress nesnesinin belirli bir denetleyici tarafından işlenmesini sağlar.
IngressClass Kullanım Senaryoları
- Farklı Denetleyiciler: Aynı Kubernetes kümesinde birden fazla Ingress denetleyicisi kullanmak.
- Özelleştirilmiş Yönlendirme: Belirli Ingress nesnelerinin belirli denetleyiciler tarafından yönetilmesini sağlamak.
- Yük Dengeleme: Farklı Ingress denetleyicileri arasında yük dengeleme sağlamak.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: my-ingress-class
spec:
controller: example.com/ingress-controller
my-ingress-class
adlı IngressClass, example.com/ingress-controller
denetleyicisi tarafından yönetilecektir. Bu IngressClass, belirli Ingress nesnelerinin bu denetleyici tarafından işlenmesini sağlar.
Tabii ki! Aşağıda, birden fazla IngressClass ve bu sınıfları kullanan Ingress nesneleri ile ilgili detaylı örnekler verilmiştir.
IngressClass Tanımları
Öncelikle, iki farklı IngressClass tanımlayalım: biri nginx
kontrolcüsü için, diğeri ise traefik
kontrolcüsü için.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx-ingress-class
spec:
controller: nginx.ingress.kubernetes.io/ingress-controller
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: traefik-ingress-class
spec:
controller: traefik.io/ingress-controller
Ingress Tanımları
Şimdi, bu IngressClass'ları kullanan iki farklı Ingress nesnesi tanımlayalım. Her biri farklı bir IngressClass kullanacak ve farklı hizmetlere yönlendirme yapacak.
NGINX Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-ingress-class
tls:
- hosts:
- nginx.example.com
secretName: nginx-tls-secret
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
Traefik Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traefik-ingress
annotations:
traefik.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: traefik-ingress-class
tls:
- hosts:
- traefik.example.com
secretName: traefik-tls-secret
rules:
- host: traefik.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: traefik-service
port:
number: 80
- IngressClass: Her iki Ingress nesnesi için farklı IngressClass'lar tanımlanmıştır (
nginx-ingress-class
vetraefik-ingress-class
). - Ingress: Her Ingress nesnesi, ilgili IngressClass'ı kullanarak farklı hizmetlere yönlendirme yapar.
- TLS: Her Ingress nesnesi için TLS ayarları eklenmiştir.
nginx-tls-secret
vetraefik-tls-secret
adında TLS Secret nesneleri kullanılmıştır. - Annotations: Her Ingress nesnesi için ilgili kontrolcüye özgü anotasyonlar eklenmiştir (
nginx.ingress.kubernetes.io/rewrite-target
vetraefik.ingress.kubernetes.io/rewrite-target
).
Birden fazla IngressClass ve bu sınıfları kullanan Ingress nesneleri ile ilgili detaylı yapılandırmaları göstermektedir. Her Ingress nesnesi, farklı bir IngressClass kullanarak farklı hizmetlere yönlendirme yapar ve TLS ile güvenli erişim sağlar.
Kubernetes'te Ingress denetleyicisi (Ingress Controller), Ingress kaynaklarını yönetmek ve dış dünyadan gelen HTTP ve HTTPS trafiğini Kubernetes kümesindeki hizmetlere yönlendirmek için kullanılan bir bileşendir. Ingress denetleyicisi, Ingress kaynaklarında tanımlanan kurallara göre trafiği yönlendirir ve yük dengeleme, SSL/TLS sonlandırma ve sanal ana bilgisayar tabanlı yönlendirme gibi işlevleri sağlar.
Popüler Ingress Denetleyicileri
- NGINX Ingress Controller: NGINX tabanlı bir Ingress denetleyicisidir ve geniş bir özellik yelpazesi sunar.
- Traefik Ingress Controller: Traefik tabanlı bir Ingress denetleyicisidir ve dinamik konfigürasyon yetenekleri ile bilinir.
- HAProxy Ingress Controller: HAProxy tabanlı bir Ingress denetleyicisidir ve yüksek performanslı yük dengeleme sağlar.
- Istio Ingress Gateway: Istio servis ağı (service mesh) ile entegre çalışan bir Ingress denetleyicisidir ve gelişmiş trafik yönetimi özellikleri sunar.
Ingress Denetleyicisi Kullanım Senaryoları
- Web Uygulamaları: Web uygulamalarına dış dünyadan erişim sağlamak.
- API Hizmetleri: API hizmetlerine dış dünyadan erişim sağlamak.
- Yük Dengeleme: Birden fazla hizmete gelen trafiği yük dengelemek.
- SSL/TLS Yönetimi: Güvenli bağlantılar için SSL/TLS sertifikalarını yönetmek.
Ingress denetleyicisi, Ingress kaynaklarını yönetmek ve dış dünyadan gelen trafiği Kubernetes kümesindeki hizmetlere yönlendirmek için kritik bir bileşendir. Farklı Ingress denetleyicileri, farklı kullanım senaryolarına uygun çözümler sunar ve Kubernetes kümesinde trafiği yönetmeyi kolaylaştırır.
Network Policies Nedir?
Kubernetes'te Network Policy, pod'lar arasındaki ağ trafiğini kontrol etmek için kullanılan bir nesnedir. Network Policy, belirli pod'lar arasındaki trafiği izin vermek veya engellemek için kurallar tanımlar. Bu, Kubernetes kümesindeki ağ güvenliğini artırır ve pod'lar arasındaki iletişimi daha iyi yönetmeyi sağlar.
Network Policy'nin Özellikleri
- Ağ Güvenliği: Network Policy, pod'lar arasındaki ağ trafiğini kontrol ederek ağ güvenliğini artırır.
- İzin ve Engelleme: Network Policy, belirli pod'lar arasındaki trafiği izin vermek veya engellemek için kurallar tanımlar.
- Esneklik: Network Policy, pod'lar arasındaki iletişimi daha iyi yönetmeyi sağlar.
Network Policy Kullanım Senaryoları
- Güvenlik: Pod'lar arasındaki ağ trafiğini kontrol ederek güvenliği artırmak.
- İzolasyon: Belirli pod'lar arasındaki trafiği izole etmek ve yönetmek.
- Erişim Kontrolü: Belirli pod'lar arasındaki trafiği izin vermek veya engellemek.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress
namespace: default
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: my-app
Bu örnekte, allow-ingress
adlı Network Policy, default
namespace'inde bulunan ve app: my-app
etiketiyle işaretlenmiş pod'lara gelen trafiği izin verir.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress
namespace: default
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 80
allow-egress
adlı Network Policy, default
namespace'inde bulunan ve app: my-app
etiketiyle işaretlenmiş pod'lardan dış dünyaya (0.0.0.0/0) giden TCP trafiğine 80 numaralı port üzerinden izin verir.
ENDPOINTS NEDİR?
Kubernetes'te Endpoints, bir Service nesnesinin arkasındaki pod'ların IP adreslerini ve portlarını tutan bir nesnedir. Endpoints, bir Service'in hangi pod'lara yönlendirilmesi gerektiğini belirler ve bu pod'ların ağ bilgilerini içerir. Bu, Service'in pod'lar arasında yük dengeleme yapmasını ve trafiği doğru pod'lara yönlendirmesini sağlar.
Endpoints'in Özellikleri
- Pod IP Adresleri ve Portları: Endpoints, bir Service'in arkasındaki pod'ların IP adreslerini ve portlarını tutar.
- Yük Dengeleme: Endpoints, bir Service'in pod'lar arasında yük dengeleme yapmasını sağlar.
- Ağ Bilgileri: Endpoints, pod'ların ağ bilgilerini içerir ve trafiği doğru pod'lara yönlendirir.
Endpoints Kullanım Senaryoları
- Service Yönlendirme: Bir Service'in arkasındaki pod'lara trafiği yönlendirmek.
- Yük Dengeleme: Pod'lar arasında yük dengeleme sağlamak.
- Ağ Yönetimi: Pod'ların ağ bilgilerini yönetmek ve trafiği doğru pod'lara yönlendirmek.
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: 192.168.1.1
- ip: 192.168.1.2
ports:
- port: 80
my-service
adlı Endpoints nesnesi, 192.168.1.1
ve 192.168.1.2
IP adreslerine sahip pod'ların 80 numaralı portunu içerir. Bu Endpoints nesnesi, my-service
adlı Service'in bu pod'lara trafiği yönlendirmesini sağlar. Aslında servis arkasında yer alan pod'lar için statik ip
adresi ataması yapılması için endpoint tanımlaması yapılmaktadır. Eğer endpoints tanımı yapılmazsa ip değerleri kubernetes tarafından random (dinamik ip)
atanır.
PERSISTENTVOLUMES NEDİR?
Kubernetes'te PersistentVolume (PV), pod'lar tarafından kullanılabilen kalıcı depolama kaynaklarını temsil eden bir nesnedir. PersistentVolume, depolama sağlayıcılarından bağımsız olarak çalışır ve pod'ların yaşam döngüsünden bağımsız olarak kalıcı veri depolama sağlar. Bu, pod'lar yeniden başlatıldığında veya silindiğinde bile verilerin korunmasını sağlar.
PersistentVolume'in Özellikleri
- Kalıcı Depolama: PV, pod'ların yaşam döngüsünden bağımsız olarak kalıcı veri depolama sağlar.
- Depolama Sağlayıcılarından Bağımsız: PV, farklı depolama sağlayıcıları (örneğin, NFS, iSCSI, AWS EBS, GCE PD) ile çalışabilir.
- Dinamik ve Statik Sağlama: PV, dinamik veya statik olarak sağlanabilir. Dinamik sağlama, depolama kaynaklarının otomatik olarak oluşturulmasını sağlar.
PersistentVolume Kullanım Senaryoları
- Veritabanları: Veritabanı verilerini kalıcı olarak depolamak.
- Dosya Depolama: Uygulama verilerini ve dosyalarını kalıcı olarak depolamak.
- Yedekleme ve Geri Yükleme: Verilerin yedeklenmesi ve geri yüklenmesi için kalıcı depolama sağlamak.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: "/mnt/data"
my-pv
adlı PersistentVolume, 10GiB depolama kapasitesine sahiptir ve /mnt/data
yolunu kullanır. ReadWriteOnce
erişim modu, PV'nin yalnızca bir pod tarafından okunup yazılabileceğini belirtir. Retain
geri kazanım politikası, PV'nin pod tarafından kullanıldıktan sonra korunacağını belirtir.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-storage
volumes:
- name: my-storage
persistentVolume:
persistentVolumeReclaimPolicy: Retain
claimRef:
name: my-pv
Bu tanımda my-pv isimli persistancevolume my-pod isimli pod tarafından kullanılmaktadır.
persistentVolumeReclaimPolicy
için üç ana seçenek vardır:
Retain: Bu politika, PersistentVolume (PV) silindiğinde verilerin korunmasını sağlar. PV, pod tarafından kullanılmadığında bile silinmez ve veriler kalıcı olarak saklanır. Bu, verilerin kaybolmamasını garanti eder.
Delete: Bu politika, PersistentVolumeClaim (PVC) silindiğinde PV'nin de otomatik olarak silinmesini sağlar. Bu, geçici veriler için kullanışlıdır ve kaynakların otomatik olarak temizlenmesini sağlar.
Recycle: Bu politika, PVC silindiğinde PV'nin temizlenmesini ve yeniden kullanılabilir hale getirilmesini sağlar. Ancak, bu seçenek artık önerilmemektedir ve çoğu Kubernetes dağıtımında desteklenmemektedir.
Retain
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data
Delete
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
hostPath:
path: /mnt/data
Recycle
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /mnt/data
Bu seçenekler, PV'nin yaşam döngüsünü ve verilerin nasıl yönetileceğini belirler. İhtiyacınıza göre uygun olanı seçebilirsiniz.
PERSISTENTVOLUMECLAIMS NEDİR?
Kubernetes'te PersistentVolumeClaim (PVC), bir pod'un belirli bir PersistentVolume (PV) talep etmesini sağlayan bir nesnedir. PVC, pod'ların kalıcı depolama kaynaklarını dinamik olarak talep etmelerini ve kullanmalarını sağlar. PVC, belirli bir depolama kapasitesi ve erişim modu talep eder ve Kubernetes, bu talepleri karşılayan uygun bir PV'yi bağlar.
PersistentVolumeClaim'in Özellikleri
- Dinamik Talep: PVC, pod'ların kalıcı depolama kaynaklarını dinamik olarak talep etmelerini sağlar.
- Depolama Kapasitesi: PVC, belirli bir depolama kapasitesi talep eder.
- Erişim Modu: PVC, belirli bir erişim modu talep eder (örneğin, ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
- Bağlama: Kubernetes, PVC taleplerini karşılayan uygun bir PV'yi bağlar.
PersistentVolumeClaim Kullanım Senaryoları
- Veritabanları: Veritabanı verilerini kalıcı olarak depolamak.
- Dosya Depolama: Uygulama verilerini ve dosyalarını kalıcı olarak depolamak.
- Yedekleme ve Geri Yükleme: Verilerin yedeklenmesi ve geri yüklenmesi için kalıcı depolama sağlamak.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
YAML dosyası, ana işletim sistemindeki /mnt/data
klasörünü PersistentVolume (PV) olarak kullanacak ve 10 GB depolama kapasitesi ile sınırlayacaktır. Bu PV, ReadWriteOnce
erişim modunu kullanır ve Retain
geri kazanım politikasına sahiptir. Bu sayede, PV silindiğinde veriler korunur.
ConfigMaps Nedir?
Kubernetes'te ConfigMap, yapılandırma verilerini pod'lara enjekte etmek için kullanılan bir nesnedir. ConfigMap, yapılandırma dosyalarını, komut satırı argümanlarını, ortam değişkenlerini ve diğer yapılandırma verilerini pod'lara sağlamak için kullanılır. Bu, uygulamaların yapılandırmalarını koddan ayırarak daha esnek ve yönetilebilir hale getirir.
ConfigMap'in Özellikleri
- Yapılandırma Verileri: ConfigMap, yapılandırma dosyalarını, komut satırı argümanlarını, ortam değişkenlerini ve diğer yapılandırma verilerini içerir.
- Esneklik: ConfigMap, uygulamaların yapılandırmalarını koddan ayırarak daha esnek ve yönetilebilir hale getirir.
- Dinamik Güncellemeler: ConfigMap, yapılandırma verilerinin dinamik olarak güncellenmesini sağlar.
ConfigMap Kullanım Senaryoları
- Yapılandırma Dosyaları: Uygulama yapılandırma dosyalarını pod'lara enjekte etmek.
- Ortam Değişkenleri: Pod'lara ortam değişkenleri sağlamak.
- Komut Satırı Argümanları: Pod'lara komut satırı argümanları sağlamak.
- Yapılandırma Yönetimi: Uygulama yapılandırmalarını merkezi olarak yönetmek.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.json: |
{
"key": "value"
}
Bu örnekte, my-config
adlı ConfigMap, config.json
adlı bir yapılandırma dosyasını içerir. Bu yapılandırma dosyası, pod'lara enjekte edilebilir ve uygulama tarafından kullanılabilir.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
envFrom:
- configMapRef:
name: my-config
my-pod
adlı pod, my-config
adlı ConfigMap'ten ortam değişkenlerini alır ve bu yapılandırma verilerini kullanır.
Namespaces Nedir?
Kubernetes'te Namespace, bir Kubernetes kümesindeki kaynakları mantıksal olarak ayırmak ve organize etmek için kullanılan bir nesnedir. Namespace'ler, farklı projeler, ekipler veya ortamlar için kaynakları izole etmek ve yönetmek amacıyla kullanılır. Bu, kaynakların daha iyi yönetilmesini ve erişim kontrolünü sağlar.
Namespace'in Özellikleri
- Mantıksal Ayrım: Namespace'ler, bir Kubernetes kümesindeki kaynakları mantıksal olarak ayırır ve organize eder.
- İzolasyon: Namespace'ler, farklı projeler, ekipler veya ortamlar için kaynakları izole eder.
- Erişim Kontrolü: Namespace'ler, kaynaklara erişim kontrolü sağlar ve yetkilendirme politikalarını uygulamayı kolaylaştırır.
- Kaynak Yönetimi: Namespace'ler, kaynakların daha iyi yönetilmesini sağlar ve kaynak kotalarını uygulamayı kolaylaştırır.
Namespace Kullanım Senaryoları
- Farklı Projeler: Farklı projeler için kaynakları izole etmek ve yönetmek.
- Ekipler: Farklı ekipler için kaynakları izole etmek ve yönetmek.
- Ortamlar: Geliştirme, test ve üretim ortamları için kaynakları izole etmek ve yönetmek.
- Kaynak Kotaları: Belirli bir Namespace içindeki kaynak kullanımını sınırlamak ve yönetmek.
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
my-namespace
adlı bir Namespace oluşturulmuştur. Bu Namespace, kaynakları izole etmek ve yönetmek için kullanılabilir.
ResourceQuotas Nedir?
Kubernetes'te ResourceQuota, bir Namespace içindeki kaynak kullanımını sınırlamak ve yönetmek için kullanılan bir nesnedir. ResourceQuota, belirli bir Namespace içindeki pod'lar, hizmetler, depolama ve diğer kaynaklar için belirli sınırlar belirler. Bu, kaynakların adil bir şekilde dağıtılmasını sağlar ve aşırı kaynak kullanımını önler.
ResourceQuota'nın Özellikleri
- Kaynak Sınırlama: ResourceQuota, belirli bir Namespace içindeki kaynak kullanımını sınırlar.
- Adil Dağıtım: ResourceQuota, kaynakların adil bir şekilde dağıtılmasını sağlar.
- Aşırı Kullanımı Önleme: ResourceQuota, aşırı kaynak kullanımını önler ve kaynakların verimli bir şekilde kullanılmasını sağlar.
- Kaynak Yönetimi: ResourceQuota, kaynakların daha iyi yönetilmesini sağlar ve kaynak kotalarını uygulamayı kolaylaştırır.
ResourceQuota Kullanım Senaryoları
- Ekipler: Farklı ekipler için kaynak kullanımını sınırlamak ve yönetmek.
- Projeler: Farklı projeler için kaynak kullanımını sınırlamak ve yönetmek.
- Ortamlar: Geliştirme, test ve üretim ortamları için kaynak kullanımını sınırlamak ve yönetmek.
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: my-namespace
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
my-quota
adlı ResourceQuota, my-namespace
adlı Namespace içindeki pod'lar, CPU ve bellek kullanımı için belirli sınırlar belirler. Bu sınırlar, Namespace içindeki kaynak kullanımını sınırlamak ve yönetmek için kullanılır.
LimitRanges Nedir?
Kubernetes'te LimitRange, bir Namespace içindeki pod'lar ve konteynerler için kaynak kullanım sınırlarını belirlemek amacıyla kullanılan bir nesnedir. LimitRange, CPU, bellek ve diğer kaynaklar için minimum ve maksimum sınırları tanımlar. Bu, kaynakların adil bir şekilde dağıtılmasını sağlar ve aşırı kaynak kullanımını önler.
LimitRange'in Özellikleri
- Kaynak Sınırlama: LimitRange, pod'lar ve konteynerler için kaynak kullanım sınırlarını belirler.
- Adil Dağıtım: LimitRange, kaynakların adil bir şekilde dağıtılmasını sağlar.
- Aşırı Kullanımı Önleme: LimitRange, aşırı kaynak kullanımını önler ve kaynakların verimli bir şekilde kullanılmasını sağlar.
- Kaynak Yönetimi: LimitRange, kaynakların daha iyi yönetilmesini sağlar ve kaynak kotalarını uygulamayı kolaylaştırır.
LimitRange Kullanım Senaryoları
- Ekipler: Farklı ekipler için kaynak kullanımını sınırlamak ve yönetmek.
- Projeler: Farklı projeler için kaynak kullanımını sınırlamak ve yönetmek.
- Ortamlar: Geliştirme, test ve üretim ortamları için kaynak kullanımını sınırlamak ve yönetmek.
apiVersion: v1
kind: LimitRange
metadata:
name: my-limitrange
namespace: my-namespace
spec:
limits:
- max:
cpu: "2"
memory: "1Gi"
min:
cpu: "200m"
memory: "6Mi"
type: Container
my-limitrange
adlı LimitRange, my-namespace
adlı Namespace içindeki konteynerler için CPU ve bellek kullanım sınırlarını belirler. Konteynerler için maksimum CPU kullanımı 2, maksimum bellek kullanımı 1GiB olarak ayarlanmıştır. Minimum CPU kullanımı 200m, minimum bellek kullanımı ise 6MiB olarak belirlenmiştir.
Pod Disruption Budgets (PDB)
Kubernetes'te Pod Disruption Budget (PDB), bir uygulamanın belirli bir sayıda pod'un her zaman çalışır durumda olmasını sağlamak için kullanılan bir nesnedir. PDB, planlı veya plansız kesintiler sırasında belirli bir sayıda pod'un çalışır durumda kalmasını garanti eder. Bu, uygulamanın yüksek kullanılabilirliğini ve kararlılığını sağlar.
Pod Disruption Budget'in Özellikleri
- Kesinti Yönetimi: PDB, planlı veya plansız kesintiler sırasında belirli bir sayıda pod'un çalışır durumda kalmasını sağlar.
- Yüksek Kullanılabilirlik: PDB, uygulamanın yüksek kullanılabilirliğini ve kararlılığını sağlar.
- Esneklik: PDB, uygulamanın kesintilere karşı dayanıklılığını artırır.
Pod Disruption Budget Kullanım Senaryoları
- Planlı Bakım: Planlı bakım sırasında belirli bir sayıda pod'un çalışır durumda kalmasını sağlamak.
- Otomatik Ölçeklendirme: Otomatik ölçeklendirme sırasında belirli bir sayıda pod'un çalışır durumda kalmasını sağlamak.
- Kesinti Yönetimi: Planlı veya plansız kesintiler sırasında uygulamanın yüksek kullanılabilirliğini sağlamak.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
namespace: my-namespace
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app
my-pdb
adlı Pod Disruption Budget, my-namespace
adlı Namespace içindeki app: my-app
etiketiyle işaretlenmiş pod'ların en az 2 tanesinin her zaman çalışır durumda olmasını sağlar.
Pod Priority and Preemption Nedir?
Kubernetes'te Pod Priority and Preemption, pod'ların öncelik sırasına göre planlanmasını ve düşük öncelikli pod'ların yerini alarak yüksek öncelikli pod'ların çalışmasını sağlamak için kullanılan bir mekanizmadır. Bu, kaynakların daha verimli kullanılmasını ve kritik uygulamaların her zaman çalışır durumda olmasını sağlar.
Pod Priority (Pod Önceliği)
Pod Priority, pod'ların öncelik sırasını belirlemek için kullanılan bir özelliktir. Her pod, bir öncelik değeri (priority) ile tanımlanır ve bu değer, pod'un ne kadar önemli olduğunu belirtir. Yüksek öncelikli pod'lar, düşük öncelikli pod'lara göre daha önce planlanır ve çalıştırılır.
Preemption (Öncelik Verme)
Preemption, yüksek öncelikli pod'ların çalışabilmesi için düşük öncelikli pod'ların yerini almasını sağlayan bir mekanizmadır. Eğer bir kümede yeterli kaynak yoksa, yüksek öncelikli bir pod çalıştırılmak istendiğinde, düşük öncelikli pod'lar sonlandırılarak kaynaklar serbest bırakılır ve yüksek öncelikli pod çalıştırılır.
Pod Priority and Preemption Kullanım Senaryoları
- Kritik Uygulamalar: Kritik uygulamaların her zaman çalışır durumda olmasını sağlamak.
- Kaynak Yönetimi: Kaynakların daha verimli kullanılmasını sağlamak.
- Öncelik Sıralaması: Farklı önceliklere sahip uygulamaların doğru sırayla çalıştırılmasını sağlamak.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000
globalDefault: false
description: "This priority class is for high priority pods."
high-priority
adlı bir PriorityClass tanımlanmıştır ve bu sınıfa ait pod'lar 1000 öncelik değeri ile tanımlanır. Bu pod'lar, düşük öncelikli pod'lara göre daha önce planlanır ve çalıştırılır.
Secrets Nedir?
Kubernetes'te Secret, hassas verileri (örneğin, şifreler, OAuth token'ları, SSH anahtarları) güvenli bir şekilde saklamak ve pod'lara enjekte etmek için kullanılan bir nesnedir. Secrets, yapılandırma verilerini şifreleyerek ve yetkilendirme politikaları uygulayarak güvenli bir şekilde yönetir.
Secret'in Özellikleri
- Güvenli Saklama: Secrets, hassas verileri şifreleyerek güvenli bir şekilde saklar.
- Yetkilendirme: Secrets, yetkilendirme politikaları uygulayarak hassas verilere erişimi kontrol eder.
- Enjeksiyon: Secrets, hassas verileri pod'lara ortam değişkenleri veya dosyalar olarak enjekte eder.
- Dinamik Güncellemeler: Secrets, hassas verilerin dinamik olarak güncellenmesini sağlar.
Secret Kullanım Senaryoları
- Şifreler: Uygulama şifrelerini güvenli bir şekilde saklamak ve pod'lara enjekte etmek.
- OAuth Token'ları: OAuth token'larını güvenli bir şekilde saklamak ve pod'lara enjekte etmek.
- SSH Anahtarları: SSH anahtarlarını güvenli bir şekilde saklamak ve pod'lara enjekte etmek.
- API Anahtarları: API anahtarlarını güvenli bir şekilde saklamak ve pod'lara enjekte etmek.
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
Bu örnekte, my-secret
adlı Secret, username
ve password
adlı iki hassas veriyi içerir. Bu veriler, Base64 ile şifrelenmiştir.
Secret Kullanımı
Secret'i bir pod'a enjekte etmek için aşağıdaki gibi bir pod tanımı kullanabilirsiniz:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
my-pod
adlı pod, my-secret
adlı Secret'ten username
ve password
değerlerini ortam değişkenleri olarak alır ve bu hassas verileri kullanır.
ServiceAccounts (sa) Nedir?
Kubernetes'te ServiceAccount (SA), pod'ların Kubernetes API'sine erişim sağlamak için kullanılan bir nesnedir. ServiceAccount, pod'ların kimlik doğrulama ve yetkilendirme işlemlerini gerçekleştirmesine olanak tanır ve belirli izinlerle donatılmış bir kimlik sağlar. Bu, pod'ların Kubernetes kaynaklarına erişimini ve yönetimini güvenli bir şekilde yapmasını sağlar.
ServiceAccount'in Özellikleri
- Kimlik Doğrulama: ServiceAccount, pod'ların Kubernetes API'sine erişim sağlamak için kimlik doğrulama işlemlerini gerçekleştirir.
- Yetkilendirme: ServiceAccount, pod'ların belirli izinlerle donatılmış bir kimlik kullanarak Kubernetes kaynaklarına erişimini sağlar.
- Güvenlik: ServiceAccount, pod'ların güvenli bir şekilde Kubernetes kaynaklarına erişimini ve yönetimini sağlar.
- Esneklik: ServiceAccount, farklı pod'lar için farklı izinler ve kimlikler tanımlamayı sağlar.
ServiceAccount Kullanım Senaryoları
- API Erişimi: Pod'ların Kubernetes API'sine erişimini sağlamak.
- Kaynak Yönetimi: Pod'ların Kubernetes kaynaklarını güvenli bir şekilde yönetmesini sağlamak.
- Yetkilendirme: Pod'ların belirli izinlerle donatılmış bir kimlik kullanarak Kubernetes kaynaklarına erişimini sağlamak.
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
namespace: my-namespace
Bu örnekte, my-serviceaccount
adlı ServiceAccount, my-namespace
adlı Namespace içinde oluşturulmuştur. Bu ServiceAccount, pod'ların Kubernetes API'sine erişimini ve kaynakları yönetmesini sağlar.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
serviceAccountName: my-serviceaccount
containers:
- name: my-container
image: nginx
my-pod
adlı pod, my-serviceaccount
adlı ServiceAccount'i kullanarak Kubernetes API'sine erişim sağlar ve kaynakları yönetir.
Roles Nedir?
Kubernetes'te Role, belirli bir Namespace içindeki kaynaklara erişim izinlerini tanımlayan bir nesnedir. Role, kullanıcıların, grupların veya ServiceAccount'ların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirler. Bu, Kubernetes kümesindeki kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmeyi sağlar.
Role'in Özellikleri
- Namespace Bazlı: Role, belirli bir Namespace içindeki kaynaklara erişim izinlerini tanımlar.
- İzin Yönetimi: Role, kullanıcıların, grupların veya ServiceAccount'ların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirler.
- Güvenlik: Role, kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmeyi sağlar.
- Esneklik: Role, farklı kullanıcılar, gruplar veya ServiceAccount'lar için farklı izinler tanımlamayı sağlar.
Role Kullanım Senaryoları
- Kullanıcı İzinleri: Kullanıcıların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Grup İzinleri: Grupların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- ServiceAccount İzinleri: ServiceAccount'ların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Kaynak Yönetimi: Kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmek.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: my-namespace
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
my-role
adlı Role, my-namespace
adlı Namespace içinde pods
kaynaklarına get
, list
ve watch
işlemlerini gerçekleştirme izni verir.
RoleBindings Nedir?
Kubernetes'te RoleBinding, belirli bir Namespace içindeki kullanıcıların, grupların veya ServiceAccount'ların belirli bir Role tarafından tanımlanan izinlere sahip olmasını sağlamak için kullanılan bir nesnedir. RoleBinding, bir Role'u belirli bir kullanıcı, grup veya ServiceAccount ile ilişkilendirir ve bu ilişki sayesinde bu kullanıcılar, gruplar veya ServiceAccount'lar belirli kaynaklar üzerinde belirli işlemleri gerçekleştirebilir.
RoleBinding'in Özellikleri
- İzin Atama: RoleBinding, belirli bir Role'u belirli bir kullanıcı, grup veya ServiceAccount ile ilişkilendirir.
- Namespace Bazlı: RoleBinding, belirli bir Namespace içindeki kaynaklara erişim izinlerini tanımlar.
- Güvenlik: RoleBinding, kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmeyi sağlar.
- Esneklik: RoleBinding, farklı kullanıcılar, gruplar veya ServiceAccount'lar için farklı izinler tanımlamayı sağlar.
RoleBinding Kullanım Senaryoları
- Kullanıcı İzinleri: Kullanıcıların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Grup İzinleri: Grupların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- ServiceAccount İzinleri: ServiceAccount'ların belirli kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Kaynak Yönetimi: Kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmek.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-rolebinding
namespace: my-namespace
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: my-role
apiGroup: rbac.authorization.k8s.io
my-rolebinding
adlı RoleBinding, my-namespace
adlı Namespace içinde jane
adlı kullanıcıya my-role
adlı Role tarafından tanımlanan izinleri atar.
ClusterRoles Nedir?
Kubernetes'te ClusterRole, küme genelinde kaynaklara erişim izinlerini tanımlayan bir nesnedir. ClusterRole, belirli bir Namespace ile sınırlı olmayan ve tüm küme genelinde geçerli olan izinleri tanımlar. Bu, kullanıcıların, grupların veya ServiceAccount'ların küme genelindeki kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirler.
ClusterRole'in Özellikleri
- Küme Genelinde İzinler: ClusterRole, küme genelinde kaynaklara erişim izinlerini tanımlar.
- İzin Yönetimi: ClusterRole, kullanıcıların, grupların veya ServiceAccount'ların küme genelindeki kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirler.
- Güvenlik: ClusterRole, kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmeyi sağlar.
- Esneklik: ClusterRole, farklı kullanıcılar, gruplar veya ServiceAccount'lar için farklı izinler tanımlamayı sağlar.
ClusterRole Kullanım Senaryoları
- Küme Yönetimi: Küme genelindeki kaynaklara erişim izinlerini yönetmek.
- Küme İzinleri: Kullanıcıların, grupların veya ServiceAccount'ların küme genelindeki kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Güvenlik Yönetimi: Kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmek.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: my-clusterrole
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
my-clusterrole
adlı ClusterRole, küme genelinde pods
kaynaklarına get
, list
ve watch
işlemlerini gerçekleştirme izni verir.
ClusterRoleBindings Nedir?
Kubernetes'te ClusterRoleBinding, küme genelinde kullanıcıların, grupların veya ServiceAccount'ların belirli bir ClusterRole tarafından tanımlanan izinlere sahip olmasını sağlamak için kullanılan bir nesnedir. ClusterRoleBinding, bir ClusterRole'u belirli bir kullanıcı, grup veya ServiceAccount ile ilişkilendirir ve bu ilişki sayesinde bu kullanıcılar, gruplar veya ServiceAccount'lar küme genelindeki kaynaklar üzerinde belirli işlemleri gerçekleştirebilir.
ClusterRoleBinding'in Özellikleri
- İzin Atama: ClusterRoleBinding, belirli bir ClusterRole'u belirli bir kullanıcı, grup veya ServiceAccount ile ilişkilendirir.
- Küme Genelinde İzinler: ClusterRoleBinding, küme genelinde kaynaklara erişim izinlerini tanımlar.
- Güvenlik: ClusterRoleBinding, kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmeyi sağlar.
- Esneklik: ClusterRoleBinding, farklı kullanıcılar, gruplar veya ServiceAccount'lar için farklı izinler tanımlamayı sağlar.
ClusterRoleBinding Kullanım Senaryoları
- Küme Yönetimi: Küme genelindeki kaynaklara erişim izinlerini yönetmek.
- Küme İzinleri: Kullanıcıların, grupların veya ServiceAccount'ların küme genelindeki kaynaklar üzerinde hangi işlemleri gerçekleştirebileceğini belirlemek.
- Güvenlik Yönetimi: Kaynaklara erişimi ve yetkilendirmeyi daha iyi yönetmek.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-clusterrolebinding
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: my-clusterrole
apiGroup: rbac.authorization.k8s.io
my-clusterrolebinding
adlı ClusterRoleBinding, jane
adlı kullanıcıya my-clusterrole
adlı ClusterRole tarafından tanımlanan izinleri atar.
Labels and Selectors Nedir?
Kubernetes'te Labels ve Selectors, nesneleri tanımlamak ve gruplamak için kullanılan mekanizmalardır. Labels, nesnelere eklenen anahtar-değer çiftleridir ve Selectors, belirli etiketlere sahip nesneleri seçmek için kullanılır. Bu, Kubernetes nesnelerini organize etmeyi ve yönetmeyi kolaylaştırır.
Labels (Etiketler)
Labels, Kubernetes nesnelerine eklenen anahtar-değer çiftleridir. Etiketler, nesneleri tanımlamak, gruplamak ve organize etmek için kullanılır. Etiketler, nesnelerin metadata bölümünde tanımlanır ve herhangi bir nesneye eklenebilir.
Labels'in Özellikleri
- Anahtar-Değer Çiftleri: Labels, anahtar-değer çiftleri olarak tanımlanır.
- Esneklik: Labels, nesneleri tanımlamak, gruplamak ve organize etmek için esnek bir yol sağlar.
- Arama ve Filtreleme: Labels, nesneleri aramak ve filtrelemek için kullanılabilir.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
environment: production
spec:
containers:
- name: my-container
image: nginx
Bu örnekte, my-pod
adlı pod'a app: my-app
ve environment: production
etiketleri eklenmiştir.
Selectors (Seçiciler)
Selectors, belirli etiketlere sahip nesneleri seçmek için kullanılan mekanizmalardır. Selectors, etiketlere dayalı olarak nesneleri seçer ve bu nesneler üzerinde işlemler gerçekleştirir. Selectors, genellikle Service, Deployment ve diğer nesnelerde kullanılır.
Selectors'in Özellikleri
- Etiket Tabanlı Seçim: Selectors, belirli etiketlere sahip nesneleri seçer.
- Esneklik: Selectors, etiketlere dayalı olarak nesneleri seçmek için esnek bir yol sağlar.
- Arama ve Filtreleme: Selectors, nesneleri aramak ve filtrelemek için kullanılabilir.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
my-service
adlı Service, app: my-app
etiketine sahip pod'ları seçer ve bu pod'lara 80 numaralı port üzerinden erişim sağlar.
Annotations Nedir?
Kubernetes'te Annotations, nesnelere ek bilgi eklemek için kullanılan anahtar-değer çiftleridir. Annotations, etiketlerden farklı olarak, nesneleri tanımlamak veya gruplamak için değil, nesneler hakkında ek bilgi sağlamak için kullanılır. Annotations, yapılandırma verileri, meta veriler veya diğer açıklayıcı bilgileri saklamak için kullanılabilir.
Annotations'in Özellikleri
- Anahtar-Değer Çiftleri: Annotations, anahtar-değer çiftleri olarak tanımlanır.
- Ek Bilgi: Annotations, nesneler hakkında ek bilgi sağlamak için kullanılır.
- Esneklik: Annotations, yapılandırma verileri, meta veriler veya diğer açıklayıcı bilgileri saklamak için esnek bir yol sağlar.
- Arama ve Filtreleme: Annotations, nesneleri aramak ve filtrelemek için kullanılabilir.
Annotations Kullanım Senaryoları
- Yapılandırma Verileri: Nesneler hakkında yapılandırma verilerini saklamak.
- Meta Veriler: Nesneler hakkında meta verileri saklamak.
- Açıklayıcı Bilgiler: Nesneler hakkında açıklayıcı bilgileri saklamak.
- Dokümantasyon: Nesneler hakkında dokümantasyon bilgilerini saklamak.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
annotations:
description: "Bu pod, örnek bir uygulama çalıştırır."
version: "1.0"
spec:
containers:
- name: my-container
image: nginx
my-pod
adlı pod'a description
ve version
adlı iki anotasyon eklenmiştir. Bu anotasyonlar, pod hakkında ek bilgi sağlar.
Finalizers Nedir?
Kubernetes'te Finalizers, bir nesnenin silinmeden önce belirli işlemlerin tamamlanmasını sağlamak için kullanılan bir mekanizmadır. Finalizers, bir nesnenin silinme sürecini kontrol eder ve belirli koşullar yerine getirilene kadar nesnenin silinmesini engeller. Bu, kaynakların düzgün bir şekilde temizlenmesini ve silme işlemlerinin güvenli bir şekilde gerçekleştirilmesini sağlar.
Finalizers'in Özellikleri
- Silme Kontrolü: Finalizers, bir nesnenin silinme sürecini kontrol eder.
- Koşullu Silme: Finalizers, belirli koşullar yerine getirilene kadar nesnenin silinmesini engeller.
- Kaynak Temizleme: Finalizers, kaynakların düzgün bir şekilde temizlenmesini sağlar.
- Güvenli Silme: Finalizers, silme işlemlerinin güvenli bir şekilde gerçekleştirilmesini sağlar.
Finalizers Kullanım Senaryoları
- Kaynak Temizleme: Bir nesne silinmeden önce ilgili kaynakların temizlenmesini sağlamak.
- Koşullu Silme: Belirli koşullar yerine getirilene kadar nesnenin silinmesini engellemek.
- Güvenli Silme: Silme işlemlerinin güvenli bir şekilde gerçekleştirilmesini sağlamak.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
finalizers:
- kubernetes.io/pvc-protection
spec:
containers:
- name: my-container
image: nginx
my-pod
adlı pod'a kubernetes.io/pvc-protection
adlı bir finalizer eklenmiştir. Bu finalizer, pod silinmeden önce ilgili PersistentVolumeClaim (PVC) kaynaklarının korunmasını sağlar.