Azure Stack hub 'da yüksek kullanılabilirliğe sahip bir 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 işleminin nasıl yapılacağı gösterilir.

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

  • AKS altyapısını indirme ve hazırlama
  • aks motoru yardımcısı VM 'sine Bağlan
  • Kubernetes kümesi dağıtma
  • kubernetes kümesine Bağlan
  • kubernetes kümesine Azure Pipelines Bağlan
  • İzlemeyi yapılandırma
  • Uygulamayı dağıtma
  • Otomatik ölçeklendirme uygulaması
  • Traffic Manager'ı Yapılandırma
  • Kubernetes’i yükseltme
  • Kubernetes 'i ölçeklendirme

İpucu

karma değer Microsoft Azure yığın Hub 'ı bir Azure uzantısıdır. Azure Stack hub, bulut bilgi işlemin çevikliğini ve yeniliklerini şirket içi ortamınıza sunarak, karma uygulamaları her yerde derleyip dağıtmanıza imkan tanıyan tek karma bulutu etkinleştirir.

Karma uygulama tasarımı ile ilgili önemli noktalar , karma uygulamalar tasarlamak, dağıtmak ve çalıştırmak için yazılım kalitesinin (yerleştirme, ölçeklenebilirlik, kullanılabilirlik, dayanıklılık, yönetilebilirlik ve güvenlik) aynı şekilde gözden geçirmeleri inceler. Tasarım konuları karma uygulama tasarımını iyileştirirken, üretim ortamlarındaki zorlukları en aza indirmeyle ilgili olarak size yardımcı olur.

Önkoşullar

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

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

aks motoru, Azure Stack Hub Azure Resource Manager uç noktalarına ulaşan tüm Windows veya Linux ana bilgisayarlardan kullanılabilecek bir ikili dosyaysa. bu kılavuzda, Azure Stack Hub 'ında yeni bir Linux (veya Windows) VM dağıtımı açıklanmaktadır. AKS altyapısı Kubernetes kümelerini dağıttığında daha sonra kullanılacaktır.

Not

ayrıca, aks altyapısını kullanarak bir kubernetes kümesini Azure Stack Hub 'a dağıtmak için mevcut bir Windows veya Linux sanal makinesini kullanabilirsiniz.

AKS altyapısının adım adım işlemi ve gereksinimleri burada belgelenmiştir:

AKS motoru, (yönetilmeyen) Kubernetes kümelerini (Azure 'da ve Azure Stack hub 'da) dağıtmak ve çalıştırmak için yardımcı bir araçtır.

Azure Stack hub 'ındaki AKS altyapısının ayrıntıları ve farklılıkları aşağıda açıklanmıştır:

Örnek ortam, AKS motoru VM 'sini otomatik hale getirmek için Terrayform kullanacaktır. ayrıntılar ve kodu ek GitHub depoyabulabilirsiniz.

Bu adımın sonucu, AKS altyapısı Yardımcısı VM 'sini ve ilgili kaynakları içeren Azure Stack hub 'ında yeni bir kaynak grubudur:

Azure Stack hub 'da AKS motoru VM kaynakları

Not

AKS altyapısını bağlantısız bir AIR-gapped ortamında dağıtmanız gerekiyorsa, daha fazla bilgi edinmek için bağlantısı kesilen Azure Stack hub örneklerini gözden geçirin.

Bir sonraki adımda, bir Kubernetes kümesi dağıtmak için yeni dağıtılan AKS altyapısı sanal makinesini kullanacağız.

aks motoru yardımcısı VM 'sine Bağlan

Önce, önceden oluşturulmuş AKS altyapısı Yardımcısı VM 'sine bağlanmanız gerekir.

VM 'nin genel bir IP adresi olmalıdır ve SSH (bağlantı noktası 22/TCP) üzerinden erişilebilir olması gerekir.

AKS motoru VM 'ye Genel Bakış sayfası

İpucu

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

ssh <username>@<ipaddress>

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

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

Kubernetes kümesi dağıtma

AKS motor Yardımcısı VM 'sinin kendisi Azure Stack hub 'imizde bir Kubernetes kümesi oluşturmadı. Kümeyi oluşturmak, AKS motoru Yardımcısı VM 'sinde gerçekleştirilecek ilk eylemdir.

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

Komutun nihai sonucu aks-engine deploy ve önceki adımlarda bulunan hazırlıklar, ilk Azure Stack hub örneğinin kiracı alanına dağıtılan tam özellikli bir Kubernetes kümesidir. Küme, VM 'Ler, yük dengeleyiciler, sanal ağlar, diskler vb. gibi Azure IaaS bileşenlerinden oluşur.

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

  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 durumdadır ve bir sonraki adımda bu sunucuya bağlanacağız.

kubernetes kümesine Bağlan

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

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

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

Yönetim görevleri için ana düğümü bir sıçrama kutusu olarak kullanmanız önerilmez. kubectlYapılandırma, .kube/config ana düğümlerde ve aks motoru VM 'sinde depolanır. Yapılandırmayı Kubernetes kümesine bağlantısı olan bir yönetim makinesine kopyalayabilir ve kubectl komutunu burada kullanabilirsiniz. Bu .kube/config dosya daha sonra Azure pipelines ' de bir hizmet bağlantısı yapılandırmak için de kullanılır.

Önemli

Kubernetes kümeniz için kimlik bilgilerini içerdikleri için bu dosyaları güvende tutun. Dosyaya erişimi olan bir saldırganın, yönetici erişimi kazanmak için yeterli bilgi vardır. İlk dosya kullanılarak gerçekleştirilen tüm eylemler, .kube/config Küme Yöneticisi hesabı kullanılarak yapılır.

Şimdi, kubectl kümenizin durumunu denetlemek için kullanarak çeşitli komutları deneyebilirsiniz. Örnek komutlar aşağıda verilmiştir:

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, ayrıntılı rol tanımları ve rol bağlamaları oluşturmanıza olanak sağlayan kendi rol tabanlı Access Control (RBAC) modeline sahiptir. Bu, Küme Yöneticisi izinleri teslim etmek yerine kümeye erişimi denetlemek için tercih edilen yoldur.

kubernetes kümelerine Azure Pipelines Bağlan

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

  • kubernetes kümenizin ana düğümlerinden birine Bağlan.
  • Dosyanın içeriğini kopyalayın .kube/config .
  • >> yeni bir "kubernetes" hizmet bağlantısı oluşturmak için Azure DevOps Project Ayarlar hizmet bağlantılarına gidin (kimlik doğrulama yöntemi olarak kubeconfig kullanın)

Önemli

Azure Pipelines (veya yapı aracıları) kubernetes apı 'sine erişebilmelidir. Azure Pipelines 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 'ında veya tüm gerekli yönetim uç noktalarına ağ bağlantısı olan bir makinede dağıtabilirsiniz. Ayrıntıları burada görebilirsiniz:

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

karar akışı kendiliğinden barındırılan aracılar

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

yalnızca giden trafik

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

İzlemeyi yapılandırma

Çözümde Azure İzleyici izlemek için kapsayıcılar için Azure İzleyici'i kullanabilirsiniz. Bu, Azure İzleyici aks altyapısı tarafından dağıtılan Kubernetes kümesine Azure Stack Hub.

Kümeniz üzerinde veri Azure İzleyici iki yol vardır. Her iki şekilde de Azure'da bir Log Analytics çalışma alanı ayarlamanız gerekir.

Örnek topolojide, sürecin otomatik hale ve güncelleştirmelerin daha kolay yüklenebilecek şekilde "Birinci yöntem" kullanılır.

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

Helm, macOS, Windows ve Linux üzerinde çalışan ikili dosya olarak kullanılabilen bir Kubernetes paket yöneticisidir. Bu, helm.sh. Helm, komutu için 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 Azure İzleyici aracısını yükletir:

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ümenizin Operations Management Suite (OMS) Aracısı izleme verilerini Azure Log Analytics Çalışma Alanınıza gönderir (giden HTTPS kullanarak). Artık Azure İzleyici kubernetes kümeleriniz hakkında daha derin içgörüler elde etmek için Azure Stack Hub. Bu tasarım, uygulama kümeleriyle otomatik olarak dağıtılabilir analiz gücünü göstermek için güçlü bir yol sağlar.

Azure Stack Hub Azure İzleyici'de küme oluşturma

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

Önemli

Bu Azure İzleyici herhangi bir Azure Stack Hub yoksa, Azure Log Analytics çalışma alanına bir çözüm ekleme yönergelerini AzureMonitor-Containers emin olun.

Uygulamayı dağıtma

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

Örnek uygulamamız, önceki adımda Azure İzleme Aracısı gibi bir Helm Grafiği olarak da paketlenmiştir. Bu nedenle uygulamayı Kubernetes kümemize dağıtmak oldukça kolaydır. Helm Grafiği dosyalarını yardımcı GitHub bulabilirsiniz

Örnek uygulama, iki örnek üzerinde kubernetes kümesine dağıtılmış olan üç katmanlı Azure Stack Hub uygulamadır. Uygulama bir MongoDB veritabanı kullanır. Verilerin birden çok örnekte çoğaltılması hakkında daha fazla bilgi edinmek için Veri ve Depolama öğrenebilirsiniz.

Uygulama için Helm Grafiğini dağıttıktan sonra, uygulamanızın üç katmanının da dağıtımlar ve durum bilgisi olan kümeler (veritabanı için) olarak tek bir pod ile temsil edildi olduğunu görüyorsunuz:

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

Hizmetler tarafında nginx tabanlı Giriş Denetleyicisini ve genel IP adresini bulabilirsiniz:

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, "uygulama uç noktamız"dır. Kullanıcılar uygulamayı açmak için bu şekilde bağlanacak ve bir sonraki adımımız Olan Yapılandırma için uç noktaolarak Traffic Manager.

Uygulamayı otomatik ölçeklendirme

İsteğe bağlı olarak, CPU kullanımı gibi belirli ölçümlere göre ölçeği artırmak veya azaltmak için Yatay Pod Otomatik Ölçeklendireci'nin yapılandırılması gerekir. Aşağıdaki komut, ratings-web dağıtımı tarafından denetlenen Podların 1 ile 10 arasında çoğaltmasını bulunduran bir Yatay Pod Otomatik Doğruları oluşturacak. HPA, %80'lik tüm Pod'larda ortalama CPU kullanımını korumak için çoğaltma sayısını (dağıtım yoluyla) artırır ve azaltacaktır:

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

Şu komutu çalıştırarak otomatik olarak düzeltenin geçerli durumunu kontrol edin:

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

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

Not

Traffic Manager trafiği 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.

Şirket içi Azure Traffic Manager 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 Azure Traffic Manager dağıtmak için Azure Traffic Manager kullanacağız. Aynı veya Azure Stack Hub farklı konumlarda farklı örneklerde çalıştırabilirsiniz:

şirket içi trafik yöneticisi

Azure'da, Traffic Manager iki farklı örneğini işaret etmek üzere yapılandırabilirsiniz:

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 ediyor.

Bu noktada:

  • Kubernetes altyapısı, giriş denetleyicisi de dahil olmak üzere oluşturulmuş.
  • Kümeler iki örnek arasında Azure Stack Hub dağıtılmıştır.
  • İzleme yapılandırıldı.
  • Azure Traffic Manager iki örnek arasında trafiğin yükünü Azure Stack Hub sağlar.
  • Bu altyapının üzerinde, örnek üç katmanlı uygulama Helm Charts kullanılarak otomatik bir şekilde dağıtılmıştır.

Çözüm artık kullanıcıların erişimine açık olmalı!

Ayrıca, sonraki iki bölümde ele alınması gereken dağıtım sonrası operasyonel konular da vardır.

Kubernetes’i yükseltme

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

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 işletim sistemi görüntülerinin kullanılabilirliğini izlemek küme operatörünün sorumluluğundadır. Operatörün AKS Altyapısını kullanarak bu yükseltmeleri planlaması ve yürütmesi gerekir. Temel işletim sistemi görüntülerinin Azure Stack Hub İşleci tarafından Azure Stack Hub Market'Azure Stack Hub gerekir.

Kubernetes'i ölçeklendirme

Ölçeklendirme, AKS Altyapısı kullanılarak düzenlenen bir diğer 2. Gün işlemidir.

Ölçek komutu, küme yapılandırma dosyanızı (apimodel.json) yeni bir dağıtım için giriş olarak çıkış dizininde Azure Resource Manager kullanır. AKS Altyapısı, ölçeklendirme işlemi belirli bir aracı havuzunda yürütülür. Ölçeklendirme işlemi tamamlandığında AKS Altyapısı, küme tanımını aynı apimodel.json dosyasında günceller. 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ı gösterir.

Sonraki adımlar