Menyebarkan kluster Kubernetes ketersediaan tinggi di Azure Stack Hub

Artikel ini akan menunjukkan kepada Anda cara membangun lingkungan kluster Kubernetes yang sangat tersedia, yang disebarkan pada beberapa instans Azure Stack Hub, di lokasi fisik yang berbeda.

Dalam panduan penyebaran solusi ini, Anda mempelajari cara:

  • Mengunduh dan menyiapkan Mesin AKS
  • Menyambungkan ke VM Pembantu Mesin AKS
  • Menyebarkan kluster Kubernetes
  • Sambungkan ke kluster Kube
  • Menyambungkan Azure Pipelines ke kluster Kubernetes
  • Mengonfigurasi pemantauan
  • Menyebarkan aplikasi
  • Menskalakan otomatis aplikasi
  • Mengonfigurasi Traffic Manager
  • Tingkatkan Kubernetes
  • Menskalakan Kubernetes

Tip

Pilar hibrida Microsoft Azure Stack Hub adalah perpanjangan dari Azure. Azure Stack Hub menghadirkan kelincahan dan inovasi komputasi awan ke lingkungan lokal Anda, memungkinkan satu-satunya cloud hybrid yang memungkinkan Anda membangun dan menerapkan aplikasi hybrid di mana saja.

Artikel Perspektif desain aplikasi hibrid mengulas pilar kualitas perangkat lunak (penempatan, skalabilitas, ketersediaan, ketahanan, kemampuan manajemen, dan keamanan) untuk merancang, menyebarkan, dan mengoperasikan aplikasi hibrid. Pertimbangan desain membantu dalam mengoptimalkan desain aplikasi hibrid, meminimalkan tantangan dalam lingkungan produksi.

Prasyarat

Sebelum memulai panduan penyebaran ini, pastikan Anda:

Mengunduh dan menyiapkan Mesin AKS

Mesin AKS adalah biner yang dapat digunakan dari host Windows atau Linux apa pun yang dapat mencapai titik akhir Azure Stack Hub Azure Resource Manager. Panduan ini menjelaskan penyebaran VM Linux (atau Windows) baru di Azure Stack Hub. Ini akan digunakan nanti saat Mesin AKS menyebarkan kluster Kubernetes.

Catatan

Anda juga dapat menggunakan VM Windows atau Linux yang sudah ada untuk menyebarkan kluster Kubernetes di Azure Stack Hub menggunakan Mesin AKS.

Proses langkah demi langkah dan persyaratan untuk Mesin AKS didokumentasikan di sini:

Mesin AKS adalah alat bantu untuk menyebarkan dan mengoperasikan (tidak terkelola) kluster Kubernetes (di Azure dan Azure Stack Hub).

Detail dan perbedaan Mesin AKS di Azure Stack Hub dijelaskan di sini:

Lingkungan sampel akan menggunakan Terraform untuk mengotomatiskan penyebaran VM Mesin AKS. Anda dapat menemukan detail dan kode di repo GitHub pendamping.

Hasil dari langkah ini adalah grup sumber daya baru di Azure Stack Hub yang berisi VM pembantu Mesin AKS dan sumber daya terkait:

Sumber Daya VM Mesin AKS di Azure Stack Hub

Catatan

Jika Anda harus menyebarkan Mesin AKS di lingkungan dengan celah udara yang tidak terhubung, tinjau Instans Azure Stack Hub yang Terputus untuk mempelajari selengkapnya.

Pada langkah berikutnya, kita akan menggunakan VM Mesin AKS yang baru disebarkan untuk menyebarkan kluster Kubernetes.

Menyambungkan ke VM pembantu Mesin AKS

Pertama, Anda harus tersambung ke VM pembantu Mesin AKS yang dibuat sebelumnya.

VM harus memiliki Alamat IP Publik dan harus dapat diakses melalui SSH (Port 22/TCP).

Halaman Ringkasan VM Mesin AKS

Tip

Anda dapat menggunakan alat pilihan Anda seperti MobaXterm, puTTY atau PowerShell di Windows 10 untuk tersambung ke VM Linux menggunakan SSH.

ssh <username>@<ipaddress>

Setelah tersambung, jalankan perintah aks-engine. Buka Versi Mesin AKS yang Didukung untuk mempelajari selengkapnya tentang versi Mesin AKS dan Kubernetes.

contoh baris perintah aks-engine

Menyebarkan kluster Kubernetes

VM pembantu Mesin AKS sendiri belum membuat kluster Kubernetes di Azure Stack Hub kami. Membuat kluster adalah tindakan pertama yang harus dilakukan di VM pembantu Mesin AKS.

Proses langkah demi langkah didokumentasikan di sini:

Hasil akhir dari perintah aks-engine deploy dan persiapan di langkah sebelumnya adalah kluster Kubernetes berfitur lengkap yang disebarkan ke ruang penyewa instans Azure Stack Hub pertama. Kluster itu sendiri terdiri dari komponen Azure IaaS seperti VM, load balancer, VNet, disk, dan sebagainya.

Komponen kluster IaaS portal Azure Stack Hub

  1. Load balancer Azure (Titik Akhir K8s API) 2) Node Worker (Kumpulan Agen) 3) Node Master

Kluster sekarang aktif dan berjalan dan pada langkah berikutnya kami akan menghubungkannya.

Sambungkan ke kluster Kube

Anda sekarang dapat tersambung ke kluster Kubernetes yang dibuat sebelumnya, baik melalui SSH (menggunakan kunci SSH yang ditentukan sebagai bagian dari penyebaran) atau melalui kubectl (direkomendasikan). Alat baris perintah Kubernetes kubectl tersedia untuk Windows, Linux, dan macOS di sini. Ini sudah diinstal sebelumnya dan dikonfigurasi pada node master kluster kami:

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

Menjalankan kubectl pada node master

Sebaiknya tidak menggunakan node master sebagai jumpbox untuk tugas administratif. Konfigurasi kubectl disimpan di .kube/config pada node master serta pada VM Mesin AKS. Anda dapat menyalin konfigurasi ke mesin admin dengan konektivitas ke kluster Kubernetes dan menggunakan perintah kubectl di sana. File .kube/config juga digunakan nanti untuk mengonfigurasi koneksi layanan di Azure Pipelines.

Penting

Amankan file-file ini karena berisi info masuk untuk kluster Kubernetes Anda. Penyerang dengan akses ke file memiliki informasi yang cukup untuk mendapatkan akses administrator ke file tersebut. Semua tindakan yang dilakukan menggunakan file .kube/config awal dilakukan menggunakan akun admin kluster.

Anda sekarang dapat mencoba berbagai perintah menggunakan kubectl untuk memeriksa status kluster Anda. Berikut adalah contoh perintah:

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

Penting

Kubernetes memiliki model Kontrol Akses Berbasis Peran (RBAC) sendiri yang memungkinkan Anda membuat definisi peran dan pengikatan data peran yang terperinci. Ini adalah cara yang lebih baik untuk mengontrol akses ke kluster daripada membagikan izin admin kluster.

Menyambungkan Azure Pipelines ke kluster Kubernetes

Untuk menyambungkan Azure Pipelines ke kluster Kubernetes yang baru digunakan, diperlukan file kubeconfig (.kube/config) seperti yang dijelaskan pada langkah sebelumnya.

  • Hubungkan ke salah satu node master kluster Kubernetes Anda.
  • Salin konten file .kube/config.
  • Buka Azure DevOps > Pengaturan Proyek > Koneksi Layanan untuk membuat koneksi layanan "Kubernetes" baru (gunakan KubeConfig sebagai metode Autentikasi)

Penting

Azure Pipelines (atau agen build-nya) harus memiliki akses ke Kubernetes API. Jika ada koneksi Internet dari Azure Pipelines ke kluster Azure Stack Hub Kubernetes, Anda harus menyebarkan Agen Pembuatan Azure Pipelines yang dihosting sendiri.

Saat menyebarkan Agen yang dihosting sendiri untuk Azure Pipelines, Anda dapat menyebarkan baik di Azure Stack Hub, atau pada mesin dengan konektivitas jaringan ke semua titik akhir manajemen yang diperlukan. Lihat detailnya di sini:

Bagian Pertimbangan Penyebaran (CI/CD) pola berisi alur keputusan yang membantu Anda memahami apakah akan menggunakan agen yang dihosting Microsoft atau agen yang dihosting sendiri:

Diagram yang menunjukkan alur keputusan agen yang dihost sendiri.

Unduh file Visio dari semua diagram dalam artikel ini.

Dalam solusi sampel ini, topologi menyertakan agen build yang dihosting sendiri di setiap instans Azure Stack Hub. Agen dapat mengakses Titik Akhir Manajemen Azure Stack Hub dan titik akhir API kluster Kubernetes.

Diagram yang menunjukkan lalu lintas keluar.

Unduh file Visio dari semua diagram dalam artikel ini.

Desain ini memenuhi persyaratan peraturan umum, yaitu hanya memiliki koneksi keluar dari solusi aplikasi.

Mengonfigurasi pemantauan

Anda dapat menggunakan Azure Monitor untuk kontainer guna memantau kontainer dalam solusi. Ini mengarahkan Azure Monitor ke kluster Kubernetes yang disebarkan Mesin AKS di Azure Stack Hub.

Ada dua cara untuk mengaktifkan Azure Monitor di kluster Anda. Kedua cara tersebut mengharuskan Anda menyiapkan ruang kerja Log Analytics di Azure.

Dalam topologi sampel, "Metode satu" digunakan, yang memungkinkan otomatisasi proses dan pembaruan dapat diinstal dengan lebih mudah.

Untuk langkah selanjutnya, Anda memerlukan Ruang Kerja Azure LogAnalytics (ID dan Kunci), Helm (versi 3), dan kubectl di mesin Anda.

Helm adalah manajer paket Kubernetes, tersedia sebagai biner yang berjalan di macOS, Windows, dan Linux. Helm dapat diunduh di helm.sh. Helm bergantung pada file konfigurasi Kubernetes yang digunakan untuk perintah kubectl:

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

Perintah ini akan menginstal agen Azure Monitor pada kluster Kubernetes Anda:

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

Agen Operations Management Suite (OMS) di kluster Kubernetes Anda akan mengirimkan data pemantauan ke Ruang Kerja Azure Log Analytics Anda (menggunakan HTTPS keluar). Anda sekarang dapat menggunakan Azure Monitor untuk mendapatkan wawasan yang lebih mendalam tentang kluster Kubernetes Anda di Azure Stack Hub. Desain ini adalah cara yang ampuh untuk mendemonstrasikan kekuatan analitik yang dapat disebarkan secara otomatis dengan kluster aplikasi Anda.

Kluster Azure Stack Hub di Azure monitor

Detail kluster Azure Monitor

Penting

Jika Azure Monitor tidak menampilkan data Azure Stack Hub apa pun, pastikan Anda telah mengikuti instruksi tentang cara menambahkan solusi AzureMonitor-Containers ke ruang kerja Azure Log Analytics dengan hati-hati.

Menyebarkan aplikasi

Sebelum menginstal aplikasi sampel kami, ada langkah lain untuk mengonfigurasi pengontrol Ingress berbasis nginx di kluster Kubernetes kami. Pengontrol Ingress digunakan sebagai load balancer lapisan 7 untuk merutekan lalu lintas di kluster kami berdasarkan host, jalur, atau protokol. Nginx-ingress tersedia sebagai Helm Chart. Untuk petunjuk terperinci, lihat repositori Helm Chart GitHub.

Aplikasi sampel kami juga dikemas sebagai Helm Chart, seperti Agen Pemantau Azure pada langkah sebelumnya. Dengan demikian, sangatlah mudah untuk menyebarkan aplikasi ke kluster Kubernetes kami. Anda dapat menemukan file Helm Chart di repo GitHub pendamping

Aplikasi sampel adalah aplikasi tiga tingkat, disebarkan ke kluster Kubernetes pada masing-masing dari dua instans Azure Stack Hub. Aplikasi ini menggunakan database MongoDB. Anda dapat mempelajari selengkapnya tentang cara membuat data direplikasi di beberapa instans dalam pola Pertimbangan Data dan Penyimpanan.

Setelah menyebarkan Helm Chart untuk aplikasi, Anda akan melihat ketiga tingkatan aplikasi Anda direpresentasikan sebagai penyebaran dan set berstatus (untuk database) dengan satu pod:

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

Di sisi layanan, Anda akan menemukan Pengontrol Ingress berbasis nginx dan alamat IP publiknya:

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

Alamat "IP Eksternal" adalah "titik akhir aplikasi" kami. Begitulah cara pengguna akan tersambung untuk membuka aplikasi dan juga akan digunakan sebagai titik akhir untuk langkah selanjutnya Mengonfigurasi Traffic Manager.

Melakukan skala otomatis aplikasi

Anda dapat secara opsional mengonfigurasi Penskala Otomatis Pod Horizontal untuk meningkatkan atau menurunkan skala berdasarkan metrik tertentu seperti penggunaan CPU. Perintah berikut akan membuat Penskala Otomatis Pod Horizontal yang memelihara 1 hingga 10 replika Pod yang dikendalikan oleh penyebaran rating-web. HPA akan menambah dan mengurangi jumlah replika (melalui penyebaran) untuk mempertahankan rata-rata pemanfaatan CPU di semua Pod sebesar 80%:

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

Anda dapat memeriksa status penskala saat ini dengan menjalankan perintah ini:

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

Mengonfigurasi Traffic Manager

Untuk mendistribusikan lalu lintas antara dua (atau lebih) penyebaran aplikasi, kami akan menggunakan Azure Traffic Manager. Azure Traffic Manager adalah load balancer lalu lintas berbasis DNS di Azure.

Catatan

Traffic Manager menggunakan DNS untuk mengarahkan permintaan klien ke titik akhir layanan yang paling tepat berdasarkan metode perutean lalu lintas dan kesehatan titik akhir.

Daripada menggunakan Azure Traffic Manager, Anda juga dapat menggunakan solusi load-balancing global lainnya yang dihosting di lingkungan lokal. Dalam skenario sampel, kami akan menggunakan Azure Traffic Manager untuk mendistribusikan lalu lintas antara dua instans aplikasi kami. Mereka dapat berjalan di instans Azure Stack Hub di lokasi yang sama atau berbeda:

Diagram yang memperlihatkan manajer lalu lintas lokal.

Unduh file Visio dari semua diagram dalam artikel ini.

Di Azure, kami mengonfigurasi Traffic Manager untuk menunjuk ke dua instans berbeda dari aplikasi kami:

Profil titik akhir TM

Seperti yang Anda lihat, kedua titik akhir menunjuk ke dua instans aplikasi yang disebarkan dari bagian sebelumnya.

Pada titik ini:

  • Infrastruktur Kubernetes telah dibuat, termasuk pengontrol ingress.
  • Kluster telah disebarkan di dua instans Azure Stack Hub.
  • Pemantauan telah dikonfigurasi.
  • Azure Traffic Manager akan memuat lalu lintas keseimbangan di dua instans Azure Stack Hub.
  • Di atas infrastruktur ini, sampel aplikasi tiga tingkat telah disebarkan secara otomatis menggunakan Helm Chart.

Solusinya sekarang harus aktif dan dapat diakses oleh pengguna!

Ada juga beberapa pertimbangan operasional pasca penyebaran yang layak didiskusikan, yang dibahas dalam dua bagian berikutnya.

Tingkatkan Kubernetes

Pertimbangkan topik berikut saat meningkatkan kluster Kubernetes:

Gambar OS dasar yang lebih baru berisi pembaruan keamanan dan kernel. Operator kluster bertanggung jawab untuk memantau ketersediaan Versi Kubernetes dan Gambar OS yang lebih baru. Operator harus merencanakan dan menjalankan peningkatan ini menggunakan Mesin AKS. Gambar OS dasar harus diunduh dari Marketplace Azure Stack Hub oleh Operator Azure Stack Hub.

Menskalakan Kubernetes

Skala adalah operasi Hari 2 lainnya yang dapat diatur menggunakan Mesin AKS.

Perintah skala menggunakan kembali file konfigurasi kluster Anda (apimodel.json) di direktori output, sebagai input untuk penyebaran Azure Resource Manager baru. Mesin AKS menjalankan operasi penskalaan terhadap kumpulan agen tertentu. Saat operasi penskalaan selesai, Mesin AKS memperbarui definisi kluster dalam file apimodel.json yang sama. Definisi kluster mencerminkan jumlah node baru untuk mencerminkan konfigurasi kluster saat ini yang diperbarui.

Langkah berikutnya