2025-12-14Hünkar Döner

Kustomize ile Kubernetes Manifest Yönetimi

KubernetesKustomizeDevOpsIaCEKS
K

Kustomize ile Kubernetes Manifest Yönetimi

Kubernetes dünyasında kaynakları yönetmenin birçok yolu vardır. Helm gibi şablon tabanlı araçların aksine, Kustomize, Kubernetes manifest dosyalarını (YAML) yönetmek için şablonsuz, bildirimsel (declarative) bir yaklaşım sunar. "Base" (temel) manifestlerinizi değiştirmeden korurken, "Overlay" (katman) mantığıyla değişiklikler yapmanıza, yamalar (patch) uygulamanıza ve bu değişiklikleri farklı ortamlara (Dev, Test, Prod) kolayca yaymanıza olanak tanır.

Temel Bir Örnek: Deployment

Örneğin, aşağıdaki gibi standart bir checkout uygulaması için deployment.yaml dosyanız olduğunu varsayalım:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: checkout
  labels:
    app.kubernetes.io/name: checkout
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: checkout
  template:
    metadata:
      labels:
        app.kubernetes.io/name: checkout
    spec:
      containers:
        - name: checkout
          image: "public.ecr.aws/aws-containers/retail-store-sample-checkout:1.2.1"
          ports:
            - containerPort: 8080

Değişiklik Uygulama (Patching)

Bu dosya halihazırda uygulanmış olabilir. Ancak, diyelim ki bu bileşeni yatay olarak ölçeklendirmek ve replica sayısını 1'den 3'e çıkarmak istiyorsunuz. Orijinal YAML dosyasını manuel olarak düzenlemek yerine, Kustomize kullanarak spec/replicas alanını güncelleyebiliriz.

Bunun için bir kustomization.yaml dosyası oluştururuz ve bir yama (patch) tanımlarız:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../../base-application/checkout
patches:
  - path: deployment.yaml
    target:
      kind: Deployment
      name: checkout

Ve deployment.yaml (yama dosyası) içeriği sadece değişen kısımları içerir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: checkout
spec:
  replicas: 3

Değişiklikleri Uygulamak

Bu kustomizasyonu uygulamak için kubectl içinde yerleşik gelen desteği kullanabilirsiniz. kubectl kustomize komutu, uygulandığında oluşacak nihai YAML dosyasını size gösterir:

kubectl kustomize ~/environment/eks-workshop/modules/introduction/kustomize

Bu komutun çıktısı, Kubernetes'e uygulanmaya hazır tam manifesttir. Çıktıyı doğrudan kubectl apply komutuna yönlendirebilirsiniz:

kubectl kustomize ~/environment/eks-workshop/modules/introduction/kustomize | kubectl apply -f -

Ya da daha pratiği, -k bayrağını kullanarak doğrudan dizini uygulayabilirsiniz:

kubectl apply -k ~/environment/eks-workshop/modules/introduction/kustomize

Envsubst ile Dinamik Değişkenler

Kustomize saf YAML ile çalışır ve değişken değiştirme (templating) özelliğini doğrudan desteklemez. Ancak bazı durumlarda, Amazon EKS küme ismi veya AWS bölgesi gibi ortam değişkenlerini manifestlere enjekte etmeniz gerekebilir.

Bu durumda yaygın bir desen, envsubst aracıyla birlikte kullanımdır:

kubectl kustomize ~/environment/eks-workshop/base-application   | envsubst | kubectl apply -f -

Bu komut zinciri, önce Kustomize ile YAML'ı oluşturur, ardından envsubst ile $EKS_CLUSTER_NAME gibi değişkenleri gerçek değerleriyle değiştirir ve son olarak Kubernetes'e uygular.

Kustomize, karmaşık şablon dilleriyle uğraşmadan konfigürasyon yönetimini basitleştirir ve GitOps süreçleri için mükemmel bir temel oluşturur.