Bu doküman, Apinizer Integration kurulumunu anlatmaktadır.

1) Giriş

API integration, bir veya birden fazla uç noktanın akıcı bir şekilde birbirine bağlanmasını sağlayarak, iş akışlarını oluşturma yeteneği sunar.

2) Kurulum öncesi adımlar

Apinizer API Integration'ın kurulumuna başlamadan önce şunlara dikkat edilmelidir:

  • API Manager'ın kurulu olması gerekmektedir. API Manager Kurulumu için Apinizer Kurulumu ve Ayarları dökümanını inceleyiniz.
  • Lisans anahtarınızda API Integration'ın bulunması gerekmektedir.

3) Kurulum adımları

API Integration Kurulumu iki şekilde yapılmaktadır.

  • Kubernetes yönetimi Apinizer üzerinden yapılıyorsa, API Manager üzerinden API Integration kurulumu yapabilirsiniz.
  • Kubernetes yönetimi Apinizer üzerinden yapılmıyorsa, Kubernetes'e manuel kurulum yapılabilir ve ardından API Manager ile bağlantı sağlanabilir.

3.1) API Integration Kurulumu

3.1.1) API Integration Kurulumu API Manager Üzerinden Yapılacaksa

API Manager üzerinden API Integration kurulumu için Genel Ayarlar menüsünde aşağıdaki bölümün aktif olması gerekmektedir.


API Manager'da, Yönetim → Sunucu Yönetimi → Kubernetes Resources sayfasına gidin. Deployment & Pods sekmesinden API Integration'ı etkinleştirin. Gerekli tanımları yaparak kurulumu tamamlayın.


Açılan diyalogda, kurumunuza uygun olarak zorunlu alanları tanımlayın.


AlanAçıklama
Erişim Adresi (Access URL)API Integration erişim adresidir. Örnek adres: http://<API_INTEGRATION_ACCESS_URL>:<PORT>.
Sayısı (Count)

API Integration uygulama sayısı, Kubernetes Cluster'daki replicaSet ayarını düzenler.

Servis Portu (Service Port)

API Integration erişim portu.

Node Listesi (Node List)

Pod'ların hangi Kubernetes Worker sunucularında çalışacağını ayarlar. Kubernetes'teki NodeAffinity ayarını düzenler.

CPU

Pod'un kullanacağı maksimum CPU core sayısı bilgisidir.

Bellek (Memory)

Pod'un kullanacağı maksimum bellek değeridir.

Bellek Birimi (Memory Unit)

Bellek için gerekli olan değerin birimi seçilir; MB, GB. 

Ek Değişkenler (Additional Variables)

Pod içinde çalıştırılacak değişkenler ve değerleri tanımlanır.

Host Takma Adlar (Host Aliases)

Ağda bulunan IP adresleri bazen host isimleri arkasına konulabilir, bunlar eğer nameserver üzerinden çözülemiyorsa ya da host dosyasına tanımlanmamışsa, uygulama podlarının bu isimleri çözmesi için Host Alias tanımı yapılmalıdır. Her bir IP adresi için birden fazla domain ismi girilebilir.


Yukarıdaki adımlar tamamlandıktan ve Kubernetes üzerinde API Integration'a ait olan Pod'ların hazır durumda olduğundan emin olduktan sonra  Project → Geliştirme(Development)→ API Entegratörü (Integration)→ Görev Akışları (Task Flows) menüsünden kullanmaya başlayabilirsiniz.

Ek değişkenler alanındaki Java Options ayarını yapılandırırken aşağıdaki uyarı dikkate alınmalıdır;

-Xmx ve -Xms parametreleri kullanıldığında, otomatik yığın (heap) boyutlandırması devre dışı bırakılır.

Apinizer, JVM Yığın (Heap) değerlerini konteyner içinde çalıştığından konteynere verilen belleğin %75.0'ını kullanacak şekilde ayarlar.

UseContainerSupport varsayılan olarak aktif gelmektedir.

Eski bayraklar (flag) -XX: {Min | Max} RAMFraction artık kullanımdan kaldırıldı. 0.0 ve 100.0 arasında bir değer alan ve varsayılan olarak 75.0 olan yeni bir -XX: MaxRAMPercentage bayrağı (flag) vardır. Bu nedenle, 1 GB bellek sınırı varsa, JVM yığını (heap) varsayılan olarak ~ 750 MB ile sınırlıdır.

Detaylı bilgi için tıklayınız.


3.1.2) API Integration Kurulumu API Manager Üzerinden Yapılmayacaksa

Integration için bir namespace oluşturulur.

kubectl create ns apinizer-integration
CODE


Apinizer namespace'inde bulunan 'mongo-db-credentials' secret'ı apinizer-integration namespace'ine kopyalanır.

kubectl get secret mongo-db-credentials -n apinizer -o yaml | sed 's/namespace: apinizer/namespace: apinizer-integration/'  | kubectl create -f -
CODE

Integration için Deployment yaml oluşturulur.

vi integration-deployment.yaml
CODE


apiVersion: apps/v1
kind: Deployment
metadata:
  name: integration
  namespace: apinizer-integration
spec:
  replicas: 1
  selector:
    matchLabels:
      app: integration
      version: v1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 75%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: integration
        version: v1
    spec:
      containers:
      - env:
        - name: JAVA_OPTS
          value: -server -XX:MaxRAMPercentage=75.0 -Dlog4j.formatMsgNoLookups=true            
        - name: SPRING_DATA_MONGODB_URI
          valueFrom:
            secretKeyRef:
              key: dbUrl
              name: mongo-db-credentials
        - name: SPRING_DATA_MONGODB_DATABASE
          valueFrom:
            secretKeyRef:
              key: dbName
              name: mongo-db-credentials
        - name: SPRING_PROFILES_ACTIVE
          value: prod
        image: apinizercloud/integration:<APINIZER_VERSION>
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /apinizer/management/health
            port: 8092
            scheme: HTTP
          initialDelaySeconds: 120
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 30
        name: integration
        ports:
        - containerPort: 8092
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /apinizer/management/health
            port: 8092
            scheme: HTTP
          initialDelaySeconds: 120
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 30
        resources:
          limits:
            cpu: "1"
            memory: 1024Mi
        startupProbe:
          failureThreshold: 3
          httpGet:
            path: /apinizer/management/health
            port: 8092
            scheme: HTTP
          initialDelaySeconds: 91
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 30
      hostAliases:
      - ip: "<IP_ADDRESS>"
        hostnames:
        - "<DNS_ADDRESS_1>"
        - "<DNS_ADDRESS_2>"
YML
kubectl apply -f integration-deployment.yaml
POWERSHELL


Oluşturulan Podun durumunu görmek için, aşağıdaki Kubectl komutunu kullanabilirsiniz:

Pod durumu

kubectl get pods -n apinizer-integration 
POWERSHELL



Servis oluşturulmasında eğer Ingress kullanılmayacaksa tanım NodePort tipiyle oluşturulur ve pod'un cluster dışı erişimi ayarlanır.

Pod durumu

vi apinizer-integration-service.yaml 
POWERSHELL
apiVersion: v1
kind: Service
metadata:
  labels:
  name: integration
  namespace: apinizer-integration
spec:                  
  ports:
  - nodePort: 32090             
    port: 8092                  
    protocol: TCP
    targetPort: 8092            
  selector:
    app: integration
  type: NodePort 
YML



kubectl apply -f apinizer-integration-service.yaml
POWERSHELL


Oluşturulan API Integration Uygulamasının API Management Konsoluna Bağlanması

API Manager'da, Sistem Ayarları → Genel Ayarlar sayfasına gidin. "API Entegrasyon (Task Flow) Modülünün bilgilerini tanımlayın." bölümünden API Integration'ı etkinleştirin. Gerekli tanımları yaparak kurulumu tamamlayın.