AzureDevOpsGenel

IaC | Jenkins ile Kubernetes’e Uygulama Dağıtımı

Merhaba,

Uygulamayı çalıştırmadan önce alt yapıyı tamamiyle IaC mantığı ile oluşturacağız.

Bunun için önce aşağıdaki talimatlar ile sisteminize kurulumları yapabilirsiniz.

chocolatey üzerinde ps ile aşağıdaki komutlar kullanılarak programlar kuruldu.

https://chocolatey.org/install
choco install virtualbox
choco install vagrant
choco install git

Kurulumlar tamamlandıktan sonra aşağıdaki repo’dan IaC klasörünün içinde yer alan Vagrantfile kopyalayıp istediğiniz şekilde ram-cpu değerlerini konfigüre edebilirsiniz.

vagrant up komutuyla 3 Vm’i ayağa kaldırabilirsiniz.
Vagrant kullanabilmek için detaylı bilgiye ve komutlara aşağıdaki linkten ulaşabilirsiniz.

https://developer.hashicorp.com/vagrant/tutorials/getting-started/getting-started-up

-Vagrantfile ile 3 makine ayağa kalkacaktır.
1-buildagent: Build alabilmemiz için docker, ve pipelineları hazırlayabilmek CI-CD adımlarını yapabilmek için jenkinsotomatik olarak scriptler sayesinde kurulacaktır. Buna vagrant’ta provision denilmektedir. Dilediğiniz script veya komutu shell satırları arasına ekleyebilirsiniz. Build edilen image’ları isterseniz dockerhub veya internal bir image registry’e pushlayabilirsiniz.

2.(k8smaster) ve 3(worker). makineler adından da anlaşılacağı üzere kubernetes cluster için oluşturulacaktır. Bunlarında kurulumunu manuel olarak gerçekleştireceğiz.

-K8s cluster kurulumu için aşağıdaki linkten adım adım kurulumları gerçekleştirebilirsiniz.

https://github.com/onuromertunc/k8sfundamentals/tree/main/setup

-Altyapı kurulumları bittikten sonra aşağıdaki adımlar ile build ve deployment aşamalarına geçebiliriz.

-Jenkins’e login olduktan sonra New Item > Pipeline tıklıyoruz.

-Alt kısımda SCM > Git olarak seçip repo url adresini yazıyoruz.
https://github.com/onuromertunc/helloworld

-Bu projede ben bir nexus registry’e pushladığım için Jenkins credentiala bir username-password bilgisi ekleyerek bunu Jenkins file’da kullandım.

-Kubernetes Cluster’ı jenkins ile connect edebilmek için aynı şekilde aşağıdaki path’den bir credential ekliyoruz. (Kubeconfig dosyasını export ederek kullanabilirsiniz)

-Kubernetes cluster’da deployment.yaml dosyasında tanımlanan servicelerin çalışacağı namespace create ediyoruz.

kubectl create ns helloworld

-Herşey hazır olduktan sonra Build Now butonu ile pipeline çalıştırıyoruz.

Tüm stage’ler başarılı bir şekilde çalışmış durumda.

NodePort tipinde bir service tanımladığımız için nodeip+port ile tarayıcıdan uygulamayı açmayı deniyoruz.