Menyebarkan aplikasi yang menggunakan OpenAI di Azure Kubernetes Service (AKS)
Dalam artikel ini, Anda mempelajari cara menyebarkan aplikasi yang menggunakan Azure OpenAI atau OpenAI di AKS. Dengan OpenAI, Anda dapat dengan mudah mengadaptasi model AI yang berbeda, seperti pembuatan konten, ringkasan, pencarian semantik, dan bahasa alami untuk pembuatan kode, untuk tugas spesifik Anda. Anda mulai dengan menyebarkan kluster AKS di langganan Azure Anda. Kemudian, Anda menyebarkan layanan OpenAI dan aplikasi sampel.
Sampel aplikasi asli cloud mewakili implementasi dunia nyata. Aplikasi multi-kontainer terdiri dari aplikasi yang ditulis dalam beberapa bahasa dan kerangka kerja, termasuk:
- Golang dengan Gin
- Karat dengan Actix-Web
- JavaScript dengan Vue.js dan Fastify
- Python dengan FastAPI
Aplikasi ini menyediakan ujung depan bagi pelanggan dan admin toko, REST API untuk mengirim data ke antrean pesan RabbitMQ dan database MongoDB, dan aplikasi konsol untuk mensimulasikan lalu lintas.
Catatan
Kami tidak menyarankan untuk menjalankan kontainer stateful, seperti MongoDB dan Rabbit MQ, tanpa penyimpanan persisten untuk produksi. Kami menggunakannya di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure CosmosDB atau Azure Bus Layanan.
Untuk mengakses basis kode GitHub untuk aplikasi sampel, lihat Demo Penyimpanan AKS.
- Anda memerlukan akun Azure dengan langganan aktif. Jika Anda tidak memilikinya, buat akun secara gratis.
- Untuk demo ini, Anda dapat menggunakan layanan Azure OpenAI atau layanan OpenAI.
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Grup sumber daya Azure adalah grup logis tempat Anda menyebarkan dan mengelola sumber daya Azure. Saat membuat grup sumber daya, Anda diminta untuk menentukan lokasi. Lokasi ini adalah lokasi penyimpanan metadata grup sumber daya Anda dan tempat sumber daya Anda berjalan di Azure jika Anda tidak menentukan wilayah lain selama pembuatan sumber daya.
Contoh berikut ini menampilkan cara membuat grup sumber daya bernama myResourceGroup di lokasi eastus.
Buat grup sumber daya menggunakan
az group create
perintah .az group create --name myResourceGroup --location eastus
Contoh output berikut menunjukkan keberhasilan pembuatan grup sumber daya:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
Contoh berikut membuat kluster bernama myAKSCluster di myResourceGroup.
Buat kluster AKS menggunakan
az aks create
perintah .az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Untuk mengelola kluster Kubernetes, Anda menggunakan klien baris perintah Kube, kubectl. kubectl
sudah diinstal jika Anda menggunakan Azure Cloud Shell.
Instal
kubectl
secara lokal menggunakanaz aks install-cli
perintah .az aks install-cli
Catatan
Jika sistem berbasis Linux Anda memerlukan izin yang ditingkatkan, Anda dapat menggunakan
sudo az aks install-cli
perintah .Konfigurasikan
kubectl
untuk terhubung ke kluster Kubernetes menggunakan perintahaz aks get-credentials
.Perintah ini menjalankan operasi berikut:
- Unduh informasi masuk dan konfigurasikan Kube CLI untuk menggunakannya.
- Gunakan
~/.kube/config
, lokasi default untuk file konfigurasi Kube. Tentukan lokasi berbeda untuk file konfigurasi Kubernetes Anda menggunakan argumen --file.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Verifikasi koneksi ke kluster Anda menggunakan
kubectl get
perintah . Perintah ini menampilkan daftar node kluster.kubectl get nodes
Contoh output berikut menunjukkan simpul yang dibuat di langkah-langkah sebelumnya. Pastikan status simpul Siap.
NAME STATUS ROLES AGE VERSION aks-nodepool1-31469198-vmss000000 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000001 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000002 Ready agent 3h29m v1.25.6
Catatan
Untuk kluster privat, simpul mungkin tidak dapat dijangkau jika Anda mencoba menyambungkannya melalui alamat IP publik. Untuk memperbaikinya, Anda perlu membuat titik akhir dalam VNET yang sama dengan kluster yang akan disambungkan. Ikuti instruksi untuk Membuat kluster AKS privat lalu sambungkan ke kluster tersebut.
Manifes aplikasi AKS Store mencakup penyebaran dan layanan Kubernetes berikut:
- Layanan produk: Menampilkan informasi produk.
- Layanan pesanan: Menempatkan pesanan.
- Layanan makeline: Memproses pesanan dari antrean dan menyelesaikan pesanan.
- Simpan depan: Aplikasi web bagi pelanggan untuk melihat produk dan melakukan pemesanan.
- Admin toko: Aplikasi web untuk karyawan toko untuk melihat pesanan dalam antrean dan mengelola informasi produk.
- Pelanggan virtual: Mensimulasikan pembuatan pesanan secara terjadwal.
- Pekerja virtual: Mensimulasikan penyelesaian pesanan secara terjadwal.
- Mongo DB: Instans NoSQL untuk data yang bertahan.
- Rabbit MQ: Antrean pesan untuk antrean pesanan.
Catatan
Kami tidak menyarankan untuk menjalankan kontainer stateful, seperti MongoDB dan Rabbit MQ, tanpa penyimpanan persisten untuk produksi. Kami menggunakannya di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure CosmosDB atau Azure Bus Layanan.
Tinjau manifes YAML untuk aplikasi.
Sebarkan aplikasi menggunakan
kubectl apply
perintah dan tentukan nama manifes YAML Anda.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
Contoh output berikut menunjukkan penyebaran dan layanan yang berhasil dibuat:
deployment.apps/mongodb created service/mongodb created deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/makeline-service created service/makeline-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created deployment.apps/store-admin created service/store-admin created deployment.apps/virtual-customer created deployment.apps/virtual-worker created
Anda dapat menggunakan Azure OpenAI atau OpenAI dan menjalankan aplikasi Anda di AKS.
- Aktifkan Azure OpenAI pada langganan Azure Anda dengan mengisi formulir Minta Akses ke Layanan Azure OpenAI.
- Di portal Azure, buat instans Azure OpenAI.
- Pilih instans Azure OpenAI yang Anda buat.
- Pilih Kunci dan Titik Akhir untuk menghasilkan kunci.
- Pilih Penyebaran Model Penyebaran>Terkelola untuk membuka studio Azure OpenAI.
- Buat penyebaran baru menggunakan model gpt-35-turbo .
Untuk informasi selengkapnya tentang cara membuat penyebaran di Azure OpenAI, lihat Mulai membuat teks menggunakan Azure OpenAI Service.
Sekarang setelah aplikasi disebarkan, Anda dapat menyebarkan layanan mikro berbasis Python yang menggunakan OpenAI untuk secara otomatis menghasilkan deskripsi untuk produk baru yang ditambahkan ke katalog toko.
Buat file bernama
ai-service.yaml
dan salin dalam manifes berikut:apiVersion: apps/v1 kind: Deployment metadata: name: ai-service spec: replicas: 1 selector: matchLabels: app: ai-service template: metadata: labels: app: ai-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: ai-service image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest ports: - containerPort: 5001 env: - name: USE_AZURE_OPENAI value: "True" - name: AZURE_OPENAI_DEPLOYMENT_NAME value: "" - name: AZURE_OPENAI_ENDPOINT value: "" - name: OPENAI_API_KEY value: "" resources: requests: cpu: 20m memory: 50Mi limits: cpu: 50m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: ai-service spec: type: ClusterIP ports: - name: http port: 5001 targetPort: 5001 selector: app: ai-service
Atur variabel
USE_AZURE_OPENAI
lingkungan ke"True"
.Dapatkan nama penyebaran Azure OpenAI Anda dari studio Azure OpenAI dan isi nilainya
AZURE_OPENAI_DEPLOYMENT_NAME
.Dapatkan titik akhir Azure OpenAI dan kunci Azure OpenAI API Anda dari portal Azure dengan memilih Kunci dan Titik Akhir di bilah kiri sumber daya.
AZURE_OPENAI_ENDPOINT
Perbarui danOPENAI_API_KEY
di YAML yang sesuai.Sebarkan aplikasi menggunakan
kubectl apply
perintah dan tentukan nama manifes YAML Anda.kubectl apply -f ai-service.yaml
Contoh output berikut menunjukkan penyebaran dan layanan yang berhasil dibuat:
deployment.apps/ai-service created service/ai-service created
Catatan
Secara langsung menambahkan informasi sensitif, seperti kunci API, ke file manifes Kubernetes Anda tidak aman dan mungkin secara tidak sengaja berkomitmen pada repositori kode. Kami menambahkannya di sini untuk kesederhanaan. Untuk beban kerja produksi, gunakan Identitas Terkelola untuk mengautentikasi ke layanan Azure OpenAI atau menyimpan rahasia Anda di Azure Key Vault.
Periksa status pod yang disebarkan menggunakan perintah kubectl get pods .
kubectl get pods
Pastikan semua pod Berjalan sebelum melanjutkan ke langkah berikutnya.
NAME READY STATUS RESTARTS AGE makeline-service-7db94dc7d4-8g28l 1/1 Running 0 99s mongodb-78f6d95f8-nptbz 1/1 Running 0 99s order-service-55cbd784bb-6bmfb 1/1 Running 0 99s product-service-6bf4d65f74-7cbvk 1/1 Running 0 99s rabbitmq-9855984f9-94nlm 1/1 Running 0 99s store-admin-7f7d768c48-9hn8l 1/1 Running 0 99s store-front-6786c64d97-xq5s9 1/1 Running 0 99s virtual-customer-79498f8667-xzsb7 1/1 Running 0 99s virtual-worker-6d77fff4b5-7g7rj 1/1 Running 0 99s
Dapatkan IP aplikasi web admin toko dan simpan aplikasi web depan menggunakan
kubectl get service
perintah .kubectl get service store-admin
Aplikasi ini mengekspos situs Admin Toko ke internet melalui load balancer publik yang disediakan oleh layanan Kubernetes. Diperlukan beberapa menit untuk menyelesaikan proses ini. IP EKSTERNAL awalnya menunjukkan tertunda hingga layanan muncul dan menunjukkan alamat IP.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-admin LoadBalancer 10.0.142.228 40.64.86.161 80:32494/TCP 50m
Ulangi langkah yang sama untuk layanan bernama 'store-front''.
Buka browser web dan telusuri ke alamat IP eksternal layanan Anda. Dalam contoh yang diperlihatkan di sini, buka 40.64.86.161 untuk melihat Admin Toko di browser. Ulangi langkah yang sama untuk Store Front.
Di admin toko, pilih tab produk, lalu pilih Tambahkan Produk.
Ketika 'ai-service'' berhasil berjalan, Anda akan melihat tombol Ask OpenAI di samping bidang deskripsi. Isi nama, harga, dan kata kunci, lalu buat deskripsi produk dengan memilih Minta OpenAI>Simpan produk.
Sekarang Anda dapat melihat produk baru yang Anda buat di Admin Toko yang digunakan oleh penjual. Dalam gambar, Anda dapat melihat Jungle Monkey Chew Toy ditambahkan.
Anda juga dapat melihat produk baru yang Anda buat di Store Front yang digunakan oleh pembeli. Dalam gambar, Anda dapat melihat Jungle Monkey Chew Toy ditambahkan. Ingatlah untuk mendapatkan alamat IP front penyimpanan menggunakan
kubectl get service
perintah .
Setelah menambahkan fungsionalitas OpenAI ke aplikasi AKS, Anda dapat Mengamankan akses ke Azure OpenAI dari Azure Kubernetes Service (AKS).
Untuk mempelajari selengkapnya tentang kasus penggunaan AI generatif, lihat sumber daya berikut:
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: