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:

  1. 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.
  2. 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.
  3. 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

  1. Auto: VPA, pod'ların kaynak isteklerini otomatik olarak günceller.
  2. Off: VPA, pod'ların kaynak isteklerini güncellemez, sadece önerilerde bulunur.
  3. 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 ve traefik-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 ve traefik-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 ve traefik.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

  1. NGINX Ingress Controller: NGINX tabanlı bir Ingress denetleyicisidir ve geniş bir özellik yelpazesi sunar.
  2. Traefik Ingress Controller: Traefik tabanlı bir Ingress denetleyicisidir ve dinamik konfigürasyon yetenekleri ile bilinir.
  3. HAProxy Ingress Controller: HAProxy tabanlı bir Ingress denetleyicisidir ve yüksek performanslı yük dengeleme sağlar.
  4. 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:

  1. 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.

  2. 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.

  3. 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.

TÜM MAKALELER
Kubernetes Nesneleri ve Görevleri,, Eğitimler, Kurumsal Eğitimler, Kurumsal Kubernetes Eğitimi, Grup Kubernetes Eğitimi, Şirketler İçin Kubernetes Eğitimi, Şirket İçi Kubernetes Eğitimi, KOBİ için Kubernetes Eğitimi, Sektöre Özel Kubernetes Eğitimi, Online Kubernetes Bootcamp, Kubernetes Sertifikasyon Hazırlık Eğitimi, Kubernetes Destek Hizmetleri, Kurumsal Kubernetes Çözümleri, Uzaktan Kubernetes Destek Hizmetleri, Kubernetes Uygulamalı Workshop ve Sertifika Programları, Uygulamalı Kubernetes Eğitim Programları, Başlangıç Seviyesinden Uzmanlığa Kubernetes Eğitim Paketleri, Kubernetes Eğitimi, Kubernetes Desteği, Kubernetes, Docker, RedHat, DevSecOps, Yapay Zeka, Siber Güvenlik, Proje Yönetimi, Hands-On Eğitimler, NLP Eğitimleri, Kubernetes Mimarisi, Multi Cluster Yönetimi, Microservisler, IT Danışmanlık, Altyapı Optimizasyonu, DevOps Çözümleri, Kubernetes Hands-On Eğitimleri, Kubernetes Cluster Yönetimi, Kubernetes Sertifikasyonu, Docker, Docker Kurulum, Docker Eğitim, Docker Destek, Docker Partnerlik, Container Teknolojileri, Docker Kubernetes, Container Orchestration, Docker Scaling, Kubernetes Entegrasyonu, Docker Pipeline, Mikroservis Mimarileri, CI/CD Çözümleri, DevOps ve DevSecOps Süreçleri, Kubernetes Modern Altyapılar, Kubernetes OpenShift, Cloud Native Çözümler, Multi Cluster Docker, Kubernetes Monitoring, Kubernetes Migration, DevOps Altyapısı, Kubernetes Güvenlik Çözümleri, Kubernetes ile Otomasyon, Yapay Zeka Çözümleri, Makine Öğrenimi, Derin Öğrenme, AI Model Eğitimi, AI Optimizasyonu, AI Proje Yönetimi, Yapay Zeka Danışmanlığı, AI Kurulum Destek, Siber Güvenlik, Veri Güvenliği, KVKK Uyumluluğu, GDPR Uyumluluğu, Red Hat Siber Güvenlik Çözümleri, AI Proaktif Hizmetler, Siber Güvenlik Eğitimi, Agile Metodolojisi, Proje Yönetimi Danışmanlığı, Çevik Proje Yönetimi, Mikroservisler, Yazılım Geliştirme, API Yönetimi, Kubernetes API Gateway, Kod İnceleme, Yazılım Testi, Versiyon Kontrolü, CICD, Mobil Uygulama Geliştirme, Spring Boot, Cloud Native Uygulamalar, Sanallaştırma, Virtualization, VMware, HyperV, Bulut Bilişim, Private Cloud, Public Cloud, Multi Cluster Yönetimi, IT Altyapı Modernizasyonu, Performans İzleme, Yük Dengeleme Çözümleri, Kubernetes ve Bulut Entegrasyonu, DevOps, DevSecOps, CI/CD, Ansible ile Otomasyon, Red Hat Linux, Red Hat OpenShift, Red Hat Eğitimleri, Red Hat Sertifikasyon Programları, Red Hat Enterprise Linux, Red Hat Altyapı Çözümleri. #KurumsalEğitimler #HandsOnEğitimler #KubernetesEğitimi #DockerEğitimi #RedHatEğitimi #DevOpsEğitimi #DevSecOpsEğitimi #YapayZekaEğitimi #SiberGüvenlikEğitimi #ProjeYönetimiEğitimi #NLP #KubernetesCluster #KubernetesYönetimi #KubernetesMimarisi #KubernetesÇözümleri #KubernetesHandsOn #KubernetesDevSecOps #KubernetesDestek #KubernetesKurulumu #KubernetesOptimize #KubernetesMultiCluster #KubernetesOpenShift #KubernetesRedHat #KubernetesModernAltyapı #DockerKurulum #DockerScaling #DockerMigration #DockerContainer #DockerMonitoring #ContainerOrchestration #MultiClusterDocker #DockerDevOps #DockerSecurity#AIPlatformları #MakineÖğrenimiEğitimi #AIModelGeliştirme #DerinÖğrenme #AIUygulamaları #AIProjeDanışmanlığı #AIEğitimleri #AIOptimizasyonu #AIEntegrasyonu #AIHandsOn #ContinuousIntegration #ContinuousDeployment #CI_CD #Mikroservisler #VersiyonKontrolü #ServiceMesh #CloudNative #ProaktifHizmetler #DevSecOpsBlueprint #DevSecOpsAutomation #VeriGüvenliği #GDPRUyumluluk #KVKKUyumluÇözümler #EthicalHacking #SiberGüvenlikDanışmanlığı #CloudSecurity #ITDanışmanlık #AltyapıOptimizasyonu #CloudComputing #KurumsalPartnerlik #UzaktanDestek #SanallaştırmaEğitimleri #KurumsalITÇözümleri #HibritAltyapılar #YedeklemeÇözümleri #DisasterRecovery