Ana içeriğe geç

Azure AKS

not

İçeriğin ilk bölümlerimde, en baştan başlayarak adım adım; AKS kurulumu, kaynaklarının oluşturulması, kullanılması ve harici MongoDb ile ElasticSearch sunucusu adımları anlatılmaktadır.

Eğer AKS üzerinde hazır bir küme (cluster) varsa doğrudan 5. adım olan AKS'ye Apinizer'ın Kurulumu bölümünden başlanılabilir.

1. Giriş

Microsoft AKS (Azure Kubernetes Service) Nedir?

Azure, mevcut uygulamaları barındırarak yeni uygulama geliştirme süreçlerini kolaylaştıran eksiksiz bir bulut platformudur.

Azure Kubernetes Service (AKS), kapsayıcılı uygulamaları çalıştırmak için önceden yapılandırılmış bir sanal makine kümesi oluşturma, yapılandırmayı ve yönetmeyi sağlar.

Bir AKS kümesini dağıttığınızda Master node'lar ve diğer tüm kubernetes node'ları sizin yerinize dağıtılır ve yapılandırılır.

2. AKS, AKS CLI ve kubectl Kurma ve Yapılandırma

AKS Cluster Kurulumu

Azure kullanım kolaylığını hedef alan bir yapı içerdiğinden, eğer özel bir ayar istenmiyorsa varsayılan ayarlarla ilerleyerek rahatlıkla kurulum yapılabilir.

AKS Cluster Oluşturma
AKS Cluster Oluşturma

Kubernetes cluster oluşturmak için aşağı görselde seçili olan linkler sırasıyla tıklanır.

AKS Cluster Oluşturma Linkleri
AKS Cluster Oluşturma Linkleri

Oluşturulacak kümeye (cluster) verilecek isim mevcut bir seçim yoksa yeni bir kaynak grubu (Resource group) oluşturulabilir.

Kubernetes sürümü olarak 1.18 veya 1.20 ana (major) tipi seçilebilir.

AKS Cluster Yapılandırması
AKS Cluster Yapılandırması

Node Havuzu Ekleme

Node Havuzu (Node Pool), küme içindeki node'larla ilgili ayarları içerir. Mevcut bir node tanımı seçebilir ya da yeni bir tanım oluşturulabilir.

Node Havuzu Ekleme
Node Havuzu Ekleme

Node havuzuna verilecek isim ile birlikte seçilebilecek ayarları içeren ekran görüntüsü aşağıdadır:

Node Havuzu Yapılandırması
Node Havuzu Yapılandırması

Kimlik Doğrulama Ayarları

Kimlik Doğrulama (Authentication) kısmında, kümenizi nasıl kısıtlamak istediğinizi ayarlayabilirsiniz.

Kimlik Doğrulama Ayarları
Kimlik Doğrulama Ayarları

Ağ Oluşturma Ayarları

Ağ Oluşturma (Networking) sekmesi, ağ ayarlarını Kubenet'e mi Azure CNI'ya mı bırakacağınız, DNS isminizi hangi taslakta istediğiniz ve erişimle ilgili güvenlik ve ağ ayarlarını içerir.

Ağ Oluşturma Ayarları
Ağ Oluşturma Ayarları

Entegrasyon Ayarları

Entegrasyon (Integrations) sekmesinde, Azure'un sağladığı bazı faydalı entegresyonlarla ilgili kararlarınız ayarlanır.

Entegrasyon Ayarları
Entegrasyon Ayarları

Son adımda, yaptığınız ayarlar bir denetim mekanizmasından geçer ve onayınıza sunulur.

AKS Cluster İnceleme ve Onay
AKS Cluster İnceleme ve Onay

İşlemi tamamladığınızda, aşağıdaki gibi bir ekranla karşılaşılır.

AKS Cluster Hazır
AKS Cluster Hazır

Kümenizi oluşturduktan sonra bilgisayarınıza kurulacak AKS CLI ve kubernetes ile ilgili sistem kontrol edilebilir.

3. AKS CLI Kurulumu

Azure CLI, Windows, MacOS ve Linux ortamlarında yüklenebilir. Ayrıca bir Docker kapsayıcısında çalıştırılabilir.

Azure CLI'nin işletim sistemine uygun sürümü şu adresten indirilerek kurulabilir: Azure CLI Installation Guide

Sonrasında aşağıdaki komut ve sonrasındaki işlemle birlikte bilgisayarınızdaki istemci hesabınıza bağlanır.

az login
Azure CLI ile oturum açma

CLI varsayılan tarayıcınızı açabilir ve bir Azure oturum açma sayfası yükler.

Aksi takdirde, bir tarayıcı sayfası açın ve şu linke gidin: https://aka.ms/devicelogin. Terminalinizde görünen yetkilendirme kodunu girin.

Web tarayıcısı yoksa veya Web tarayıcısı açılamazsa, az login --use-device-code komutuyla cihaz kod akışını kullanın.

Tarayıcıda oturum açma

Tarayıcıda hesabınızın kimlik bilgileriyle oturum açın.

Sonrasında Kubernetes komut satırı aracı kubectl'i indirmeli ve yüklenmelidir.

az aks install-cli

Yönetilen bir Kubernetes kümesi için erişim kimlik bilgileri alınmalıdır.

Varsayılan olarak, kimlik bilgileri .kube/config dosyasında birleştirilir, bu nedenle kubectl bunları kullanabilir.

Yönetilen kümenin adı ve kaynak grubunun adını kullanarak varsayılan grubu yapılandırabilirsiniz:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Erişimin doğru şekilde sağlanıp sağlanmadığı aşağıdaki komutla kontrol edilir.

kubectl get nodes

4. Cloud MongoDb ve ElasticSearch Kurma ve Ayarlama

Kurulum ve Konfigürasyon dokümanında belirtildiği gibi Replicaset MongoDB ve Elasticsearch'e ihtiyaç vardır. Bunlar herhangi bir sanal sunucuya kurabileceğini gibi cloud olarak da kullanabilir ya da mevcut olarak zaten var ise bir sonraki adıma geçilebilir.

Bu bölümde uygulamaların kendi ortamlarındaki cloud sistemler kullanılmıştır.

  • MongoDB için MongoDB Atlas adresine giderek bir hesap oluşturun ve kısıtlı bir DB boyutuna kadar ücretsiz olarak kullanılabilir. Apinizer MongoDB'de sadece konfigürasyon tanımlarını tuttuğu için büyük boyutlu bir veritabanına ihtiyacı yoktur.

  • Elasticsearch için Elastic Cloud adresi üzerinden cloud ortamında bir elastic servisi kullanarak Apinizer tanımlanabilir.

MongoDB Cloud Ayarları

MongoDB'nin kendi sitesinden bir hesap oluşturduktan sonra istenilen isimde bir veritabanı oluşturup, bununla ilgili ayarların düzenlenmesi gerekiyor.

Erişim izni için Ağ Erişimi (Network Access) menüsünden Add IP Address butonuna tıklanır.

MongoDB Ağ Erişimi
MongoDB Ağ Erişimi

Ardından istenilen ip'ler ya da aşağı görselde seçili olan Allow Access From Anywhere seçeneği gibi her yerden erişimi açık olacak şekilde alanlar doldurulur.

MongoDB IP Erişim İzni
MongoDB IP Erişim İzni

MongoDB connection string alma:

Oluşturulan veri tabanına olan bağlantıyı sağlayacak bağlantı ifadesini (Connection String) almak için Veritabanları (Databases) sayfasında dönüp ve Bağlan (Connect) linkine basılır.

Buradan kendiniz herhangi bir MongoDb veritabanı düzenleyicisine bağlanmak için gerekli bilgiyi alabilir ya da Apinizer uygulamasını bağlamak için Uygulamanızı Bağlayın (Connect your application) tuşuna basılabilir.

MongoDB Bağlantı Ayarları
MongoDB Bağlantı Ayarları

Açılan ekranda Sürücü (Driver) olarak Java'yı, Sürüm (Version) olarak da "3.4" veya daha üstü bir seçim yapıldığında ekranın alttında bir yazı belirir.

MongoDB Connection String
MongoDB Connection String

Bu yazı, daha sonraki bölümlerde apinizer-deployment.yaml dosyasına yazarak Apinizer'ı MongoDB'ye bağlayacağınız bağlantı tanımıdır.

5. AKS'ye Apinizer'ın Kurulumu

Bu başlık altında anlatılanlar Apinizer kurulum dokümanlarından farklı olarak Apinizer'ı servis olarak açmanın tanımını anlatmaktadır.

Apinizer Yönetim Konsolu kurulumu

Apinizer için .yaml dosyası oluşturulup AKS cluster'ına yüklenmelidir.

Örnek bir apinizer-deployment.yaml dosyası ayarları aşağıdadır:

apiVersion: v1
kind: Namespace
metadata:
name: apinizer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: manager
namespace: apinizer
spec:
replicas: 1
selector:
matchLabels:
app: manager
version: 'v1'
template:
metadata:
labels:
app: manager
version: 'v1'
spec:
containers:
- name: manager
image: apinizercloud/manager:2023.01.1
imagePullPolicy: IfNotPresent
env:
- name: SPRING_PROFILES_ACTIVE
value: prod
- name: SPRING_DATA_MONGODB_DATABASE
value: apinizerdb-aws
- name: SPRING_DATA_MONGODB_URI
value: 'mongodb://apinizer:<PASSWORD>@apinizercluster-shard-00-00.wp2bb.mongodb.net:25080,apinizercluster-shard-00-01.wp2bb.mongodb.net:25080,apinizercluster-shard-00-02.wp2bb.mongodb.net:25080/ApinizerDb?ssl=true&replicaSet=atlas-dvz21z-shard-0&authSource=admin&retryWrites=true&w=majority'
- name: JAVA_OPTS
value: ' -Xmx1400m -Xms1400m'
resources:
requests:
memory: '2Gi'
cpu: '1'
limits:
memory: '2Gi'
cpu: '1'
ports:
- name: http
containerPort: 8080
kubectl apply -f apinizer-deployment.yaml
kubectl get pods -n apinizer

Apinizer Yönetim Konsolu AKS ortamına yüklendikten sonra, MongoDB veritabanına apinizerdb isminde bir veritabanı oluşacaktır. general_settings tablosuna Apinizer tarafından size verilen lisans anahtarı girilmelidir.

Apinizer Yönetim Konsolu üzerinden Kubernetes kaynaklarına erişim ve yönetim için aşağıdaki izinlerin tanımlanması yapılmalıdır.

Örnek bir service.yaml dosyası ayarları aşağıdadır:

apiVersion: v1
kind: Namespace
metadata:
name: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system

Örnek bir adminuser.yaml dosyası ayarları aşağıdadır:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
kubectl apply -f service.yaml
kubectl apply -f adminuser.yaml
kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts
kubectl create clusterrolebinding apinizer -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:apinizer

Apinizer Yönetim Konsolu için Erişim Servisi Oluşturma

Kurulum tamamlandıktan sonra Apinizer Yönetim Konsolu'na erişim için bir servis gerekmektedir.

Aşağıdaki adımlar takip edilerek bir servis oluşturulur. Dış IP alımında bazen bir iki dakika geçmesi gerekebilir.

kubectl expose -n apinizer deployment.apps/manager --port=80 --target-port=8080 --name=apinizer-console-service --type=LoadBalancer
kubectl get svc -n apinizer

6. Apinizer Yönetim Konsolu Giriş

Adım 2'deki servis erişim adresini, tarayıcının adres çubuğuna yazarak giriş yapılır.

Default kullanıcı adı şifre için Apinizer destek ekibine ulaşabilirsiniz.

Bu ayarlara göre oluşan Apinizer Yönetim Konsolu Adresi: http://<EXTERNAL-IP>/

Apinizer Yönetim Konsolu Giriş
Apinizer Yönetim Konsolu Giriş

7. Apinizer Konfigurasyonları

Log Sunucularının Tanımlanması

Apinizer, API trafiğini ve metrik bilgilerini, Elasticsearch veri tabanında tutar. Kurulum işlemine devam edebilmek için Elasticsearch cluster tanımlarının yapılması gerekmektedir.

Apinizer Yönetim Konsolu uygulamasında menüden Administration → Server Management → Elasticsearch Kümeleri sayfasına gidilir.

Elasticsearch cluster tanımlama ayarlarını içeren görsele aşağıda yer verilmiştir:

Elasticsearch Cluster Tanımlama
Elasticsearch Cluster Tanımlama

Elasticsearch sunucu bağlantısını, Apinizer ile test etmek için Test Connection butonu kullanılabilir.

Elasticsearch Bağlantı Testi
Elasticsearch Bağlantı Testi

Ortam (Environment) Tanımlama

Bir API Proxy'nin erişilebilir olması için en az bir ortamın yüklenmesi (deploy) gerekmektedir. Apinizer, bir API Proxy'nin birden fazla ortama yüklenmesine de izin verir.

Apinizer Yönetim Konsolu uygulamasında menüden Administration → Server Management → Gateway Environment sayfasına gidilir.

Ortam tanımlama ayarlarını içeren görsele aşağıda yer verilmiştir:

Ortam Tanımlama
Ortam Tanımlama

Aşağıdaki değerler sunucuların varsayılan değerleridir. Cluster kaynaklarınıza uygun olarak değiştirebilir.

Ortam Yapılandırması
Ortam Yapılandırması

Create Environment butonuna tıklanarak ortam tanımlama işlemi tamamlanır.

Ortamların listelendiğinde ekranda ilgili ortamın durumunu gösteren Unpublished butonuna tıklanarak Prod tipindeki ortam AKS'ye deploy edilmektedir.

Ortam Yayınlama
Ortam Yayınlama

Ortamı yükleme işlemi tahminen 3 dakika içinde AKS'ya yüklenmiş olacaktır.

Ortam tanımlama ve yayın işlemleri ile ilgili detaylı bilgi almak için Environment dokümantasyonuna bakınız.

Ortamı (Environment) Servis Olarak Açma

Son olarak yayınladığımız ortamda çalışacak API'lere erişmek için bir servis oluşturulması gerekiyor.

kubectl expose -n prod deployment.apps/worker --port=80 --target-port=8091 --name=apinizer-worker-service --type=LoadBalancer
kubectl get svc -n prod

AKS tarafından üretilen LoadBalancer (EXTERNAL-IP) değerini, tanımlanan Prod ortamının Access URL değeri olarak atanmalıdır.

İlk olarak, ortamın düzenlendiği sayfanın Environment Info tablosundaki düzenleme butonuna tıklanır.

Ortam Düzenleme
Ortam Düzenleme

Sonrasında edit tuşuna tıklanarak ortamın Access URL bilgisi değiştirilir.

Ortam Access URL
Ortam Access URL

8. Apinizer'da İlk API'yi Yayınlama ve Test Etme

En son adımda örnek bir API tanım dosyası üzerinden Apinizer'a bir API'yi API Proxy olarak açılması anlatılmaktadır.

API Proxy'nin kayıt edileceği proje, navbar menüsünden seçilir.

API Proxy Proje Seçimi
API Proxy Proje Seçimi

Apinizer Yönetim Konsolu uygulamasındaki proje menüsündenden Development → API Proxies sayfasına gidilir.

Yeni API Proxy tanımlamak için Proxy butonuna tıklanır.

API Proxies Sayfası
API Proxies Sayfası

Aşağıdaki görselde seçili link ile API Proxy'nin nereden oluşturulacağı kaynağı seçilir.

API Kaynak Seçimi
API Kaynak Seçimi

API Tanım dosyasının linki girilerek Parse edilir.

API Parse
API Parse

API Proxy bilgileri girilerek Save butonuna tıklanır.

API Proxy Kaydetme
API Proxy Kaydetme

API Proxy'yi yüklemek (deploy) için aşağıdaki görselde seçili olan Deploy butonu kullanılır.

API Proxy Deploy
API Proxy Deploy

Yükleme işlemi onaylanır.

API Deploy Onayı
API Deploy Onayı

API Proxy'nin Develop tabından test edilmek istenen uç noktaya (endpoint) gelip, Test Endpoint butonuna tıklanır.

API Test Endpoint
API Test Endpoint

Test etme dialogunu içeren görsele aşağıda verilmiştir.

API Test Dialog
API Test Dialog

API Proxy ile ilgili detaylı bilgi için Geliştirici Kılavuzuna bakınız.

Test Konsoluyla ilgili detaylı bilgi almak için Test Konsolu dokümantasyonuna bakınız.