Menyebarkan gambar kontainer ke Azure Kubernetes Service
Di unit ini, Anda menyebarkan gambar kontainer ke Azure Kubernetes Service (AKS). Dengan AKS, Anda mengonfigurasi kluster Kubernetes untuk berjalan dalam keadaan yang diinginkan melalui penyebaran, yang merupakan proses penyediaan pembaruan deklaratif untuk pod dan ReplicaSets. Deklarasi status ini dikelola dalam file YAML manifes, dan pengontrol Kubernetes mengubah status saat ini ke status yang dinyatakan ketika diinstruksikan. Anda membuat file manifes deployment.yml ini dan menginstruksikan instans AKS Anda untuk berjalan dalam keadaan yang diinginkan dengan pod yang dikonfigurasi untuk menarik dan menjalankan flightbookingsystemsample gambar kontainer yang terkandung dalam registri kontainer Azure yang Anda dorong di unit sebelumnya. Tanpa file manifes ini, Anda harus membuat, memperbarui, dan menghapus pod secara manual, alih-alih membiarkan Kubernetes mengatur proses.
Nota
Jika sesi Anda telah berhenti karena tidak aktif, atau jika Anda melakukan langkah ini pada waktu atau dari CLI yang berbeda, Anda mungkin harus menginisialisasi ulang variabel lingkungan dan mengotentikasi ulang dengan menggunakan perintah berikut:
export AZ_RESOURCE_GROUP=java-containerization-demo-rg
export AZ_CONTAINER_REGISTRY=<your-container-registry>
export AZ_KUBERNETES_CLUSTER=java-containerization-demo-aks
export AZ_LOCATION=<your-Azure-region>
export AZ_KUBERNETES_CLUSTER_DNS_PREFIX=<your-unique-DNS-prefix-to-access-your-AKS-cluster>
az login
az acr login --name $AZ_CONTAINER_REGISTRY
Menyebarkan gambar kontainer
Sekarang Anda menyebarkan flightbookingsystemsample gambar kontainer ke kluster AKS Anda. Dalam folder akar proyek Anda, Flight-Booking-System-JavaServlets_App/Project/Airlines, buat file bernama deployment.yml dengan menggunakan perintah berikut:
vi deployment.yml
Tambahkan konten berikut ke deployment.yml, lalu simpan dan keluar. Pastikan untuk mengganti <AZ_CONTAINER_REGISTRY> tempat penampung dengan nilai dari variabel lingkungan AZ_CONTAINER_REGISTRY yang Anda tetapkan sebelumnya. Untuk menyimpan dan keluar, tekan ESC, ketik :wq!, lalu tekan Enter.
apiVersion: apps/v1
kind: Deployment
metadata:
name: flightbookingsystemsample
spec:
replicas: 1
selector:
matchLabels:
app: flightbookingsystemsample
template:
metadata:
labels:
app: flightbookingsystemsample
spec:
containers:
- name: flightbookingsystemsample
image: <AZ_CONTAINER_REGISTRY>.azurecr.io/flightbookingsystemsample:latest
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "2"
memory: "2Gi"
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: flightbookingsystemsample
spec:
type: LoadBalancer
ports:
- port: 8080
targetPort: 8080
selector:
app: flightbookingsystemsample
Nota
Secara opsional, Anda dapat menggunakan file deployment_solution.yml di folder akar proyek Anda, yang berisi konten yang Anda butuhkan. Anda mungkin merasa lebih mudah untuk mengganti nama atau memperbarui konten file tersebut.
Di deployment.yml sebelumnya, file berisi penyebaran dan layanan. Penyebaran digunakan untuk mengelola sekumpulan pod, dan layanan digunakan untuk mengizinkan akses jaringan ke sekumpulan pod. Pod dikonfigurasi untuk mengambil satu citra, <AZ_CONTAINER_REGISTRY>.azurecr.io/flightbookingsystemsample:latest, dari Azure Container Registry. Layanan ini dikonfigurasi untuk memungkinkan lalu lintas pod HTTP masuk ke port 8080, mirip dengan cara Anda menjalankan gambar kontainer secara lokal dengan -p argumen port.
Jika penyebaran berhasil, Anda sekarang memiliki kluster AKS. Konfigurasikan Azure CLI Anda untuk mengakses kluster AKS Anda melalui kubectl perintah . Instal kubectl secara lokal dengan menggunakan perintah berikut:
az aks install-cli
Konfigurasikan kubectl untuk menyambungkan ke kluster AKS Anda dengan menggunakan perintah berikut:
az aks get-credentials \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_KUBERNETES_CLUSTER
Output berikut ini umum:
Merged AZ_KUBERNETES_CLUSTER as current context in ~/.kube/config
Gunakan AKS untuk menerapkan perubahan deployment.yml pada kluster Anda dengan menggunakan perintah berikut:
kubectl apply -f deployment.yml
Output berikut ini umum:
deployment.apps/flightbookingsystemsample created
service/flightbookingsystemsample created
Pantau status penyebaran dengan menggunakan perintah berikut:
kubectl get all
Output berikut ini umum:
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/flightbookingsystemsample-b7fd6684f-4j8vf 1/1 Running 0 37s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/flightbookingsystemsample LoadBalancer 10.0.62.153 <external-IP> 8080:30534/TCP 37s
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 11h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/flightbookingsystemsample 1/1 1 1 37s
NAME DESIRED CURRENT READY AGE
replicaset.apps/flightbookingsystemsample-b7fd6684f 1 1 1 37s
Jika status POD Anda adalah Running, maka aplikasi harus dapat diakses. Lihat log aplikasi dalam setiap pod dengan menggunakan perintah berikut:
kubectl logs pod/flightbookingsystemsample-<pod-identifier-from-your-running-pod>
Output berikut ini umum:
kubectl logs pod/flightbookingsystemsample-b7fd6684f-4j8vf
15-Nov-2024 12:31:51.208 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.1.33
15-Nov-2024 12:31:51.211 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Nov 7 2024 22:28:55 UTC
15-Nov-2024 12:31:51.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.1.33.0
15-Nov-2024 12:31:51.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
15-Nov-2024 12:31:51.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.15.0-1074-azure
15-Nov-2024 12:31:51.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
15-Nov-2024 12:31:51.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/msopenjdk-17
15-Nov-2024 12:31:51.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 17.0.13+11-LTS
15-Nov-2024 12:31:51.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Microsoft
15-Nov-2024 12:31:51.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
15-Nov-2024 12:31:51.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
15-Nov-2024 12:31:51.226 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
15-Nov-2024 12:31:51.226 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
15-Nov-2024 12:31:51.227 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
15-Nov-2024 12:31:51.227 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
15-Nov-2024 12:31:51.227 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
15-Nov-2024 12:31:51.227 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
15-Nov-2024 12:31:51.228 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
15-Nov-2024 12:31:51.228 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
15-Nov-2024 12:31:51.228 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
15-Nov-2024 12:31:51.229 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
15-Nov-2024 12:31:51.229 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
15-Nov-2024 12:31:51.229 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
15-Nov-2024 12:31:51.229 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
15-Nov-2024 12:31:51.231 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
15-Nov-2024 12:31:51.565 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
15-Nov-2024 12:31:51.602 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [616] milliseconds
15-Nov-2024 12:31:51.658 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
15-Nov-2024 12:31:51.659 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.33]
15-Nov-2024 12:31:51.689 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/AirlinesReservationSample.war]
15-Nov-2024 12:31:53.264 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
15-Nov-2024 12:31:55.155 INFO [main] com.sun.xml.ws.server.MonitorBase.createRoot Metro monitoring rootname successfully set to: com.sun.metro:pp=/,type=WSEndpoint,name=/AirlinesReservationSample-PriceAndSeats-PriceAndSeatsPort
15-Nov-2024 12:31:55.347 INFO [main] com.sun.xml.ws.transport.http.servlet.WSServletDelegate.<init> WSSERVLET14: XML-WS servlet initializing
WARNING:Error in the metadata of the table SEATS: table's row count in the metadata is 5 but 6 records have been found and loaded by UCanAccess. All will work fine, but it's better to repair your database.
15-Nov-2024 12:31:56.248 INFO [main] com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized WSSERVLET12: XML-WS context listener initializing
15-Nov-2024 12:31:56.249 INFO [main] com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized WSSERVLET12: XML-WS context listener initializing
15-Nov-2024 12:31:56.284 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/AirlinesReservationSample.war] has finished in [4,595] ms
15-Nov-2024 12:31:56.285 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs]
15-Nov-2024 12:31:56.315 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [30] ms
15-Nov-2024 12:31:56.316 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
15-Nov-2024 12:31:56.439 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [123] ms
15-Nov-2024 12:31:56.440 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
15-Nov-2024 12:31:56.456 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [16] ms
15-Nov-2024 12:31:56.457 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
15-Nov-2024 12:31:56.468 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [11] ms
15-Nov-2024 12:31:56.468 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
15-Nov-2024 12:31:56.481 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [13] ms
15-Nov-2024 12:31:56.484 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
15-Nov-2024 12:31:56.501 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [4897] milliseconds
Gunakan EXTERNAL-IP dari output kubectl get services flightbookingsystemsample Anda untuk mengakses aplikasi yang sedang berjalan dalam AKS. Output berikut ini umum:
kubectl get services flightbookingsystemsample
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
flightbookingsystemsample LoadBalancer 10.0.62.153 <external-IP> 8080:30534/TCP 3m28s
Nota
Ganti alamat <external-IP> IP di URL berikut dengan nilai Anda EXTERNAL-IP dari perintah yang sebelumnya Anda jalankan:
Buka browser dan kunjungi contoh halaman muka Sistem Pemesanan Penerbangan di http://<external-IP>:8080/AirlinesReservationSample/. Browser Anda akan terlihat mirip dengan cuplikan layar berikut:
Anda dapat secara opsional masuk dengan pengguna mana pun dari tomcat-users.xml - misalnya, someuser@azure.com: password.
Membersihkan sumber daya
Sumber daya yang Anda buat dalam modul ini mungkin dikenakan biaya berkelanjutan. Untuk membersihkan sumber daya, hapus grup sumber daya yang berisinya, dengan menggunakan perintah berikut:
az group delete --name $AZ_RESOURCE_GROUP