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.X | 80:31479/TCP,443:30295/TCP | 20m |
customer5-mariadb | ClusterIP | 10.102.16.135 | <none> | 3306/TCP | 20m |
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,