magento2 | varnish deploy k8s & jmeter

Tanım

Bu içerik magento2 ürününü helm kullanarak kubernetes üzerinde uygulamaya alma konusunda notlar içermektedir. Bu içerik, uygulama sonrası performans kiti ile uygulamayı test etme ve varnish cache ürününü kurgulamayı amaçlamaktadır,

Gereksinimler;

Sırası ile; helm kullanarak magento2 ayağa kaldıracağız, sonrasında magento2 erişimi sağlanılarak içerisinde cache olarak varnish kullanacağımızı belirtip vlc dosyasını elde edeceğiz, son olarak yine helm kullanarak varnish ayağa kaldıracağız ve topolojimiz içerisindeki yapıyı kurgulayacağız,

Kurgulanacak topoloji aşağıdaki gibidir, mevcut topolojide ingress kullanılmaktadır,

Başlangıç

Magento2, bitnami chartları arasında bulunmakta, varsayılan olarak kurulumda magento2 için mariadb ve elasticsearch deploy edilmektedir, kurulum için erişim sağlayabilirsiniz; 

https://bitnami.com/stack/magento/helm

https://github.com/bitnami/charts/tree/master/bitnami/magento/#installing-the-chart

Kurulum için bitnami reposunu eklemeniz ve magento kurulumu için aşağıdaki komut satırını yazmanız yeterli, fakat;

$ helm repo add bitnami https://charts.bitnami.com/bitnami

$ helm install my-release bitnami/magento

Kurulum sırasında uygulamanın secretlarını belirleyebilirsiniz (app-db vb.);

$ helm install my-release \

  –set magentoUsername=admin,magentoPassword=password, mariadb.auth.rootPassword=secretpassword bitnami/magento

Veya values.yaml dosyasını temin edip düzenlemeleri gerçekleştirerek, bu dosyayıda gösterebilirsiniz;

$ helm install my-release -f values.yaml bitnami/magento

Values.yaml dosyası için; https://github.com/bitnami/charts/blob/master/bitnami/magento/values.yaml 

Makale sırasında kullanılan tüm bilgileri GitHub reposu üzerinden paylaşıyor olacağım, private bir repo kullanılacaktır, erişim isterseniz yorum olarak belirtebilir veya mail adresinizi iletebilirsiniz

Biz values.yaml dosyasını editleyeceğiz, aşağıdaki maddeleri düzenliyorum;

magentoHost: “customer5.local”
magentoUsername: admin
magentoPassword: “Test1234”
magentoEmail: mert@mnm.com.tr
magentoFirstName: “Mert”
magentoLastName: “Yakan”
magentoUseHttps: true
magentoUseSecureAdmin: true
Mariadb:auth:    rootPassword: “!thisrootpassword!”
password: “!thisdbpassword!”
Service:  port: 80
httpsPort: 443
Ingress:  enabled: true
hostname: customer5.local

Helm ile magento2’yi deploy edelim,

Öncesinde yeni bir namespace yaratınız ve aşağıdaki komutları kendinize göre uyarlayınız;

– – –

kubectl create ns customer5

kubectl config set-context kubernetes-admin@kubernetes —namespace=customer5

helm install customer5 -f values.yaml bitnami/magento 

Uygulamaya erişmek için servis kontrollerini yapabiliriz, 

Servisleri kontrol ettiğimizde external ip olarak X.X.X.X (sizde gözüken ip adresi) gözlemliyoruz, host dosyanıza bu kaydı ekleyin (X.X.X.X – customer5.local ). External ip almasını isterseniz, loadbalancer ürünü kullanmalısınız (örn: metal loadbalancer) 

Uygulamanın önünde cache mekanizması olarak varnish kullanacağız, bunun için magento içerisinde vlc dosyasını temin etmemiz gerekiyor,

NAME                                        TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
customer5-elasticsearch-coordinating-only   ClusterIP      10.103.142.186<none>        9200/TCP,9300/TCP            20m
customer5-elasticsearch-data                ClusterIP      10.100.211.60    <none>        9200/TCP,9300/TCP            20m
customer5-elasticsearch-master              ClusterIP      10.97.253.68     <none>        9200/TCP,9300/TCP            20m
customer5-magento                           LoadBalancer   10.97.66.232     X.X.X.X80:31479/TCP,443:30295/TCP   20m
customer5-mariadb                           ClusterIP      10.102.16.135    <none>        3306/TCP                     20m
X.X.X.X bölümünde ip adresi görebilmelisiniz,

Vcl için; 

STORES > CONFIGURATION > ADVANCED > SYSTEM > FULL PAGE CACHE

Export VCL > Export VCL for Varnish6 

Varnish

Varnish chartı ve values dosyalarını GitHub adresine yükledim, private bir repo kullanılacaktır, erişim isterseniz yorum olarak belirtebilir veya mail adresinizi iletebilirsiniz

m2-varnish.yaml dosyamı editliyorum;

25: ingress kullanılabilmesi için, annotations eklememiz gerekiyor;

ingress:
  enabled: true
  className: "" # nginx
  annotations: |
    kubernetes.io/ingress.class: "nginx"
    nginx.org/fastcgi-buffer-size: 32k
    nginx.org/fastcgi-buffers: 16 16k
    nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
    nginx.org/proxy-buffer-size: 128k
    nginx.org/proxy-buffers: 4 256k

  extraTls:
  - hosts:
      - customer5.local
    secretName: tls-secret
  extraHosts: 
    - name: customer5.local

—-

97: default_vcl kısmını deploy ettiğimiz magentodan indirdiğimiz vcl dosyası ile değiştireceğiz,

342: vcl dosyasının bittiği yerde extraDeploy devam etmeli,

—-

100: Son olarak eklediğimiz vcl dosyası içerisinde değişiklikler yapacağız,

    default_vcl: |
# VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 6
vcl 4.0;

import std;
# The minimal Varnish version is 6.0
# For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

backend default {
    .host = "customer5-magento";
    .port = "80";
    .first_byte_timeout = 600s;
    .probe = {
        .url = "/pub/health_check.php";
        .timeout = 2s;
        .interval = 5s;
        .window = 10;
        .threshold = 5;
   }
}

acl purge {
    "customer5-magento";
}

—-

326

          if (std.healthy(req.backend_hint)) {
              if (obj.ttl + 300s > 0s) {

Helm ile varnishi deploy edelim;

Deploy öncesinde dry run test edebilirsiniz, 

—-

helm upgrade –install customer5-varnish varnish -f varnish-values/varnish-values-secret.yaml -f varnish-values/m2-varnish.yaml 

Deploy sonrası ingress’e adresin geldiğini görebiliriz,

kubectl get ingress customer5-varnish

NAME              CLASS    HOSTS           ADDRESS  PORTS       AGE
customer5-varnish <none>   customer2.local X.X.X.X  80, 443   	59s

Şimdi host dosyanızı yeniden düzenleyin customer5.local’in X.X.X.X olması gerekmekte;

https://customer5.local adresine gittiğimde artık ingress kullanarak varnish’e erişiyorum, 

Varnish cache’inde tutmadığı bir veri olursa trafiği sunucuya yönlendiriyor, sizde test edebilirsiniz ( magento’nun loglarını izleyin ve bir get gönderin, değişiklik yapmadan yeniden istediğinizde logda herhangi bir değişiklik gözlemlemeyeceksiniz. 

Jmeter

Bu bölümde k8s üzerinde kurguladığımız magento2’yi jmeter ile test edeceğiz,

Kısaca değinmek gerekirse Jmeter java tabanlı bir load test uygulamasıdır, jmeter konusunda kaynak için; https://gokhansengun.com/jmeter-nedir-ve-ne-ise-yarar/ serisini inceleyebilirsiniz,

Magento2 için performance-toolkit adı verilen hazır templateler bulunmakta;

Jmeter uygulamasının yüklü olduğunu varsayıyorum ve benchmark.jmx dosyasını jmeterda açıyoruz,

Varsayılan olarak birden fazla senaryoya sahip 

  • İstek listesine ekleme,
  • Sepete ekleme,
  • vb. vb. Site üzerinde yapılması gereken tüm seneryolar girili; 

Fakat performance-toolki’i kullanabilmemiz için  jmeter üzerinde 1 eklenti eklemelisiniz, JSON… 

Config on Magento2 for Jmeter

Jmeter testi için magento2 pod’u üzerinde ayarların yapılması, magento2’ye sample data import etmesi ve site üzerinde birkaç ayar yapılması gerekmekte,

Magento poduna girelim,

kubectl exec -it customer5-magento-7ddf6cb998-5ppbj — bash

cd bitnami/magento/

bitnami/magento$ magento setup:performance:generate-fixtures -s setup/performance-toolkit/profiles/ce/small.xml

magento indexer:reindex 


customer5.local de gelen kategori ve resimleri gözlemleyebilirsiniz,

Magento2’yi konfigüre etmemiz gerekiyor, bunun için admin panele eriştikten sonra;

  • Stores > Configuration > General > Web > Search Engine Optimization
    Use Web Server Rewrites “Yes”
  • Stores > Configuration > Catalog > Catalog > Storefront
    Use Flat Catalog Category “Yes”
    Use Flat Catalog Product “Yes”
  • Stores > Configuration > Advanced > Admin > Security
    Admin Account Sharing “Yes”
  • Stores > Configuration > Advanced > Developer
    Set Merge JavaScript Files to “Yes.”
    Set Merge CSS Files to “Yes.”
  • System > Cache Management
    Select all cache types and Refresh the caches by clicking the Submit button.
  • System > Index Management
    Set all to the “Update by Schedule” mode by selecting all and clicking the Submit button.

Jmeter’a tekrar dönüş Benchmark menüsüne tıklıyoruz; 

Admin kullanıcısı, şifresi, frontend kullanıcı sayılı, admin kullanıcı sayısı gibi bilgilerin girilmesi gerekmektedir,

Aynı zamanda jmeter için hazırladığınız jmx dosyasını Jenkins’e bağlayarak sürece dahil edebilirsiniz,

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.