Page 52 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 52

52 | CI/CD Süreç Yönetimi





           4.4. Dağıtım (Deploy)


           Uygulamaların dağıtımında kubernetes tercih edilmektedir. Kubernetes YAML formatında yazılan
           nesne tanımlamalarını kullanır. Deployment olarak tanımlanan Kubernetes nesnesi, CD pipeline’ında
           en aktif nesnedir. Örnekte bir uygulamanın Deployment nesnesi için YAML tanımlamaları vardır.
           GitOps yaklaşımına göre bu tanımlamalar bir Git deposunda tutulmaktadır. ArgoCD Git deposundaki
           değişiklikleri  otomatik  olarak  çeker  ve  Kubernetes’teki  çalışan  tanımlarla  karşılaştırır.  Eğer  bir
           değişiklik varsa, bunu bildirim olarak gösterir. ArgoCD üzerinde yapılan ayara göre, çalışan tanımlar
           güncellenir ve eğer tanımda imaj değişikliği varsa Kubernetes sistemi imajı, imaj deposundan çeker
           ve yeniden kurar. Yeni konteyner sorunsuz şekilde ayağa kalktıktan sonra eski versiyonlu uygulama

           konteyneri kapatılır. Uygulama yeni versiyonu ile sunulmuş olur. Uygulamanın sunulması için birden
           fazla yöntem vardır. Bir yöntemlerden bir tanesi aşağıdaki örnek tanımlaması olası olan Service
           nesnesi kullanmaktır. Service tanımlaması ile uygulama 8080 portundan dışarı açılmış olur.


            apiVersion: apps/v1
            kind: Deployment
            metadata:
             name: demo-app
             namespace: default
             labels:
               name: demo-app
            spec:
             replicas: 2
             selector:
               matchLabels:
                 app: demo-app
             template:
               metadata:
                 labels:
                   app: demo-app
               spec:
                 containers:
                   - name: demo-app-pod
                     image: yte.bilgem.gov.tr:9092/docker-images/demo-app:v1.0
                     ports:
                       - containerPort: 8080
            —--
            apiVersion: v1
            kind: Service
            metadata:
             namespace: default
             labels:
               visualize: “true”
             name: demo-app-service
            spec:
             selector:
               app: demo-app
             ports:
               - name: http
                 protocol: TCP
                 port: 8080
                 targetPort: 8080
             type: NodePort
   47   48   49   50   51   52   53   54   55   56   57