Microsoft AKS (Azure Kubernetes Service) Üzerine Apinizer Kurulumu
İç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.
Kubernetes cluster oluşturmak için aşağı görselde seçili olan linkler sırasıyla tıklanır.
Oluşturalan kümeye (cluster) verilecek isim mevcut bir seçim yoksa yeni bir kaynak grubu (Resource group) oluşturulabilir.
Kubernetes versiyonu olarak 1.18 veya 1.20 ana (major) tipi seçilebilir.
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 havuzuna verilecek isim ile birlikte seçilebilecek ayarları içeren ekran görüntüsü aşağıdadır:
Kimlik Doğrulama Ayarları
Kimlik Doğrulama (Authentication) kısmında, kümenizi nasıl kısıtlamak istediğinizi ayarlayabilirsiniz.
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.
Entegrasyon Ayarları
Entegrasyon (Integrations) sekmesinde, Azure'un sağladığı bazı faydalı entegresyonlarla ilgili kararlarınız ayarlanır.
Son adımda, yaptığınız ayarlar bir denetim mekanizmasından geçer ve onayınıza sunulur.
İşlemi tamamladığınızda, aşağıdaki gibi bir ekranla karşılaşılı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 versiyonu şu adresten indirilerek kurulabilir: https://docs.microsoft.com/tr-tr/cli/azure/install-azure-cli
Sonrasında aşağıdaki komut ve sonrasındaki işlemle birlikte bilgisayarınızdaki istemci hesabınıza bağlanır.
az login
Adım 1: 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.
Adım 2: 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 https://account.mongodb.com/account/register 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 https://cloud.elastic.co/registration adresi üzerinden cloud ortamında bir elastic servisi kullanarak Apinizer tanımlanabilir.
Mongo 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.
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.
Mongo 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.
Açılan ekranda Sürücü (Driver) olarak Java'yı, Versiyon (Version) olarak da 3.4 veya daha üstü bir seçim yapıldığında ekranın alttında bir yazı belirir.
Bu yazı, daha sonraki bölümlerde apinizer-deployment.yaml dosyasına yazarak Apinizer'ı Mongo'ya 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:27017,apinizercluster-shard-00-01.wp2bb.mongodb.net:27017,apinizercluster-shard-00-02.wp2bb.mongodb.net:27017/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 D:\apinizer\AKS\apinizer-deployment.yaml
namespace/apinizer created
deployment.apps/manager created
kubectl get pods -n apinizer
NAME READY STATUS RESTARTS AGE
manager-646fcdd894-ktt97 1/1 Running 1 42s
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 D:\apinizer\AKS\service.yaml
kubectl apply -f D:\apinizer\AKS\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
service/apinizer-console-service exposed
kubectl get svc -n apinizer
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apinizer-console-service LoadBalancer 10.100.98.34 20.10.30.40 80:31234/TCP 47s
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://20.10.30.40/
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 sunucu bağlantısını, Apinizer ile test etmek için Test Connection butonu kullanılabilir.
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:
Aşağıdaki değerler sunucuların varsayılan değerleridir. Cluster kaynaklarınıza uygun olarak değiştirebilir.
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ı 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 tıklayı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
service/apinizer-worker-service exposed
kubectl get svc -n prod
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apinizer-worker-service LoadBalancer 10.100.210.107 20.10.30.50 80:31544/TCP 54s
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.
Sonrasında edit tuşuna tıklanarak ortamın Access URL bilgisi değiştirilir.
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'nin kayıt edileceği proje, navbar menüsünden seçilir.
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.
Aşağıdaki görselde seçili link ile API Proxy'nin nereden oluşturulacağı kaynağı seçilir.
API Tanım dosyasının linki girilerek Parse edilir.
API Proxy bilgileri girilerek Save butonuna tıklanır.
API Proxy'yi yüklemek (deploy) için aşağıdaki görselde seçili olan Deploy butonu kullanılır.
Yükleme işlemi onaylanır.
API Proxy'nin Develop tabından test edilmek istenen uç noktaya (endpoint) gelip, Test Endpoint butonuna tıklanır.
Test etme dialogunu içeren görsele aşağıda verilmiştir.
API Proxy ile ilgili detaylı bilgi için Geliştirici Kılavuzuna (Developer Guide) bakınız.
Test Konsoluyla ilgili detaylı bilgi almak için tıklayınız.