Menyebarkan dari registri kontainer privat ke Kubernetes lokal menggunakan Azure Container Registry dan AKS Arc
Berlaku untuk: Azure Stack HCI, versi 23H2
Artikel ini menjelaskan cara menyebarkan gambar kontainer dari registri kontainer privat menggunakan Azure Container Registry, yang dapat Anda jalankan di pusat data Anda sendiri dalam penyebaran AKS Arc. Anda menyebarkan ke kluster Kubernetes lokal yang dihosting oleh AKS. Azure Container Registry memungkinkan Anda membangun, menyimpan, dan mengelola gambar dan artefak kontainer dalam registri pribadi untuk semua jenis penyebaran kontainer.
Artikel ini menjelaskan cara membuat registri kontainer privat di Azure dan mendorong gambar kontainer Anda ke registri kontainer privat. Anda kemudian dapat menyebarkan dari registri privat ke kluster Kubernetes lokal yang dihosting di AKS Arc.
Untuk informasi selengkapnya tentang Azure Container Registry, lihat dokumentasi Azure Container Registry.
Prasyarat
Pastikan Anda telah menyiapkan persyaratan berikut:
- Pemahaman dasar tentang konsep Kubernetes.
- Kluster AKS yang aktif dan berjalan.
- CLI Azure yang terpasang
- Lingkungan kubectl lokal Anda dikonfigurasi untuk menunjuk ke kluster AKS Anda.
Membuat registri kontainer privat di Azure
Untuk membuat registri kontainer, mulailah dengan grup sumber daya. Grup sumber daya Azure adalah kontainer logis yang disebarkan dan dikelola sumber daya Azure. Buat grup sumber daya dengan perintah az group create
. Contoh berikut membuat grup sumber daya di wilayah eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Buat instans Container Registry dengan perintah az acr create , dan berikan nama registri Anda sendiri. Nama registri harus unik dalam Azure dan berisi 5 hingga 50 karakter alfanumerik. Di sisa artikel ini, <acrName>
digunakan sebagai tempat penampung untuk nama registri kontainer, tetapi Anda dapat memberikan nama registri unik Anda sendiri. SKU Dasar adalah titik masuk yang dioptimalkan biaya untuk tujuan pengembangan yang menyediakan keseimbangan penyimpanan dan throughput:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Setelah membuat registri kontainer, gunakan perintah berikut untuk membuat perwakilan layanan, sehingga Anda dapat mengakses registri kontainer dari Kubernetes:
az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>
Azure Container Registry mendukung tiga peran akses. Peran Kontributor paling sering digunakan oleh pengembang aplikasi. Namun, dalam skenario dunia nyata, Anda mungkin perlu membuat beberapa perwakilan layanan tergantung pada jenis akses yang diperlukan:
- Kontributor: Peran ini menawarkan akses pendorongan dan penarikan ke repositori.
- Pembaca: Peran ini hanya mengizinkan akses penarikan ke repositori.
- Pemilik: Peran ini memungkinkan Anda untuk menetapkan peran ke pengguna lain, selain akes pendorongan dan penarikan ke repositori.
Perintah sebelumnya harus menghasilkan output yang mirip dengan teks berikut:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Setelah perwakilan layanan berhasil dibuat, salin appId dan kata sandi di lokasi yang aman, untuk digunakan nanti dalam penyebaran Anda.
Untuk informasi selengkapnya tentang bekerja dengan perwakilan layanan dan Azure Container Registry, lihat autentikasi Azure Container Registry dengan perwakilan layanan.
Masuk ke registri kontainer pribadi
Untuk menggunakan instans Container Registry, Anda harus terlebih dahulu masuk. Anda dapat menggunakan Azure CLI atau Docker CLI untuk masuk.
Opsi 1: Masuk dari Azure CLI
Gunakan perintah masuk az acr dan berikan nama unik yang ditetapkan ke registri kontainer di langkah sebelumnya:
az acr login --name <REGISTRY_NAME>
Opsi 2: Masuk dari Docker CLI
Untuk menggunakan Docker CLI untuk mengakses registri kontainer Anda, ketik perintah berikut di terminal Bash atau PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
Di salah satu opsi, perintah harus mengembalikan pesan masuk berhasil saat selesai.
Mendorong gambar ke registri kontainer
Setelah berhasil masuk, Anda dapat mulai mendorong gambar ke Container Registry. Pertama, jalankan perintah gambar docker untuk melihat daftar gambar di komputer lokal Anda:
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB
poemfinder-app latest 2d9bef425603 6 months ago 208MB
Untuk memulai, tandai gambar menggunakan perintah docker tag
, lalu gunakan docker push
untuk mendorongnya ke registri kontainer:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Verifikasi bahwa gambar ditandai dengan benar dengan menjalankan perintah gambar docker lagi. Setelah mengonfirmasi, jalankan docker push
untuk mendorong ke registri kontainer, sebagai berikut:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Untuk mengonfirmasi bahwa gambar berhasil didorong ke registri kontainer, jalankan perintah berikut:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Menyebarkan gambar dari registri kontainer ke AKS
Untuk menyebarkan citra kontainer dari registri kontainer ke kluster Kubernetes, buat Rahasia Kubernetes untuk menyimpan kredensial registri Anda. Kubernetes menggunakan rahasia penarikan gambar untuk menyimpan informasi yang diperlukan untuk diautentikasi ke registri. Untuk membuat rahasia penarikan untuk registri kontainer, Anda memberikan ID perwakilan layanan, kata sandi, dan URL registri:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
Tabel berikut menjelaskan parameter input:
Nilai | Deskripsi |
---|---|
secret-name |
Nama gambar menarik rahasia; misalnya, acr-secret . |
namespace |
Namespace Layanan Kubernetes untuk menempatkan rahasia. Hanya diperlukan jika Anda ingin menempatkan rahasia di namespace selain namespace default. |
<REGISTRY_NAME> |
Nama registri kontainer Anda. Contohnya,myregistry .
--docker-server adalah nama server masuk registri yang sepenuhnya memenuhi syarat. |
appId |
ID perwakilan layanan yang digunakan Kubernetes untuk mengakses registri Anda. |
password |
Kata sandi perwakilan layanan. |
Setelah membuat rahasia penarikan gambar, Anda dapat menggunakannya untuk membuat pod dan penyebaran Kubernetes. Berikan nama rahasia di bawah imagePullSecrets
dalam file penyebaran, seperti yang ditunjukkan dalam contoh berikut:
apiVersion: v1
kind: Pod
metadata:
name: poemfinder-app
namespace: mydemoapps
spec:
containers:
- name: poemfinder-app
image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: acr-secret
Dalam contoh ini, poemfinder-app:v1.0
adalah nama gambar yang akan ditarik dari registri kontainer, dan acr-secret
merupakan nama rahasia penarikan yang Anda buat untuk mengakses registri. Saat Anda menyebarkan pod, Kubernetes secara otomatis menarik citra dari registri Anda jika gambar belum ada di kluster.
Anda dapat menyimpan konfigurasi pod di atas dalam file seperti pod-example.yaml lalu menyebarkannya ke Kubernetes, sebagai berikut:
kubectl create -f pod-example.yaml
Untuk mengonfirmasi bahwa pod berhasil dibuat menggunakan gambar kontainer dari registri kontainer, jalankan kubectl describe pod <POD_NAME>, yang harus menampilkan gambar kontainer yang digunakan untuk membuat pod.