Aracılığıyla paylaş


Azure Stack Hub'da yüksek kullanılabilirlik kubernetes kümesi dağıtma

Bu makalede, farklı fiziksel konumlarda birden çok Azure Stack Hub örneğine dağıtılan yüksek oranda kullanılabilir bir Kubernetes küme ortamı oluşturma adımları gösterilmektedir.

Bu çözüm dağıtım kılavuzunda şunların nasıl yapılacağını öğreneceksiniz:

  • AKS Altyapısını indirme ve hazırlama
  • AKS Altyapısı Yardımcısı VM'sine bağlanma
  • Kubernetes kümesi dağıtma
  • Kubernetes kümesine bağlanma
  • Azure Pipelines'ı Kubernetes kümesine bağlama
  • İzlemeyi yapılandırma
  • Uygulamayı dağıtma
  • Uygulamayı otomatik ölçeklendirme
  • Traffic Manager'ı Yapılandırma
  • Kubernetes’i yükseltme
  • Kubernetes'i ölçeklendirme

İpucu

Hibrit sütunlar Microsoft Azure Stack Hub, Azure'ın bir uzantısıdır. Azure Stack Hub, bulut bilişimin çevikliğini ve yeniliklerini şirket içi ortamınıza getirerek her yerde hibrit uygulamalar oluşturmanıza ve dağıtmanıza olanak tanıyan tek hibrit bulutu etkinleştirir.

Karma uygulama tasarımı makalesinde karma uygulamaları tasarlama, dağıtma ve çalıştırmaya yönelik yazılım kalitesi (yerleştirme, ölçeklenebilirlik, kullanılabilirlik, dayanıklılık, yönetilebilirlik ve güvenlik) yapı taşlarını inceler. Tasarımla ilgili dikkat edilmesi gerekenler, hibrit uygulama tasarımını iyileştirmeye ve üretim ortamlarındaki zorlukları en aza indirmeye yardımcı olur.

Önkoşullar

Bu dağıtım kılavuzuna başlamadan önce şunları yaptığınızdan emin olun:

AKS Altyapısını indirme ve hazırlama

AKS Altyapısı, Azure Stack Hub Azure Resource Manager uç noktalarına ulaşabilen herhangi bir Windows veya Linux konağından kullanılabilen bir ikili dosyadır. Bu kılavuzda, Azure Stack Hub'da yeni bir Linux (veya Windows) VM'sini dağıtma açıklanmaktadır. Daha sonra AKS Altyapısı Kubernetes kümelerini dağıttığında kullanılacaktır.

Not

Aks Altyapısını kullanarak Azure Stack Hub'da kubernetes kümesi dağıtmak için mevcut bir Windows veya Linux VM'yi de kullanabilirsiniz.

AKS Altyapısı için adım adım işlem ve gereksinimler burada belgelenmiştir:

AKS Altyapısı, Kubernetes kümelerini (Azure ve Azure Stack Hub'da) dağıtmaya ve çalıştırmaya (yönetilmeyen) yardımcı bir araçtır.

Azure Stack Hub'da AKS Altyapısının ayrıntıları ve farklılıkları burada açıklanmıştır:

Örnek ortam, AKS Altyapısı VM'sinin dağıtımını otomatikleştirmek için Terraform kullanır. Ayrıntıları ve kodu yardımcı GitHub deposunda bulabilirsiniz.

Bu adımın sonucu, Azure Stack Hub'da AKS Altyapısı yardımcı VM'sini ve ilgili kaynakları içeren yeni bir kaynak grubudur:

Azure Stack Hub'da AKS Altyapısı VM Kaynakları

Not

AKS Altyapısını bağlantısız havayla eşlenen bir ortamda dağıtmanız gerekiyorsa, daha fazla bilgi edinmek için Bağlantısı kesilmiş Azure Stack Hub Örnekleri'ni gözden geçirin.

Sonraki adımda, kubernetes kümesi dağıtmak için yeni dağıtılan AKS Altyapısı VM'sini kullanacağız.

AKS Altyapısı yardımcı VM'sine bağlanma

İlk olarak, önceden oluşturulmuş AKS Altyapısı yardımcı VM'sine bağlanmanız gerekir.

VM'nin bir Genel IP Adresi olmalıdır ve SSH (Bağlantı Noktası 22/TCP) üzerinden erişilebilir olmalıdır.

AKS Altyapısı VM'lerine Genel Bakış sayfası

İpucu

SSH kullanarak Linux VM'sine bağlanmak için Windows 10'da MobaXterm, puTTY veya PowerShell gibi tercih ettiğiniz bir aracı kullanabilirsiniz.

ssh <username>@<ipaddress>

Bağlandıktan sonra komutunu aks-engineçalıştırın. AKS Altyapısı ve Kubernetes sürümleri hakkında daha fazla bilgi edinmek için Desteklenen AKS Altyapısı Sürümleri'ne gidin.

aks-engine komut satırı örneği

Kubernetes kümesi dağıtma

AKS Altyapısı yardımcı VM'sinin kendisi henüz Azure Stack Hub'ımız üzerinde bir Kubernetes kümesi oluşturmadı. Kümeyi oluşturmak, AKS Altyapısı yardımcı VM'sinde gerçekleştirilen ilk eylemdir.

Adım adım işlem burada belgelenmiştir:

Komutun aks-engine deploy sonu ve önceki adımlardaki hazırlıklar, ilk Azure Stack Hub örneğinin kiracı alanına dağıtılan tam özellikli bir Kubernetes kümesidir. Kümenin kendisi VM'ler, yük dengeleyiciler, sanal ağlar, diskler gibi Azure IaaS bileşenlerinden oluşur.

Küme IaaS bileşenleri Azure Stack Hub portalı

  1. Azure yük dengeleyici (K8s API Uç Noktası) 2) Çalışan Düğümleri (Aracı Havuzu) 3) Ana Düğümler

Küme artık çalışır durumda ve sonraki adımda kümeye bağlanacağız.

Kubernetes kümesine bağlanma

Artık daha önce oluşturulmuş Kubernetes kümesine SSH (dağıtımın parçası olarak belirtilen SSH anahtarını kullanarak) veya (önerilen) aracılığıyla kubectl bağlanabilirsiniz. Kubernetes komut satırı aracı kubectlburada Windows, Linux ve macOS için kullanılabilir. Kümemizin ana düğümlerinde önceden yüklenmiş ve yapılandırılmıştır:

ssh azureuser@<k8s-master-lb-ip>

Ana düğümde kubectl yürütme

Yönetim görevleri için ana düğümün sıçrama kutusu olarak kullanılması önerilmez. Yapılandırma kubectl , hem ana düğümlerde .kube/config hem de AKS Altyapısı VM'sinde depolanır. Yapılandırmayı Kubernetes kümesine bağlantısı olan bir yönetici makinesine kopyalayabilir ve buradaki komutu kullanabilirsiniz kubectl . Dosya .kube/config daha sonra Azure Pipelines'da bir hizmet bağlantısı yapılandırmak için de kullanılır.

Önemli

Kubernetes kümenizin kimlik bilgilerini içerdiğinden bu dosyaları güvenli tutun. Dosyaya erişimi olan bir saldırgan, dosyaya yönetici erişimi elde etmek için yeterli bilgiye sahiptir. İlk .kube/config dosya kullanılarak yapılan tüm eylemler bir küme yöneticisi hesabı kullanılarak gerçekleştirilir.

Artık kullanarak kümenizin durumunu denetlemek için çeşitli komutları kubectl deneyebilirsiniz. Örnek komutlar şunlardır:

kubectl get nodes
NAME                       STATUS   ROLE     VERSION
k8s-linuxpool-35064155-0   Ready    agent    v1.14.8
k8s-linuxpool-35064155-1   Ready    agent    v1.14.8
k8s-linuxpool-35064155-2   Ready    agent    v1.14.8
k8s-master-35064155-0      Ready    master   v1.14.8
kubectl cluster-info
Kubernetes master is running at https://aks.***
CoreDNS is running at https://aks.***/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubernetes-dashboard is running at https://aks.***/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
Metrics-server is running at https://aks.***/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

Önemli

Kubernetes'in, ayrıntılı rol tanımları ve rol bağlamaları oluşturmanıza olanak tanıyan kendi Rol tabanlı Access Control (RBAC) modeli vardır. Bu, küme yöneticisi izinlerini vermek yerine kümeye erişimi denetlemenin tercih edilir yoludur.

Azure Pipelines'ı Kubernetes kümelerine bağlama

Azure Pipelines'ı yeni dağıtılan Kubernetes kümesine bağlamak için önceki adımda açıklandığı gibi kubeconfig (.kube/config) dosyasına ihtiyacımız vardır.

  • Kubernetes kümenizin ana düğümlerinden birine bağlanın.
  • Dosyanın içeriğini .kube/config kopyalayın.
  • Yeni bir "Kubernetes" hizmet bağlantısı oluşturmak için Azure DevOps > Proje Ayarları > Hizmet Bağlantıları'na gidin (Kimlik Doğrulama yöntemi olarak KubeConfig kullanın)

Önemli

Azure Pipelines'ın (veya derleme aracılarının) Kubernetes API'sine erişimi olmalıdır. Azure Pipelines'tan Azure Stack Hub Kubernetes kümesine İnternet bağlantısı varsa şirket içinde barındırılan bir Azure Pipelines Derleme Aracısı dağıtmanız gerekir.

Azure Pipelines için şirket içinde barındırılan Aracıları dağıtırken, Azure Stack Hub'da veya gerekli tüm yönetim uç noktalarına ağ bağlantısı olan bir makinede dağıtabilirsiniz. Buradaki ayrıntılara bakın:

Desen Dağıtımı (CI/CD) konuları bölümü, Microsoft tarafından barındırılan aracıları mı yoksa şirket içinde barındırılan aracıları mı kullanacağınızı anlamanıza yardımcı olan bir karar akışı içerir:

Şirket içinde barındırılan aracıların karar akışını gösteren diyagram.

Bu makaledeki tüm diyagramların Visio dosyasını indirin.

Bu örnek çözümde topoloji, her Azure Stack Hub örneğinde şirket içinde barındırılan bir derleme aracısı içerir. Aracı, Azure Stack Hub Yönetim Uç Noktalarına ve Kubernetes kümesi API uç noktalarına erişebilir.

Giden trafiği gösteren diyagram.

Bu makaledeki tüm diyagramların Visio dosyasını indirin.

Bu tasarım, uygulama çözümünden yalnızca giden bağlantılara sahip olmak için ortak bir mevzuat gereksinimini karşılar.

İzlemeyi yapılandırma

Kapsayıcılar için Azure İzleyici'yi kullanarak çözümdeki kapsayıcıları izleyebilirsiniz. Bu, Azure İzleyici'yi Azure Stack Hub'da AKS Altyapısı tarafından dağıtılan Kubernetes kümesine işaret eder.

Kümenizde Azure İzleyici'yi etkinleştirmenin iki yolu vardır. Her iki yöntem de Azure'da log analytics çalışma alanı ayarlamanızı gerektirir.

Örnek topolojide, işlemin otomatikleştirilmesine ve güncelleştirmelerin daha kolay yüklenmesine olanak tanıyan "Yöntem bir" kullanılır.

Sonraki adım için makinenizde bir Azure LogAnalytics Çalışma Alanı (Kimlik ve Anahtar), Helm (sürüm 3) gerekir kubectl .

Helm, macOS, Windows ve Linux üzerinde çalışan bir ikili olarak kullanılabilen bir Kubernetes paket yöneticisidir. helm.sh adresinden indirilebilir. Helm, komut için kubectl kullanılan Kubernetes yapılandırma dosyasını kullanır:

helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
helm repo update

helm install incubator/azuremonitor-containers \
--set omsagent.secret.wsid=<your_workspace_id> \
--set omsagent.secret.key=<your_workspace_key> \
--set omsagent.env.clusterName=<my_prod_cluster> \
--generate-name

Bu komut, Kubernetes kümenize Azure İzleyici aracısını yükler:

kubectl get pods -n kube-system
NAME                                       READY   STATUS
omsagent-8qdm6                             1/1     Running
omsagent-r6ppm                             1/1     Running
omsagent-rs-76c45758f5-lmc4l               1/1     Running

Kubernetes kümenizdeki Operations Management Suite (OMS) Aracısı, izleme verilerini Azure Log Analytics Çalışma Alanınıza gönderir (giden HTTPS kullanarak). Artık Azure Stack Hub'da Kubernetes kümeleriniz hakkında daha derin içgörüler elde etmek için Azure İzleyici'yi kullanabilirsiniz. Bu tasarım, uygulamanızın kümeleriyle otomatik olarak dağıtılabilen analizin gücünü göstermenin güçlü bir yoludur.

Azure İzleyici'de Azure Stack Hub kümeleri

Azure İzleyici kümesi ayrıntıları

Önemli

Azure İzleyici herhangi bir Azure Stack Hub verisi göstermiyorsa, bir Azure Log Analytics çalışma alanına AzureMonitor-Containers çözümü ekleme yönergelerini dikkatle izlediğinize emin olun.

Uygulamayı dağıtma

Örnek uygulamamızı yüklemeden önce Kubernetes kümemizde nginx tabanlı Giriş denetleyicisini yapılandırmaya yönelik başka bir adım vardır. Giriş denetleyicisi, kümemizdeki trafiği konağa, yola veya protokole göre yönlendirmek için katman 7 yük dengeleyici olarak kullanılır. Nginx-ingress, Helm Grafiği olarak kullanılabilir. Ayrıntılı yönergeler için Helm Chart GitHub deposuna bakın.

Örnek uygulamamız, önceki adımda azure izleme aracısı gibi bir Helm Grafiği olarak da paketlenir. Bu nedenle, uygulamayı Kubernetes kümemize dağıtmak kolaydır. Helm Grafiği dosyalarını yardımcı GitHub deposunda bulabilirsiniz

Örnek uygulama, iki Azure Stack Hub örneğinin her birinde bir Kubernetes kümesine dağıtılan üç katmanlı bir uygulamadır. Uygulama bir MongoDB veritabanı kullanır. Verilerin birden çok örnek arasında çoğaltılması hakkında daha fazla bilgiyi Veri ve Depolama ile ilgili dikkat edilmesi gerekenler düzeninde bulabilirsiniz.

Uygulama için Helm Grafiği'ni dağıttığınızda, uygulamanızın üç katmanının da tek bir pod ile dağıtımlar ve durum bilgisi olan kümeler (veritabanı için) olarak gösterildiğini görürsünüz:

kubectl get pod,deployment,statefulset
NAME                                         READY   STATUS
pod/ratings-api-569d7f7b54-mrv5d             1/1     Running
pod/ratings-mongodb-0                        1/1     Running
pod/ratings-web-85667bfb86-l6vxz             1/1     Running

NAME                                         READY
deployment.extensions/ratings-api            1/1
deployment.extensions/ratings-web            1/1

NAME                                         READY
statefulset.apps/ratings-mongodb             1/1

Hizmetlerde, nginx tabanlı Giriş Denetleyicisini ve genel IP adresini bulacaksınız:

kubectl get service
NAME                                         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)
kubernetes                                   ClusterIP      10.0.0.1       <none>        443/TCP
nginx-ingress-1588931383-controller          LoadBalancer   10.0.114.180   *public-ip*   443:30667/TCP
nginx-ingress-1588931383-default-backend     ClusterIP      10.0.76.54     <none>        80/TCP
ratings-api                                  ClusterIP      10.0.46.69     <none>        80/TCP
ratings-web                                  ClusterIP      10.0.161.124   <none>        80/TCP

"Dış IP" adresi bizim "uygulama uç noktamızdır". Kullanıcılar uygulamayı açmak için bu şekilde bağlanır ve traffic manager'ı yapılandırma adımımızın uç noktası olarak da kullanılır.

Uygulamayı otomatik ölçeklendirme

İsteğe bağlı olarak Yatay Pod Otomatik Ölçeklendiricisi'ni CPU kullanımı gibi belirli ölçümlere göre ölçeği artıracak veya azaltacak şekilde yapılandırabilirsiniz. Aşağıdaki komut, ratings-web dağıtımı tarafından denetlenen podların 1 ile 10 arası çoğaltmasını koruyan bir Yatay Pod Otomatik Ölçeklendiricisi oluşturur. HPA, tüm Pod'larda ortalama CPU kullanımını %80 oranında korumak için çoğaltma sayısını (dağıtım aracılığıyla) artırır ve azaltır:

kubectl autoscale deployment ratings-web --cpu-percent=80 --min=1 --max=10

Şu komutu çalıştırarak otomatik ölçeklendiricinin geçerli durumunu de kontrol edebilirsiniz:

kubectl get hpa
NAME          REFERENCE                      TARGET    MINPODS   MAXPODS   REPLICAS   AGE
ratings-web   Deployment/ratings-web/scale   0% / 80%  1         10        1          18s

Traffic Manager'ı Yapılandırma

Uygulamanın iki (veya daha fazla) dağıtımı arasında trafiği dağıtmak için Azure Traffic Manager'ı kullanacağız. Azure Traffic Manager, Azure'da DNS tabanlı bir trafik yük dengeleyicidir.

Not

Traffic Manager, bir trafik yönlendirme yöntemine ve uç noktaların durumuna bağlı olarak istemci isteklerini en uygun hizmet uç noktasına yönlendirmek için DNS kullanır.

Azure Traffic Manager'ı kullanmak yerine şirket içinde barındırılan diğer genel yük dengeleme çözümlerini de kullanabilirsiniz. Örnek senaryoda, trafiği uygulamamızın iki örneği arasında dağıtmak için Azure Traffic Manager'ı kullanacağız. Azure Stack Hub örneklerinde aynı veya farklı konumlarda çalışabilirler:

Şirket içi trafik yöneticisini gösteren diyagram.

Bu makaledeki tüm diyagramların Visio dosyasını indirin.

Azure'da Traffic Manager'ı uygulamamızın iki farklı örneğine işaret etmek üzere yapılandırıyoruz:

TM uç nokta profili

Gördüğünüz gibi iki uç nokta, önceki bölümde dağıtılan uygulamanın iki örneğine işaret eder.

Bu noktada:

  • Bir giriş denetleyicisi de dahil olmak üzere Kubernetes altyapısı oluşturulmuştur.
  • Kümeler iki Azure Stack Hub örneğine dağıtılmıştır.
  • İzleme yapılandırıldı.
  • Azure Traffic Manager, iki Azure Stack Hub örneğinde trafiğin yükünü dengeler.
  • Bu altyapının yanı sıra örnek üç katmanlı uygulama Helm Grafikleri kullanılarak otomatik bir şekilde dağıtıldı.

Çözüm artık çalışır durumda olmalı ve kullanıcılar tarafından erişilebilir olmalıdır!

Ayrıca, sonraki iki bölümde ele alınacak dağıtım sonrası operasyonel konular da ele alınmıştır.

Kubernetes’i yükseltme

Kubernetes kümesini yükseltirken aşağıdaki konuları göz önünde bulundurun:

Daha yeni temel işletim sistemi görüntüleri güvenlik ve çekirdek güncelleştirmeleri içerir. Daha yeni Kubernetes Sürümleri ve İşletim Sistemi Görüntülerinin kullanılabilirliğini izlemek küme operatörünün sorumluluğundadır. operatör, AKS Altyapısı'nı kullanarak bu yükseltmeleri planlamalı ve yürütmelidir. Temel işletim sistemi görüntülerinin Azure Stack Hub Operatörü tarafından Azure Stack Hub Market'ten indirilmesi gerekir.

Kubernetes'i ölçeklendirme

Ölçek, AKS Altyapısı kullanılarak düzenleyebileceğiniz başka bir 2. Gün işlemidir.

Ölçek komutu, yeni bir Azure Resource Manager dağıtımı için giriş olarak küme yapılandırma dosyanızı (apimodel.json) çıkış dizininde yeniden kullanır. AKS Altyapısı, belirli bir aracı havuzunda ölçeklendirme işlemini yürütür. Ölçeklendirme işlemi tamamlandığında AKS Altyapısı, aynı apimodel.json dosyasındaki küme tanımını güncelleştirir. Küme tanımı, güncelleştirilmiş, geçerli küme yapılandırmasını yansıtmak için yeni düğüm sayısını yansıtır.

Sonraki adımlar