Create AKS Cluster with Terraform

By | 29 March 2020

Azure platformu üzerinde Azure Kubernetes Service(AKS)’i CLI üzerinden ,portal üzerinden yada Arm template’lerini kullanarak PowerShell ile yapılandırabilirsiniz.

Bunlara alternative olarak Terraform kullanrak da Kubernetes kurulumlarınızı gerçekleştirebilirsiniz. Özellikle CICD süreçlerinizde Terraform kullanamaya alışıksanız, bu deneyiminizi değiştirmeden Terraform ile AKS kurulumlarınıza devam edebilirsiniz.

Infra’yı script haline getirip deploy etmek ortamların identical olmasını, hata payı olmamasını ve işlemlerin otomatize edilmesini sağlar. Terraform’da bu anlamda IAC(infrastructureAsCode) kullanılan mimarilerin olmazsa olmazlarından olduğu için bu makalede sizlere AKS kurulumunu anlatmak istedim.

Bu kurulum biraz diğerlerinden farklı olacak. Bunun sebebi direk cloud shell üzerinde gerekli konfigürasyonlar yaparak kurulumu gerçekleştireceğim. İlerleyen zamanlarda bunun AzureDevOps yada Github Actions üzerinden pipeline’lar ile nasıl deploy edeceğinizi de anlatacağım.

Bu amaçla kurulumu cloud shell ve cloud shell’imin kullandığı drivemap’leri kullanarak yapacağım.

Terraform hakkında daha önceden nasıl kullanabileceğinize dair makaleler yazmıştım. Bugün terraform’un syntax’ına çok girmeden, terraform’u cloudshell üzerinde nasıl kullanacağınızı ve nasıl AKS cluster deploy edebileceğinizi anlatmaya çalışacağım.

Öncelikle cloudshell’I açıp clouddrive dizinine düşelim. Burada Terraform dosyalarını tutacağımız ayrı bir dizin oluşturalım. (Terraform-aks-k8s isminde bir dizin oluşturdum)

Ardından terraform file’larımızı oluşturmaya başlayabiliriz. Daha önceki makalelerimde bu konudan bahsetmiştim. Kısa bir özet geçmem gerekirse, Terraform mimarisinde değişkenleri, çıktıları,main scripti ayrı terraform dosyalarında yapılandırabiliriz.

Bu anlamda oluşturduğum dizindeki terraform dosyaları ve içerikleri aşağıdaki gibidir:

Main.tf

K8s.tf:

Oluşurulacak resource’lara ilişkin konfigürasyon bilgisinin bulunduğu dosyadır.

Vaiables.tf

Değişkenlerin bulunduğu terraform dosyasıdır.

Output.tf

Deployment sonrası yapılacak çıktıların belirlendiği Terraform dosyasıdır.

Bu dosyaları aşağıdaki gibi cloud shell üzerinde code <dosya ismi> şeklinde komut olarak çalıştırıp içeriklerini kopyalayıp yapıştırabilirsiniz.

Örnek olarak aşağıda main.tf terraform dosyasını komutu çalıştırarak oluşturup içeriğini past edebilirsiniz.

Içeriği yapıştırdıktan sonra CTRL+S ile kayıt işlemini yapıp CTRL+Q ile komut satırına geri dönebilirsiniz.

Bu işlemlerin ardından Terraform mimarisinde yapılan deployment’lara ilişkin bilgileri tutan tfstate isimli dosyanın koyulacağı dizinin belirlenmesi gerekir. Bu dosya bizim için önemlidir. Çünkü yapılan deployment işlemlerinde hangi bileşenlerin oluşturulacağı, hangilerinin update edileceği bu dosya içeriği okunarak karar verilir. Bu amaçla bu dosyayı Azure üzerinde bir storage’a koyup deployment sırasında bu storage’a erişebilmemiz gerekiyor.

Aşağıdaki komutu bu amaçla çalıştırıp belirlenen storage account üzerindetfstate isminde bir container oluşturalım.

Komut çalıştıktan sonra oluşan container aşağıdaki gibidir. Burada önemli olan nokta storage account’a erişim için gerekli olan storage account ismi ve access key’inin komuta verilmesidir.

Bu işlemler tamamlandıktan sonra Terraform dosyalarımızın bulunduğu dizine gidip terraform’u initialize edebiliriz. Bu işlemi yaparken aşağıdaki komutu çalıştırmamız yeterli olacaktır.

terraform init -backend-config=”storage_account_name=<YourAzureStorageAccountName>” -backend-config=”container_name=tfstate” -backend-config=”access_key=<YourStorageAccountAccessKey>” -backend-config=”key=codelab.microsoft.tfstate”

Bu komutta da tfstate dosyasının bulunacağı storage’ı,erişim key’ini ve storage’daki container ismini değişken olarak tanımlamamız gerekir.

Initialize işleminin ardından scriptin platforma bağlanırken kullanması için gerekli olan service principal bilgilerinin de placeholder’lara tanımlanması gerekir.

Bu işlemlerin ardından artık plan komutu ile yapılacak deployment check edilebilir. Bu amaçla aşağıdaki komutu çalıştırarak yapılan konfigürasyon deployment öncesi kontrol edilmiş olur.

terraform plan -out out.plan

Çıktıda konfigüre edilecek resource’lar ve bunlara ait parametreler ayrıntılı şekilde görünür. Eğer bir hata görünmüyorsa deployment işlemi başlatılabilir.

Bu amaçla aşağıdaki komut çalıştırılarak deployment işlemini başlatabiliriz.

terraform apply out.plan

Bu işlemlerin ardından kurulum başarılı şekilde tamamlanacaktır. Deploy edilen Kubernetes cluster kontrol edildiğinde 3 nodun sağlıklı şekilde çalıştığını görebilirsiniz.

Tfstate klasörünü kontrol ettiğinizde konfigürasyonlara ait bilgiyi tutan tfstate uzantılı dosyanın oluştuğunu görebilirsiniz.

Özet olarak Terraform kullanarak Azure üzerinde 3 node’lu bir cluster ayağa kaldırmış olduk. Üstelik bunların hepsini cloudshell kullanarak Azure üzerinde gerçekleştirdik.

Bir sonraki makalede görüşmek üzere.

Fırat

Leave a Reply