Bagikan melalui


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:

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.

Diagram yang menunjukkan tiga tahap pemrosesan bundel, mengalir dari 'Salin bundel ke registri milik Microsoft' ke 'Pemindaian kerentanan' ke 'Pendaftaran jenis ekstensi'.

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:

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 file deployment.yaml templat bagan Helm Anda untuk mengarahkan gambar-gambar ini. Ini memastikan blok gambar dapat diperbarui untuk mereferensikan gambar ACR Marketplace Azure. Cuplikan layar memperlihatkan contoh referensi dukungan penambahan tag yang diperluas.Cuplikan layar memperlihatkan penambahan referensi gambar.

  • 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.yamlutama .

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

    Cuplikan layar memperlihatkan menambahkan contoh referensi dukungan tag.

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.

      Cuplikan layar label pengidentifikasi penagihan yang diformat dengan benar dalam file deployment.yaml. Konten menyerupai file depoyment.yaml sampel yang ditautkan dalam artikel ini.

      Cuplikan layar label pengidentifikasi penagihan yang diformat dengan benar dalam file statefulsets.yaml. Konten menyerupan sampel file statefulsets.yaml yang ditautkan dalam artikel ini.

      Cuplikan layar permintaan sumber daya CPU dalam file daemonsets.yaml. Konten menyerupan sampel file daemonsets.yaml yang ditautkan dalam artikel ini.

      Cuplikan layar permintaan sumber daya CPU dalam file pods.yaml. Konten menyerupan contoh file pods.yaml yang ditautkan dalam artikel ini.

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

    Cuplikan layar permintaan sumber daya CPU dalam file pods.yaml. Konten menyerupan sampel per file model penagihan inti yang ditautkan dalam artikel ini.

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

Cuplikan layar penagihan pengukuran kustom.

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:

Sampel file parameter pengujian. Setelah file parameter pengujian dibuat, tambahkan ke file manifes Anda:

Contoh file parameter pengujian yang dibuat.

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:

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:

Cuplikan layar contoh createUiDefinition yang ditautkan dalam artikel ini. Definisi untuk 'value1' dan 'value2' ditampilkan.

Parameter diekspor melalui bagian outputs :

Cuplikan layar contoh createUiDefinition yang ditautkan dalam artikel ini. Baris output untuk judul aplikasi, 'value1', dan 'value2' ditampilkan.

Dari sana, nilai diteruskan ke templat Azure Resource Manager dan disebarkan ke bagan Helm selama penyebaran:

Cuplikan layar contoh templat Azure Resource Manager yang ditautkan dalam artikel ini. Di bagian 'configurationSettings', parameter untuk judul aplikasi, 'value1', dan 'value2' ditampilkan.

Terakhir, nilai diteruskan ke bagan Helm seperti values.yaml yang ditunjukkan.

Cuplikan layar contoh bagan Helm yang ditautkan dalam artikel ini. Nilai untuk judul aplikasi, 'value1', dan 'value2' ditampilkan.

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

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>

Cuplikan layar perintah masuk docker di CLI.

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

Cuplikan layar perintah verifikasi cpa di CLI.

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