Kustomize ile Kubernetes Manifest Yönetimi
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.