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
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:
- Yüksek kullanılabilirlik Kubernetes küme düzeni makalesini gözden geçirin.
- Bu makalede başvurulan ek varlıkları içeren yardımcı GitHub deposunun içeriğini gözden geçirin.
- Azure Stack Hub kullanıcı portalına erişebilen ve en az "katkıda bulunan" izinlere sahip bir hesaba sahip 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:
- Azure Stack Hub'da Linux üzerinde AKS Altyapısı'nı yükleme (veya Windows kullanarak)
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:
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.
İ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.
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.
- 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ı kubectl
burada 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>
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:
- Windows veya Linux üzerinde Azure Pipelines aracıları
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:
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.
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.
- Yöntem bir Helm Grafiği kullanır
- AKS Altyapısı küme belirtiminin bir parçası olarak yöntem iki
Ö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.
Ö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:
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:
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:
- Kubernetes kümesini yükseltmek, AKS Altyapısı kullanılarak yapılabilecek karmaşık bir 2. Gün işlemidir. Daha fazla bilgi için bkz. Azure Stack Hub'da Kubernetes kümesini yükseltme.
- AKS Altyapısı, kümeleri daha yeni Kubernetes ve temel işletim sistemi görüntüsü sürümlerine yükseltmenize olanak tanır. Daha fazla bilgi için bkz. Daha yeni bir Kubernetes sürümüne yükseltme adımları.
- Ayrıca yalnızca temel düğümleri daha yeni temel işletim sistemi görüntüsü sürümlerine yükseltebilirsiniz. Daha fazla bilgi için bkz. Yalnızca işletim sistemi görüntüsünü yükseltme adımları.
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
- Karma uygulama tasarımıyla ilgili dikkat edilmesi gerekenler hakkında daha fazla bilgi edinin.
- GitHub'da bu örnek için koda yönelik iyileştirmeleri gözden geçirin ve önerin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin