Menyiapkan aset teknis kontainer Azure untuk aplikasi Kubernetes
Artikel ini memberikan sumber daya teknis dan rekomendasi untuk membantu Anda membuat penawaran kontainer di Marketplace Azure untuk aplikasi Kubernetes.
Untuk contoh komprehensif aset teknis yang diperlukan untuk penawaran Kontainer berbasis aplikasi Kubernetes, lihat sampel penawaran Kontainer Marketplace Azure untuk Kubernetes.
Pengetahuan teknis dasar
Mendesain, membangun, dan menguji aset ini membutuhkan waktu dan membutuhkan pengetahuan teknis baik dari platform Azure maupun teknologi yang digunakan untuk membangun penawaran.
Selain domain solusi Anda, tim teknik Anda harus memiliki pengetahuan tentang teknologi Microsoft berikut:
- Pemahaman dasar tentang Layanan Azure
- Cara mendesain dan merancang aplikasi Azure
- Pengetahuan tentang Azure Resource Manager
- Pengetahuan kerja tentang JSON
- Pengetahuan kerja tentang Helm
- Pengetahuan kerja tentang createUiDefinition
- Pengetahuan kerja tentang templat Azure Resource Manager (ARM)
Prasyarat
Aplikasi Anda harus berbasis bagan Helm.
Jika Anda memiliki beberapa bagan, Anda dapat menyertakan bagan helm lainnya sebagai sub-bagan selain dari bagan helm utama.
Semua referensi gambar dan detail hash harus disertakan dalam bagan. Tidak ada bagan atau gambar lain yang dapat diunduh saat runtime.
Anda harus memiliki penyewa penerbitan aktif atau akses ke penyewa penerbitan dan akun Pusat Mitra.
Anda harus telah membuat Azure Container Registry (ACR) milik penyewa penerbitan aktif di atas. Anda akan mengunggah Cloud Native Application Bundle (CNAB) ke dalamnya. Untuk informasi selengkapnya, lihat Membuat Azure Container Registry.
Menginstal versi terbaru Azure CLI.
Aplikasi harus dapat disebarkan ke lingkungan Linux.
Gambar harus bebas dari kerentanan. Untuk mempelajari tentang pemindaian kerentanan, lihat Penilaian kerentanan untuk Azure dengan Pengelolaan Kerentanan Microsoft Defender.
Jika menjalankan alat pengemasan secara manual, Docker perlu diinstal komputer lokal. Untuk informasi selengkapnya, lihat bagian backend WSL 2 di dokumentasi Docker untuk Windows atau Linux. Ini hanya didukung di komputer Linux/Windows AMD64.
Batasan
- Marketplace Kontainer hanya mendukung gambar AMD64 berbasis platform Linux.
- Hanya AKS terkelola.
- Kontainer tunggal tidak didukung.
- Templat Azure Resource Manager yang ditautkan tidak didukung.
Gambaran umum penerbitan
Langkah pertama untuk menerbitkan penawaran Kontainer berbasis aplikasi Kubernetes pada Marketplace Azure adalah mengemas aplikasi Anda sebagai Cloud Native Application Bundle (CNAB). CNAB, yang terdiri dari artefak aplikasi Anda, pertama kali diterbitkan ke Azure Container Registry (ACR) privat Anda, dan kemudian didorong ke ACR publik milik Microsoft, dan digunakan sebagai artefak tunggal yang Anda referensikan di Pusat Mitra.
Dari sana, pemindaian kerentanan dilakukan untuk memastikan gambar aman. Terakhir, aplikasi Kubernetes terdaftar sebagai jenis ekstensi untuk kluster Azure Kubernetes Service (AKS).
Setelah penawaran Anda diterbitkan, aplikasi Anda memanfaatkan ekstensi kluster untuk fitur AKS untuk mengelola siklus hidup aplikasi Anda di dalam kluster AKS.
Memberikan akses ke Azure Container Registry Anda
Sebagai bagian dari proses penerbitan, Microsoft menyalin CNAB Anda secara mendalam dari ACR Anda ke ACR milik Microsoft, Marketplace Azure khusus. Gambar diunggah ke registri publik yang dapat diakses oleh semua. Langkah ini mengharuskan Anda untuk memberikan akses Microsoft ke registri Anda. ACR harus berada di penyewa Microsoft Entra yang sama yang ditautkan ke akun Pusat Mitra Anda.
Microsoft memiliki aplikasi pihak pertama yang bertanggung jawab untuk menangani proses ini dengan id
.32597670-3e15-4def-8851-614ff48c1efa
Untuk memulai, buat perwakilan layanan berdasarkan aplikasi:
Catatan
Jika akun Anda tidak memiliki izin untuk membuat perwakilan layanan, az ad sp create
mengembalikan pesan kesalahan yang berisi "Hak istimewa yang tidak memadai untuk menyelesaikan operasi". Hubungi admin Microsoft Entra Anda untuk membuat perwakilan layanan.
az login
Verifikasi apakah perwakilan layanan sudah ada untuk aplikasi:
az ad sp show --id 32597670-3e15-4def-8851-614ff48c1efa
Jika perintah sebelumnya tidak mengembalikan hasil apa pun, buat perwakilan layanan baru:
az ad sp create --id 32597670-3e15-4def-8851-614ff48c1efa
Catat ID perwakilan layanan untuk digunakan dalam langkah-langkah berikut.
Selanjutnya, dapatkan ID lengkap registri Anda:
az acr show --name <registry-name> --query "id" --output tsv
Output Anda akan terlihat seperti berikut:
...
},
"id": "/subscriptions/ffffffff-ff6d-ff22-77ff-ffffffffffff/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
...
Selanjutnya, buat penetapan peran untuk memberi perwakilan layanan kemampuan untuk menarik dari registri Anda menggunakan nilai yang Anda peroleh sebelumnya:
Untuk menetapkan peran Azure, Anda harus memiliki:
- Izin
Microsoft.Authorization/roleAssignments/write
, seperti Administrator Akses Pengguna atau Pemilik
az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpull
Terakhir, daftarkan Microsoft.PartnerCenterIngestion
penyedia sumber daya pada langganan yang sama yang digunakan untuk membuat Azure Container Registry:
az provider register --namespace Microsoft.PartnerCenterIngestion --subscription <subscription-id> --wait
Pantau pendaftaran dan konfirmasikan telah selesai sebelum melanjutkan:
az provider show -n Microsoft.PartnerCenterIngestion --subscription <subscription-id>
Kumpulkan artefak untuk memenuhi persyaratan format paket
Setiap CNAB terdiri dari artefak berikut:
- Bagan helm
- CreateUiDefinition
- Templat ARM
- Berkas manifes
Memperbarui bagan Helm
Pastikan bagan Helm mematuhi aturan berikut:
Semua nama dan referensi gambar diparameterkan dan diwakili dalam
values.yaml
sebagai referensi global.azure.images. Perbarui filedeployment.yaml
templat bagan Helm Anda untuk mengarahkan gambar-gambar ini. Ini memastikan blok gambar dapat diperbarui untuk mereferensikan gambar ACR Marketplace Azure.Jika Anda memiliki beberapa bagan, Anda dapat menyertakan bagan helm lainnya sebagai sub-bagan selain dari bagan helm utama. Kemudian perbarui setiap referensi gambar dependen Anda untuk menunjuk ke gambar yang disertakan dalam bagan
values.yaml
utama .Saat mereferensikan gambar, Anda dapat menggunakan tag atau hash. Namun, penting untuk dicatat bahwa gambar di-retag secara internal untuk menunjuk ke Azure Container Registry (ACR) milik Microsoft. Saat Anda memperbarui tag, versi baru CNAB harus dikirimkan ke Marketplace Azure. Hal ini agar perubahan dapat tercermin dalam penyebaran pelanggan.
Model penagihan yang tersedia
Untuk semua model penagihan yang tersedia, lihat opsi lisensi untuk Aplikasi Azure Kubernetes.
Membuat pembaruan berdasarkan model penagihan Anda
Setelah meninjau model penagihan yang tersedia, pilih model yang sesuai untuk kasus penggunaan Anda dan selesaikan langkah-langkah berikut:
Selesaikan langkah-langkah berikut untuk menambahkan pengidentifikasi di model penagihan Per core, Per pod, Per node :
Tambahkan label
azure-extensions-usage-release-identifier
pengidentifikasi penagihan ke spesifikasi Pod dalam file yaml beban kerja Anda.Jika beban kerja ditentukan sebagai Penyebaran atau Replicaset atau spesifikasi Statefulsets atau Daemonsets, tambahkan label ini di bawah .spec.template.metadata.labels.
Jika beban kerja ditentukan langsung sebagai spesifikasi Pod, tambahkan label ini di bawah .metadata.labels.
Untuk model penagihan perCore , tentukan Permintaan CPU dengan menyertakan
resources:requests
bidang dalam manifes sumber daya kontainer. Langkah ini hanya diperlukan untuk model penagihan perCore .
Pada waktu penyebaran, fitur ekstensi kluster menggantikan nilai pengidentifikasi penagihan dengan nama instans ekstensi.
Untuk contoh yang dikonfigurasi untuk menyebarkan Azure Voting App, lihat yang berikut ini:
Untuk model penagihan meter kustom, tambahkan bidang yang tercantum di bawah ini dalam file values.yaml templat helm Anda
- clientId harus ditambahkan di bawah global.azure.identity
- kunci planId harus ditambahkan di bawah global.azure.marketplace. planId
- resourceId harus ditambahkan di bawah global.azure.extension.resrouceId
Pada waktu penyebaran, fitur ekstensi kluster mengganti bidang ini dengan nilai yang sesuai. Misalnya, lihat aplikasi berbasis Meter Kustom Azure Vote.
Membuat file Parameter pengujian
File parameter pengujian adalah JSON yang digunakan bersama dengan templat ARM untuk menyebarkan sumber daya ke Azure. Untuk aplikasi atau ekstensi yang dapat disebarkan ke kluster terkelola (AKS), kami mengharuskan file parameter ditentukan untuk validasi penyebaran. File parameter pengujian harus menyertakan nilai yang akan memungkinkan penyebaran pengujian yang berhasil.
Catatan
Tidak semua parameter perlu disertakan dalam file parameter, hanya parameter yang tidak memiliki nilai default. Untuk panduan, lihat di sini.
Berikut adalah contoh file parameter pengujian:
Setelah file parameter pengujian dibuat, tambahkan ke file manifes Anda:
Catatan
Untuk situasi di mana file parameter pengujian tidak akan berlaku untuk aplikasi Anda (Misalnya: aplikasi memerlukan rahasia untuk disebarkan seperti kunci API atau aplikasi yang disebarkan pada Kluster yang terhubung), bendera skipdeployment disediakan untuk memungkinkan Anda melewati pengujian penyebaran.
Memvalidasi bagan Helm
Untuk memastikan bagan Helm valid, uji bahwa bagan tersebut dapat diinstal pada kluster lokal. Anda juga dapat menggunakan helm install --generate-name --dry-run --debug
untuk mendeteksi kesalahan pembuatan templat tertentu.
Membuat dan menguji createUiDefinition
CreateUiDefinition adalah file JSON yang menentukan elemen antarmuka pengguna untuk portal Azure saat menyebarkan aplikasi. Untuk informasi selengkapnya, lihat:
- CreateUiDefinition.json untuk Azure
- atau lihat contoh definisi UI yang meminta data input untuk pilihan kluster baru atau yang sudah ada dan meneruskan parameter ke dalam aplikasi Anda.
Setelah membuat file createUiDefinition.json untuk aplikasi, Anda perlu menguji pengalaman pengguna. Untuk menyederhanakan pengujian, salin konten file Anda ke lingkungan kotak pasir. Kotak pasir menyajikan antarmuka pengguna Anda dalam pengalaman portal layar penuh saat ini. Kotak pasir adalah cara yang disarankan untuk mempratinjau antarmuka pengguna.
Membuat templat Azure Resource Manager (ARM)
Templat ARM menentukan sumber daya Azure untuk disebarkan. Secara default, Anda akan menyebarkan sumber daya ekstensi kluster untuk aplikasi Marketplace Azure. Secara opsional, Anda dapat memilih untuk menyebarkan kluster AKS.
Saat ini kami hanya mengizinkan jenis sumber daya berikut:
Microsoft.ContainerService/managedClusters
Microsoft.KubernetesConfiguration/extensions
Misalnya, lihat contoh templat ARM ini yang dirancang untuk mengambil hasil dari contoh definisi UI yang ditautkan sebelumnya dan meneruskan parameter ke dalam aplikasi Anda.
Alur parameter pengguna
Penting untuk memahami bagaimana parameter pengguna mengalir di seluruh artefak yang Anda buat dan kemasan. Dalam contoh Azure Voting App, parameter awalnya ditentukan saat membuat UI melalui file createUiDefinition.json:
Parameter diekspor melalui bagian outputs
:
Dari sana, nilai diteruskan ke templat Azure Resource Manager dan disebarkan ke bagan Helm selama penyebaran:
Terakhir, nilai diteruskan ke bagan Helm seperti values.yaml
yang ditunjukkan.
Catatan
Dalam contoh ini, extensionResourceName
juga diparameterkan dan diteruskan ke sumber daya ekstensi kluster. Demikian pula, properti ekstensi lain dapat diparameterkan, seperti mengaktifkan peningkatan otomatis untuk versi minor. Untuk informasi selengkapnya tentang properti ekstensi kluster, lihat parameter opsional.
Membuat file manifes
Manifes paket adalah file yaml yang menjelaskan paket dan kontennya, dan memberi tahu alat pengemasan tempat menemukan artefak dependen.
Bidang yang digunakan dalam manifes adalah sebagai berikut:
Nama | Jenis Data | Deskripsi |
---|---|---|
applicationName | String | Nama aplikasi |
penerbit | String | Nama Penerbit |
description | String | Deskripsi singkat tentang paket |
versi | String dalam #.#.# format |
String versi yang menjelaskan versi paket aplikasi, mungkin atau mungkin tidak cocok dengan versi biner di dalamnya. |
helmChart | String | Direktori lokal tempat bagan Helm dapat ditemukan relatif terhadap ini manifest.yaml |
clusterARMTemplate | String | Jalur lokal tempat templat ARM yang menjelaskan kluster AKS yang memenuhi persyaratan di bidang pembatasan dapat ditemukan |
uiDefinition | String | Jalur lokal tempat file JSON yang menjelaskan pengalaman portal Azure Create dapat ditemukan |
registryServer | String | ACR tempat bundel CNAB akhir harus didorong |
extensionRegistrationParameters | Koleksi | Spesifikasi untuk parameter pendaftaran ekstensi. Sertakan setidaknya defaultScope dan sebagai parameter. |
defaultScope | String | Cakupan default untuk penginstalan ekstensi Anda. Nilai yang diterima adalah cluster atau namespace . Jika cluster cakupan diatur, maka hanya satu instans ekstensi yang diizinkan per kluster. Jika namespace cakupan dipilih, maka hanya satu instans yang diizinkan per namespace layanan. Karena kluster Kubernetes dapat memiliki beberapa namespace, beberapa instans ekstensi dapat ada. |
namespace | String | (Opsional) Tentukan namespace tempat ekstensi diinstal. Properti ini diperlukan ketika defaultScope diatur ke cluster . Untuk pembatasan penamaan namespace, lihat Namespace layanan dan DNS. |
supportedClusterTypes | Koleksi | (Opsional) Tentukan jenis kluster yang didukung oleh aplikasi. Jenis yang diizinkan adalah - "managedClusters", "connectedClusters". "managedClusters" mengacu pada kluster Azure Kubernetes Service (AKS). "connectedClusters" mengacu pada kluster Kubernetes dengan dukungan Azure Arc. Jika supportedClusterTypes tidak disediakan, semua distribusi 'managedClusters' didukung secara default. Jika supportedClusterTypes disediakan, dan jenis kluster tingkat atas tertentu tidak disediakan, maka semua distribusi dan versi Kubernetes untuk jenis kluster tersebut diperlakukan sebagai tidak didukung. Untuk setiap jenis kluster, tentukan daftar satu atau beberapa distribusi dengan properti berikut: -Distribusi - distribusiSupported - unsupportedVersions |
distribusi | List | Array distribusi yang sesuai dengan jenis kluster. Berikan nama distribusi tertentu. Atur nilai ke ["Semua"] untuk menunjukkan semua distribusi didukung. |
distributionSupported | Boolean | Nilai boolean yang menunjukkan apakah distribusi yang ditentukan didukung. Jika false, menyediakan UnsupportedVersions menyebabkan kesalahan. |
unsupportedVersions | List | Daftar versi untuk distribusi yang ditentukan yang tidak didukung. Operator yang didukung: - "=" Versi yang diberikan tidak didukung. Misalnya, "=1.2.12" - ">" Semua versi yang lebih besar dari versi yang diberikan tidak didukung. Misalnya, ">1.1.13" - "<" Semua versi yang kurang dari versi yang diberikan tidak didukung. Misalnya, "<1.3.14" - "..." Semua versi dalam rentang tidak didukung. Misalnya, "1.1.2...1.1.15" (termasuk nilai sisi kanan dan mengecualikan nilai sisi kiri) |
Untuk sampel yang dikonfigurasi untuk aplikasi pemungutan suara, lihat contoh file manifes berikut.
Menyusun aplikasi Anda
Tempatkan createUiDefinition, templat ARM, dan file manifes di samping bagan Helm aplikasi Anda.
Untuk contoh direktori yang terstruktur dengan benar, lihat Sampel Azure Vote.
Untuk sampel aplikasi voting yang mendukung kluster Kubernetes dengan dukungan Azure Arc, lihat Sampel khusus ConnectedCluster .
Untuk sampel aplikasi voting yang mendukung kluster Azure Kubernetes Service (AKS) dan kluster Kubernetes dengan dukungan Azure Arc, lihat Sampel Kluster Yang Terhubung dan Terkelola.
Untuk informasi selengkapnya tentang cara menyiapkan kluster Kubernetes dengan dukungan Azure Arc untuk memvalidasi aplikasi, lihat Mulai Cepat: Menyambungkan kluster Kubernetes yang ada ke Azure Arc.
Menggunakan alat pengemasan kontainer
Setelah Anda menambahkan semua artefak yang diperlukan, jalankan alat container-package-app
pengemasan .
Karena CNAB adalah format baru dan memiliki kurva pembelajaran, kami telah membuat gambar Docker untuk container-package-app
dengan lingkungan bootstrapping dan alat yang diperlukan untuk berhasil menjalankan alat pengemasan.
Anda memiliki dua opsi untuk menggunakan alat pengemasan. Anda dapat menggunakannya secara manual atau mengintegrasikannya ke dalam alur penyebaran.
Menjalankan alat pengemasan secara manual
Gambar terbaru alat pengemasan dapat ditarik dari mcr.microsoft.com/container-package-app:latest
.
Perintah Docker berikut menarik gambar alat pengemasan terbaru dan juga memasang direktori.
Dengan asumsi ~\<path-to-content>
adalah direktori yang berisi konten yang akan dikemas, perintah docker berikut dipasang ~/<path-to-content>
ke /data
dalam kontainer. Pastikan untuk mengganti ~/<path-to-content>
dengan lokasi aplikasi Anda sendiri.
docker pull mcr.microsoft.com/container-package-app:latest
docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/<path-to-content>:/data --entrypoint "/bin/bash" mcr.microsoft.com/container-package-app:latest
Jalankan perintah berikut di container-package-app
shell kontainer. Pastikan untuk mengganti <registry-name>
dengan nama ACR Anda:
export REGISTRY_NAME=<registry-name>
az login
az acr login -n $REGISTRY_NAME
cd /data/<path-to-content>
Untuk mengautentikasi ACR, ada dua opsi. Salah satu opsinya adalah dengan menggunakan az login
seperti yang ditunjukkan sebelumnya, dan opsi kedua adalah melalui docker dengan menjalankan docker login 'yourACRname'.azurecr.io
. Masukkan nama pengguna dan kata sandi Anda (nama pengguna harus menjadi nama ACR Anda dan kata sandi adalah kunci yang dihasilkan yang disediakan dalam portal Azure) dan jalankan.
docker login <yourACRname.azurecr.io>
Selanjutnya, jalankan cpa verify
untuk melakukan iterasi melalui artefak dan validasi satu per satu. Atasi kegagalan apa pun, dan jalankan cpa buildbundle
saat Anda siap untuk mengemas dan mengunggah CNAB ke Azure Container Registry Anda. cpa buildbundle
Perintah ini juga menjalankan proses verifikasi sebelum membangun
cpa verify
cpa buildbundle
Catatan
Gunakan cpa buildbundle --force
hanya jika Anda ingin menimpa tag yang sudah ada. Jika Anda telah melampirkan CNAB ini ke penawaran Marketplace Azure, tambahkan versi dalam file manifes.
Mengintegrasikan ke dalam Azure Pipeline
Untuk contoh cara mengintegrasikan container-package-app
ke dalam Azure Pipeline, lihat contoh Azure Pipeline
Pemecahan Masalah
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk