Kubernetes Yaml Dosyası Nasıl Yazılır ? | Kubernetes Dersleri 3
Merhabalar, önceki dersimizde kubernetes konseptlerinden bahsetmiştim. Simdi ise bu konseptlerin nasıl kullanılacağını anlatacağım.
Yazdığımız uygulamaları veya yardımcı uygulamaları kubernetes’e deploy etmemiz gerekiyor bunun icin yaml dosyaları yazıyoruz.
Yaml dosyaları 3 bolümden oluşur.
Yaml File Bölümleri
- Metadata ==> Deployment, Service vb.) adını ve label’lari içeren bolum
- Specifications ==> Konsepte özel olarak tanımlanan değişkenler container ayarları image vb.)
- Status ==> Otomatik olarak Kubernetes tarafından yönetilen kisim. Kubernetes istenilen ayarlar ile o anki ayarları karşılaştırarak aksiyon alır.
Yukarıdaki resimde bir deployment görüyoruz. Deployment ReplicaSet’i, ReplicaSet ise pod’u yönetir.
Peki Kubernetes Deployment ‘in hangi ReplicaSet’i yöneteceğini nerden biliyor ? veya ayni şekilde ReplicaSet hangi pod’u yöneteceğini nerden biliyor ?
Label’lar sayesinde yönetim sağlanmaktadır. (Her şeyi karıştıran ayni zamanda yöneten basımıza dert olabilecek gerekli kısımlar (okumaya devam edin blog sonunda label ‘lardan kurtulabileceğimiz bir yol var :))) Uygulamanın düzgün çalışabilmesi icin Label’lar düzgün şekilde verilmelidir. İstenilen değer verilebilse de o değerin diğer yerlerde de kullanılacağını unutmamak gerekir.
Bir örnek üzerinden yaml dosyalarını inceleyelim Örneğe “Kubernetes Excel” Reposuna giderek erişebilirsiniz.
apiVersion: apps/v1 kind: Deployment # konsept metadata: # BOLUM 1 METADATA name: backenddeployment # deploymen adi gorunecek ad labels: app: backenddeployment # replicaset, pod ve service ile eslesecek olan label spec: # BOLUM 2 SPECIFICATIONS replicas: 1 # Kac adet replicasi olusturlacagini belirler selector: matchLabels: app: backenddeployment # deployment ve pod ile eslecek olan label template: # pod ayarlarini icerir metadata: labels: app: backenddeployment # replicaset ile eslecek olan label spec: containers: - name: backendpod image: localhost:5000/excel_backend:0.0.1 # local image repository ports: - containerPort: 9000 env: # sistem degiskenlerinin verildigi yer direk verebilir ya da asagidaki gibi configmap veya secretdan alinabilir - name: DATABASE_USER valueFrom: secretKeyRef: name: postgresql-secret key: postgresql-root-username - name: DATABASE_PASSWORD valueFrom: secretKeyRef: name: postgresql-secret key: postgresql-root-password - name: DATABASE_NAME valueFrom: configMapKeyRef: name: postgresql-configmap key: database_name - name: DATABASE_HOST valueFrom: configMapKeyRef: name: postgresql-configmap key: database_host - name: DATABASE_PORT valueFrom: configMapKeyRef: name: postgresql-configmap key: database_port - name: SECRET_KEY valueFrom: configMapKeyRef: name: django-configs key: django_secret_key - name: STATIC_URL valueFrom: configMapKeyRef: name: django-configs key: django_static_url --- # tek sayfada birden fazla konsept tanimlamak icin kullanilir apiVersion: v1 kind: Service # konsept metadata: name: backend-deployment-service spec: selector: app: backenddeployment # deployment ile eslesecek olan label servis deployment'a baglanacak type: NodePort ports: - protocol: TCP port: 9000 targetPort: 9000 nodePort: 30001
Yukarida ki yaml dosyasini incelersek eger:
Deployment ve Service konseptlerini görüyoruz. Deployment ‘in ReplicaSet’i yönetmesi veya ReplicaSet ‘in Pod’u yönetmesi icin “app: backenddeployment” ibaresi kullanılmıştır.
Ayni ibareyi Servisi Deployment’a bağlamak icin kullandığımıza dikkat edelim. Burada bir diğer dikkat etmemiz gereken konu label specifications içerisinde “selector: matchLabels:” olarak karsımıza çıkmasıdır.
Diğer ayarlara göz gezdirirsek container ‘in adi, imajı, hangi portu kullandığı ve containera verilen sistem değişkenlerini görmekteyiz. Sistem değişkenleri ConfigMap ve Secret’den alınarak kullanılmıştır
ConfigMap ve Secrets dosyalarına “Kubernetes Excel” Reposuna giderek erişebilirsiniz.
Eğer sistem değişkenini direk vermek isterseniz aşağıdaki şekilde verebilirsiniz.
env: - name: SERVICE_PORT value: "80"
Diğer Kubernetes Konseptleri ‘de benzer mantıkta yazılır. Fakat her birinin kendisine özel bazı değişkenleri var.
Kubernetes yaml dosyası yazmanın kolay bir şey olmadığını anlamış olmalısınız her bir konsept icin bir sıfırdan bir dosya oluşturmanız gerekiyor ama merak etmeyin her şeyde olduğu gibi bunun da kolay yolu var Helm!
Bir sonraki yazımda Helm Nedir, Nasıl Kullanılır, Neleri Kolaylaştırır ? gibi konulara yer vereceğim.
Bir sonraki yazıda görüşmek üzere!