Apinizer Offline Versiyon Yükseltme
Bu kılavuz, internete erişimi olmayan Kubernetes Clusterlarında Apinizer imajlarının nasıl versiyon yükseltileceğini açıklamaktadır. İşlem adımları, Docker ve Kubernetes ortamlarında güncelleme yapmayı gerektiren offline sistemler için özelleştirilmiştir.
Örnek senaryo Ubuntu 22.04 işletim sistemine sahip sunucular üzerinde gerçekleştirilmiştir.
Bu işlem gerçekleştirilirken 2 ana yöntem vardır:
- İnterneti olan bir sunucuya imaj dosyalarını çekmek ve sonra bir şekilde Kubernetes cluster'ına bu imajları aktarmak
- Kubernetes cluster'ın kullanacağı bir repository uygulaması kullanmak
1) İmajların sunucuya aktarılması
1.1) Online Sunucudan İmajların Çekilmesi ve Offline Sunuculara Aktarılması
İnternete ve offline makinelere erişimi olan bir makine varsa aşağıdaki adımlar gerçekleştirilebilir.
1.1.1) docker kullanılacaksa:
# Online sunucudan yükseltme için gerekli olan tüm imajlar çekilir
docker pull apinizercloud/manager:<NEW_VERSION>
docker pull apinizercloud/worker:<NEW_VERSION>
docker pull apinizercloud/cache:<NEW_VERSION>
docker pull apinizercloud/portal:<NEW_VERSION>
docker pull apinizercloud/integration:<NEW_VERSION>
# İlgili imajları offline sunuculara aktarmak için, online sunucuda imajlar `.tar` formatında kaydedilir
docker save apinizercloud/manager:<NEW_VERSION> -o apinizercloud-manager.<NEW_VERSION>.tar
docker save apinizercloud/worker:<NEW_VERSION> -o apinizercloud-worker.<NEW_VERSION>.tar
docker save apinizercloud/cache:<NEW_VERSION> -o apinizercloud-cache.<NEW_VERSION>.tar
docker save apinizercloud/portal:<NEW_VERSION> -o apinizercloud-portal.<NEW_VERSION>.tar
docker save apinizercloud/integration:<NEW_VERSION> -o apinizercloud-integration.<NEW_VERSION>.tar
# Imajların her biri offline sunucuya aktarılır
scp apinizercloud-*.tar <OFFLINE_MACHINE_USER>@<OFFLINE_MACHINE_IP>:<TARGET_DIRECTORY>
# Her bir offline sunucuda imajlar yüklenilir
docker load -i apinizercloud-manager.<NEW_VERSION>.tar
docker load -i apinizercloud-worker.<NEW_VERSION>.tar
docker load -i apinizercloud-cache.<NEW_VERSION>.tar
docker load -i apinizercloud-portal.<NEW_VERSION>.tar
docker load -i apinizercloud-integration.<NEW_VERSION>.tar
1.1.2) containerd kullanılacaksa:
# Online sunucudan yükseltme için gerekli olan tüm imajlar çekilir
ctr image pull docker.io/apinizercloud/manager:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/worker:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/cache:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/portal:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/integration:<NEW_VERSION>
# İlgili imajları offline sunuculara aktarmak için, online sunucuda imajlar `.tar` formatında kaydedilir
ctr images export apinizercloud-manager.tar docker.io/apinizercloud/manager:<NEW_VERSION>
ctr images export apinizercloud-worker.tar docker.io/apinizercloud/worker:<NEW_VERSION>
ctr images export apinizercloud-cache.tar docker.io/apinizercloud/cache:<NEW_VERSION>
ctr images export apinizercloud-portal.tar docker.io/apinizercloud/portal:<NEW_VERSION>
ctr images export apinizercloud-integration.tar docker.io/apinizercloud/integration:<NEW_VERSION>
# Imajların her biri offline sunucuya aktarılır
scp docker.io-apinizercloud-*.tar <OFFLINE_MACHINE_USER>@<OFFLINE_MACHINE_IP>:<TARGET_DIRECTORY>
# Her bir offline sunucuda imajlar yüklenilir
ctr images import apinizercloud-manager.tar
ctr images import apinizercloud-worker.tar
ctr images import apinizercloud-cache.tar
ctr images import apinizercloud-portal.tar
ctr images import apinizercloud-integration.tar
1.2) Yerel İmaj Registry ya da Repository Bulunuyorsa
Farklı imaj registry ve repository'leri farklı yöntemlerle çalışsa da çoğunda çekilen imajlar tag'lenerek uygulamaya gönderilmelidir.
Eğer uygulama reverse proxy şeklinde kullanılıyorsa hub.docker.com adresindeki apinizercloud reposuna yönelik gerekli tanımın verilmesi yeterli olmaktadır.
1.2.1) docker kullanılacaksa:
# Gerekli tüm imajlar çekilir
docker pull apinizercloud/manager:<NEW_VERSION>
docker pull apinizercloud/worker:<NEW_VERSION>
docker pull apinizercloud/cache:<NEW_VERSION>
docker pull apinizercloud/portal:<NEW_VERSION>
docker pull apinizercloud/integration:<NEW_VERSION>
# Çekilen imajlar, gerekli tag bilgileri ile yeniden etiketlenir
docker tag apinizercloud/manager:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/manager:<NEW_VERSION>
docker tag apinizercloud/worker:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/worker:<NEW_VERSION>
docker tag apinizercloud/cache:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/cache:<NEW_VERSION>
docker tag apinizercloud/portal:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/portal:<NEW_VERSION>
docker tag apinizercloud/integration:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/integration:<NEW_VERSION>
# Kurumun yerel imaj registry’sine imajlar aktarılır:
docker push <YEREL_REGISTRY>/apinizercloud/manager:<NEW_VERSION>
docker push <YEREL_REGISTRY>/apinizercloud/worker:<NEW_VERSION>
docker push <YEREL_REGISTRY>/apinizercloud/cache:<NEW_VERSION>
docker push <YEREL_REGISTRY>/apinizercloud/portal:<NEW_VERSION>
docker push <YEREL_REGISTRY>/apinizercloud/integration:<NEW_VERSION>
1.2.2) containerd kullanılacaksa:
# Gerekli tüm imajlar çekilir
ctr image pull docker.io/apinizercloud/manager:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/worker:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/cache:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/portal:<NEW_VERSION>
ctr image pull docker.io/apinizercloud/integration:<NEW_VERSION>
# Çekilen imajlar, gerekli tag bilgileri ile yeniden etiketlenir
ctr image tag docker.io/apinizercloud/manager:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/manager:<NEW_VERSION>
ctr image tag docker.io/apinizercloud/worker:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/worker:<NEW_VERSION>
ctr image tag docker.io/apinizercloud/cache:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/cache:<NEW_VERSION>
ctr image tag docker.io/apinizercloud/portal:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/portal:<NEW_VERSION>
ctr image tag docker.io/apinizercloud/integration:<NEW_VERSION> <YEREL_REGISTRY>/apinizercloud/integration:<NEW_VERSION>
# Kurumun yerel imaj registry’sine imajlar aktarılır:
ctr images push <YEREL_REGISTRY>/apinizercloud/manager:<NEW_VERSION>
ctr images push <YEREL_REGISTRY>/apinizercloud/worker:<NEW_VERSION>
ctr images push <YEREL_REGISTRY>/apinizercloud/cache:<NEW_VERSION>
ctr images push <YEREL_REGISTRY>/apinizercloud/portal:<NEW_VERSION>
ctr images push <YEREL_REGISTRY>/apinizercloud/integration:<NEW_VERSION>
2) MongoDB Yedeğinin Alınması
Yedek alımı, veri kaybını önlemek için her zaman güncelleme sürecinin ilk adımı olarak yapılmalıdır. Bu işlem mongoDb primary sunucusunda yapılmalıdır.
# Yedek alma
sudo mongodump --host <IP_ADDRESS> --port=25080 --username=apinizer --password=<PASSWORD> --authenticationDatabase=admin --gzip --archive=<BACKUP_DIRECTORY>/apinizer-backup<BACKUP_VERSION>.archive
3) Apinizer Manager Uygulamasının Güncellenmesi
Apinizer Worker ve Cache'i güncellemeden önce Apinizer Manager'ın güncellenmesi gerekmektedir. Bunun nedeni, Worker ve Cache'in veritabanı ile ilgili güncellemelerini Manager'ın veritabanına yaptığı ayarlardan sonra almasıdır. Eğer Worker ve Cache, Manager’dan önce güncellenirse, bu durum Worker ve Cache tarafında sorunlara yol açabilir. Bu nedenle, Manager güncellendikten sonra Kubernetes üzerindeki Manager podlarının "ready" durumuna geldiğinden emin olunmalı ve ardından diğer bileşenler güncellenmelidir.
Bu ve sonraki adımlar, Kubernetes Control Plane görevine sahip sunucular üzerinde çalıştırılır.
# Deployment'a ait bilgiler kontrol edilir
kubectl get deployments -Ao wide
# Manager'ın deployment imajları güncellenir.
kubectl set image deployment/<MANAGER_DEPLOYMENT_NAME> -n <NAMESPACE> <MANAGER_CONTAINER_NAME>=apinizercloud/manager:<NEW_VERSION>
# Pod'un READY olması beklenir, pod durumu takip edilir
kubectl get pods -A -w
Deployment imajı yerel registry üzerinde bulunuyorsa
# İmaj güncellenirken registy bağlantısı eklenir.
kubectl set image deployment/<MANAGER_DEPLOYMENT_NAME> -n <NAMESPACE> <MANAGER_CONTAINER_NAME>=<YEREL_REGISTRY>/apinizercloud/manager:<NEW_VERSION>
4) Apinizer Worker ve Cache Uygulamalarının Güncellenmesi
Apinizer Manager uygulamasının imajının güncellendiğinden emin olduktan sonra Apinizer Worker ve Cache uygulamaları güncellenir.
kubectl set image deployment/<WORKER_DEPLOYMENT_NAME> -n <NAMESPACE> <WORKER_CONTAINER_NAME>=apinizercloud/worker:<NEW_VERSION>
kubectl set image deployment/<CACHE_DEPLOYMENT_NAME> -n <NAMESPACE> <CACHE_CONTAINER_NAME>=apinizercloud/worker:<NEW_VERSION>
# Pod'ların READY olması beklenir, pod durumu takip edilir
kubectl get pods -n <DEPLOYMENT_NAMESPACE> -w
Deployment imajları yerel registry/repository üzerinde bulunuyorsa
# İmaj güncellenirken registry/repository bağlantısı eklenir.
kubectl set image deployment/<WORKER_DEPLOYMENT_NAME> -n <NAMESPACE> <WORKER_CONTAINER_NAME>=<YEREL_REGISTRY>/apinizercloud/worker:<NEW_VERSION>
kubectl set image deployment/<CACHE_DEPLOYMENT_NAME> -n <NAMESPACE> <CACHE_CONTAINER_NAME>=<YEREL_REGISTRY>/apinizercloud/cache:<NEW_VERSION>
5) Apinizer Portal ve Integration Uygulamalarının Güncellenmesi
Apinizer Portal ve Integration'da benzer şekilde güncellenebilmektedir.
kubectl set image deployment/<PORTAL_DEPLOYMENT_NAME> -n <NAMESPACE> <PORTAL_CONTAINER_NAME>=apinizercloud/portal:<NEW_VERSION>
kubectl set image deployment/<INTEGRATION_DEPLOYMENT_NAME> -n <NAMESPACE> <INTEGRATION_CONTAINER_NAME>=apinizercloud/integration:<NEW_VERSION>
# Pod'ların READY olması beklenir, pod durumu takip edilir
kubectl get pods -n <DEPLOYMENT_NAMESPACE> -w
Deployment imajları yerel registry/repository üzerinde bulunuyorsa
# İmaj güncellenirken registry/repository bağlantısı eklenir.
kubectl set image deployment/<PORTAL_DEPLOYMENT_NAME> -n <NAMESPACE> <PORTAL_CONTAINER_NAME>=<YEREL_REGISTRY>/apinizercloud/portal:<NEW_VERSION>
kubectl set image deployment/<INTEGRATION_DEPLOYMENT_NAME> -n <NAMESPACE> <INTEGRATION_CONTAINER_NAME>=<YEREL_REGISTRY>/apinizercloud/integration:<NEW_VERSION>