Bu yazımızda basit bir helm chart yazarak bunu AzureDevOps build ve release pipeline kullanarak kubernetes’e deploy edeceğiz. İlk olarak basit bir Dockerfile hazırlayacağız. Dockerfile’ı build pipeline üzerinden build edip daha sonra release pipeline’nı tetikleyeceğiz. Helm chart’mız ile deployment adımını tamamlayacağız.
Evet ilk olarak AzureDevOps üzerinde kendimize bir proje oluşturalım. Ben OguzWorkSpace diye bir proje oluşturdum.
Daha sonra repomuza aşağıdaki Dockerfile dosyamızı ekleyelim.
FROM centos:latest
RUN yum -y install httpd
COPY . /var/www/html/
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EXPOSE 80
Bu basit bir apache server üzerinde bir index.html ile web sitesi ayağa kaldıracağız. Kullandığım index.html dosyası da aşağıdaki gibidir.
<!DOCTYPE html>
<html>
<head>
<title>Teknodice.com</title>
</head>
<body>
<h1>AzureDevOps İle Helm Chart Kullanarak Kubernetes'e Deployment v0.1</h1>
</body>
</html>
Aşağıdaki gibi Dockerfile ve index.html dosyasını repoma ekledim.
Evet şimdi sıra hızlı bir şekilde basit bir helm chart yazmaya geldi. Bunun için basit bir template yapacağım. Siz ihtiyacınıza göre geliştirebilirsiniz. Bu template’de deployment.yaml,service.yaml ve değişkenlerimizi tuttuğumuz values.yaml dosyalarımız olacak. Klasör yapımız aşağıdaki gibi olacak;
Evet repomuzda helm chart’ımızı da oluşturduk.
Yazdığımız tüm dosyaları github hesabımdan indirebilirsiniz. Evet şimdi hızlı bir şekilde build pipeline oluşturalım.
Aşağıdaki adımları takip ederek hızlıca oluşturabilirsiniz.
Aşağıdaki gibi pipeline’ı oluşturduk. Şimdi Docker plugin’ini kullarak pipeline’mızı tamamlayalım.
Burada Container registry için docker hub kullanacağım. Manage diyerek yeni bir service connection ekleyelim.
Evet service connection oluşturduk, pipeline’ı tamamlamaya devam ediyoruz. Build adımımız aşağıdaki gibidir. Bu adımda yeni bir image oluşturup docker hub’a atmak için hazırlıyoruz.
Push adımı aşağıdaki gibidir. Buradaysa yeni oluşan image’ı docker hub’a yolluyoruz.
Evet şimdi Save ve queue diyerek pipeline’mızı test edelim.
Evet aşağıdaki gibi image’mızı build edip pushladık 🙂
Build pipeline hazır, şimdi release pipeline oluşturalım. Aşağıdaki adımları izleyerek hızlıca oluşturabilirsiniz.
Basit bir pipeline olacağı için tek bir stage bizim için yeterli olacaktır.
Artifact kısmına oluşturduğumuz build pipeline’nı ekleyeceğiz. Trigger oluşturacağız. Böylelikle build pipeline bittikten sonra release pipeline tetiklenecek ve deployment tamamlanacak.
Üzerindeki yıldırım işaretine tıklayarak trigger olayını düzenleyelim.
Evet artık build pipeline bittikten sonra release pipeline’mız çalışacak.
Daha sonra helm chart’mızın olduğu repoyu artifact olarak ekleyelim. Bunu helm chart dosyalarımızı kullanmak için yapıyoruz.
Yukarıda gördüğümüz gibi artifactleri ekledik. Şimdi build pipelineda image’mızı tag lemek için $(Build.BuildId) değişkenini kullanmıştık. Build ve release pipeline’mızın kullanacağı ortak bir Library oluşturacağız. (Burada ortak kullanılacak değişkenleri tanımlarız.) Aşağıdaki adımları takip ederek ekleyelim.
Şimdi oluşturduğumuz variable groups’u build ve release pipeline da linklememiz gerekiyor.
Evet linkledik, “SAVE” diyerek ekliyoruz. Bu işlemin aynısını release pipeline’a da eklemeniz gerekiyor. Ek olarak;
More Actions bölümünden linklediğimiz bu değişkenleri ister Release’in tamamında ister her bir stage için farklı olarak da kullanabilirsiniz.
Evet sonra doğru yaklaşıyoruz 🙂 Bu senaryoda her build sonrası image’ın yeni versiyonunu deploy edeceğiz. O yüzden master sunucusuna bağlanarak ilk olarak helm chart’mızı install edeceğiz daha sonra bunu pipeline üzerinden sürekli güncelleceğiz.
Evet master sunucumuza ssh ile bağlanıp helm chart’mızı indiriyoruz. Aşağıdaki komutla install ediyoruz.
helm install teknodicecom-helm ./teknodicecom --set nameSpaces=oguz-test --set containers.imageName=oguzzarci/k8sdeploymentwithhelm:95v --set containers.name=helm-test-apachesv --set metadata.name=helm-test-apachesv --set metadata.labels.app=helm-test-apachesv --set service.port=32600 --set replicaCount=1 --set containers.ports=80
Bu işlem sonrasında bir hata almadıysanız Kubernetes Dashboard’dan aşağıdaki gibi görebilmeniz gerekiyor.
Servisimizden de erişim sağladık. Uygulamamız ayakta.
Evet son bir adım kaldı. O da pipeline üzerinden deployment yapmak, onun için de aşağıdaki adımları takip edelim:
Sadece bir tane task ekledim. Orada da yüklü olan helm chart’mızın sadece image’ını güncelleyeceğiz.
$(System.DefaultWorkingDirectory) : Bu yol AzureDevOps’un agent’nın bu job için çalıştığı path. (Artifact’leri buraya indirir.)
_OguzWorkSpace : Helm chart’mızın olduğu artifact’in Alias’ı.
Evet her şey hazır görünüyor. Şimdi bir build başlatıp olanları görelim 🙂
Evet yukarıdaki gibi sistemimiz sorunsuz bir şekilde yeni versiyonu deploy etti 🙂
Bir sonraki yazıda görüşmek üzere 🙂
Bu yazımda oluşturduğum tüm kodları aşağıdaki linkten indirebiliriniz.