Azure Container Registry ve Azure Kubernetes Service Kullanımı
Merhaba, bu yazıda adım adım bir ASP.NET Core projesinin Docker imajını Azure Container Registry üzerinden Azure Kubernetes Service ile nasıl ayağa kaldırabileceğimizi anlatacağım.
➀ Kaynakların oluşturulması
Öncelikle Azure portal üzerinde söz konusu kaynaklarımızı oluşturalım.
🔷 Azure Container Registry
“Create a resource” butonunu kullanarak aşağıdaki ekrana gelip Container Registry seçeneğine tıklıyoruz.
Create diyerek ilerliyoruz..
İlgili Azure aboneliğimizi(Subscription) seçiyoruz ve Resource Group alanına geçiyoruz.
Yeni bir Resource Group oluşturabilir veya varolan bir tane seçebiliriz.
Registry name alanına azurecr.io alan adından bize verilecek bir alt alan adı belirliyoruz.
Location alanını dilediğimiz yerden seçiyoruz (paramıza göre :)
Admin user alanında Enable seçerek Review + create butonuna tıklıyoruz.
‘Validation passed’ mesajını görüp Create diyoruz.
Deployment sayfasına yönlendiriliyoruz.
İşlem tamamlandığında ‘Go to resource’ butonuna tıklayarak Overview sayfasına ulaşabiliriz.
Azure Container Registry‘miz hazır. Şimdilik burada işimiz bitti.
🔷 Azure Kubernetes Service
Sırada Azure Kubernetes Service(AKS) oluşturmak var.
Tekrar anasayfadan ‘Craete a resource’ butonunu kullanarak Kubernetes Service i seçiyoruz ve create butonuna tıklıyoruz.
Basics sekmesinde Resource group seçiyoruz(veya yeni bir tane oluşturuyoruz) ve cluster ismimizi verdikten sonra Region, Kubernetes versiyonu, makine özellikleri, kaç node kullanacağımız tercihlerini yapıyoruz.
Diğer sekmelerde Kubernetes’in nasıl yetkilendirme sağlayacağı, ağ tercihleri, monitoring özelliğinin kullanılıp kullanılmayacağı gibi bazı ayarlar var. Varsayılan tercihler iş görecektir, istenirse bunlar sonradan düzenlenebilir.
‘Review + create’ ve ardından ‘create’ diyerek AKS’mizi oluşturuyoruz.
Yine deployment sayfasına yönlendiriliyoruz, bu kısım Container Registry‘den daha uzun sürecektir :)
Deployment tamamlandığında anasayfadan Resource Groups menüsüne gidecek olursak oluşan kaynakları aşağıdaki şekilde görebiliriz.
ContainerRegistryRG : Container Registry için oluşturduğumuz kaynak grubu. İçerisinde Container Registry‘miz var. Birazdan buraya bir imaj göndereceğiz.
DefaultResourceGroup-WEU : AKS oluştururken Monitoring özelliğini açık bırakmıştık. AKS’mizi loglayan ve analiz eden arkadaşlar bunlar.
KubernetesServiceRG : AKS için oluşturduğumuz kaynak grubu. AKS bu kaynak grubu içerisinde bulunmakta.
MC_KubernetesServiceRG_SimpleAppCluster_westeurope : Bu arkadaş ise içerisinde AKS’yi oluştururken hiç farketmeden oluşturduğumuz sanal makinemizi, network kaynaklarımızı, IP adresimizi vs barındırıyor.
NetworkWatcherRG : Bu arkadaş neden oluşuyor tam olarak bilmiyorum :) İsminden network kaynaklarımızı takip için bir şeyler yapılmak istendiği aşikar oluyor fakat içi boş :)
➁ Kaynaklara Erişim
Şimdi konsol tarafına geçelim ve eğer daha önce olmamışsak Azure’a login olalım.
(Azure CLI yüklü olmalı) (‘az login’ komutu ile login olunur)
Sıra geldi imajımızı Container Registry’ye göndermeye.
Bunun için zaten bilgisayarınızda Docker’ın yüklü olduğunu ve uygulamanızın imajının burada bulunduğunu varsayıyorum.
Ben DockerHub’da bulunan örnek bir uygulamanın imajını kullanacağım.
Siz de eğer sadece deneyimlemekle ilgileniyorsanız burada;
docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
Container Registry’ye ayrıca login olmak gerekiyor. Bunun için kullanıcı adı ve şifrenizi Azure portalında Container Registry’ye girerek ‘Access keys’ menüsünde görebilirsiniz.
docker login kodikscontainers.azurecr.io
docker tag ImageAdi:etiket containerRegistryURL/containerRegistryAdi:etiketdocker push containerRegistryURL/containerRegistryAdi:etiket
Azure portalında imajımız;
Şimdi ise Azure Kubernetes Service’e bağlanıyoruz..
az aks get-credentials --resource-group ResourceGroupAdi --name AKSAdi
Bu esnada kullanıcı klasörünüzde .kube isimli bir klasör içerisinde kubectl komutlarınızı çalıştırırken kullanmak üzere bir config dosyası oluşacak.
AKS’nin Container Registry’ye bağlanıp imajımızı alabilmesi için aşağıdaki komutla bir secret oluşturuyoruz.
kubectl create secret docker-registry secretadi --docker-server=containerRegistryURL --docker-username=USERNAME --docker-password=PASSWORD --docker-email=mailiniz@asede.com
Buradaki USERNAME ve PASSWORD alanlarına az önce ‘docker login’ işleminde kullandığımız kullanıcı adı ve şifremizi yazıyoruz.
➂ Deployment
Sıra geldi deployment ve service YAML dosyalarımızı oluşturmaya
yml uzantılı dosyaları oluşturmak için Visual Studio Code gayet uygun. Başka bir araçla oluşturuyorsanız girintilerin tab veya boşluk olmadığına dikkat etmelisiniz. Aşağıdaki örneği alıp üzerinde değişiklik yaparak ilerleyebilirsiniz.
Burada dikkat ederseniz ‘imagePullSecrets’ alanında biraz önce oluşturduğumuz secret ismini veriyoruz.
Oluşturduğumuz deployment dosyasını ‘apply’ komutu ile AKS’ye vereceğiz (hangi dizinde olduğumuza dikkat ediyoruz)
kubectl apply -f deployment.yml
Ardından hemen service dosyamızı oluşturuyoruz..
ve ‘apply’ komutumuzu çalıştırıyoruz..
kubectl apply -f service.yml
Birkaç saniye sonra EXTERNAL-IP alanında ulaşacağımız IP adresi geliyor..
ve mutlu son..
Bu arada uygulamamız için otomatik olarak oluşturulup atanan IP adresi de burada;