نشر صورة الحاوية إلى خدمة Azure Kubernetes
في هذه الوحدة، يمكنك نشر صورة حاوية إلى Azure Kubernetes Service (AKS). باستخدام AKS، يمكنك تكوين مجموعة Kubernetes الخاصة بك للتشغيل في الحالة المطلوبة عبر التوزيع، وهي عملية توفير تحديثات تعريفية للقرون ومجموعات النسخ المتماثلة. يتم إدارة إعلان الحالة هذا في ملف YAML البيان، وتغيير وحدة تحكم Kubernetes الحالة الحالية إلى الحالة المعلنة عند توجيهها. يمكنك إنشاء ملف بيان deployment.yml هذا وإرشاد مثيل AKS الخاص بك للتشغيل في الحالة المطلوبة مع وحدات الجراب المكونة لسحب وتشغيل flightbookingsystemsample صورة الحاوية المضمنة في سجل حاوية Azure الذي قمت بدفعه في الوحدة السابقة. بدون ملف البيان هذا، يجب عليك إنشاء القرون وتحديثها وحذفها يدويا، بدلا من السماح ل Kubernetes بتنسيق العملية.
ملاحظه
إذا تم إيقاف جلسة العمل الخاصة بك أو كنت تقوم بهذه الخطوة في نقطة زمنية أخرى أو من CLI آخر، فقد تضطر إلى إعادة تهيئة متغيرات البيئة وإعادة المصادقة باستخدام الأوامر التالية:
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
نشر صورة حاوية
الآن يمكنك نشر صورة الحاوية flightbookingsystemsample إلى مجموعة AKS الخاصة بك. ضمن المجلد الجذر لمشروعك، Flight-Booking-System-JavaServlets_App/Project/Airlines، أنشئ ملفا باسم deployment.yml باستخدام الأمر التالي:
vi deployment.yml
أضف المحتويات التالية إلى deployment.yml، ثم قم بالحفظ والخروج. تأكد من استبدال <AZ_CONTAINER_REGISTRY> العنصر النائب بقيمة AZ_CONTAINER_REGISTRY متغير البيئة التي قمت بتعيينها مسبقا. للحفظ والخروج، اضغط على ESC، واكتب :wq!، ثم اضغط على مفتاح الإدخال 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
ملاحظه
اختياريا، يمكنك استخدام ملف deployment_solution.yml في المجلد الجذر لمشروعك، والذي يحتوي على المحتويات التي تحتاج إليها. قد تجد أنه من الأسهل إعادة تسمية محتويات هذا الملف أو تحديثها.
في deployment.yml السابق، يحتوي الملف على توزيع وخدمة. يتم استخدام النشر لإدارة مجموعة من pods، ويتم استخدام الخدمة للسماح بالوصول إلى الشبكة إلى pods. يتم تكوين pods لسحب صورة واحدة، ، <AZ_CONTAINER_REGISTRY>.azurecr.io/flightbookingsystemsample:latestمن Azure Container Registry. تم تكوين الخدمة للسماح بحركة مرور حاوية HTTP الواردة إلى المنفذ 8080، على غرار الطريقة التي قمت بها بتشغيل صورة الحاوية محليا باستخدام وسيطة -p المنفذ.
إذا نجح النشر، فلديك الآن نظام مجموعة AKS. قم بتكوين Azure CLI للوصول إلى مجموعة AKS الخاصة بك عبر kubectl الأمر . تثبيت kubectl محليا باستخدام الأمر التالي:
az aks install-cli
تكوين kubectl للاتصال بمجموعة AKS باستخدام الأمر التالي:
az aks get-credentials \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_KUBERNETES_CLUSTER
الإخراج التالي نموذجي:
Merged AZ_KUBERNETES_CLUSTER as current context in ~/.kube/config
استخدم AKS لتطبيق deployment.yml التغييرات على نظام المجموعة باستخدام الأمر التالي:
kubectl apply -f deployment.yml
الإخراج التالي نموذجي:
deployment.apps/flightbookingsystemsample created
service/flightbookingsystemsample created
راقب حالة النشر باستخدام الأمر التالي:
kubectl get all
الإخراج التالي نموذجي:
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
إذا كانت حالة POD الخاصة بك Running، فيجب أن يكون التطبيق قابلا للوصول. عرض سجلات التطبيق داخل كل جراب باستخدام الأمر التالي:
kubectl logs pod/flightbookingsystemsample-<pod-identifier-from-your-running-pod>
الإخراج التالي نموذجي:
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
EXTERNAL-IP استخدم من الإخراج للوصول kubectl get services flightbookingsystemsample إلى التطبيق قيد التشغيل داخل AKS. الإخراج التالي نموذجي:
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
ملاحظه
استبدل عنوان <external-IP> IP في عنوان URL التالي بقيمتك EXTERNAL-IP من الأمر الذي قمت بتنفيذه مسبقا:
افتح متصفحا وقم بزيارة الصفحة المقصودة لنموذج نظام حجز الطيران في http://<external-IP>:8080/AirlinesReservationSample/. يجب أن يبدو المستعرض مشابها للقطة الشاشة التالية:
يمكنك اختياريا تسجيل الدخول مع أي مستخدم من tomcat-users.xml - على سبيل المثال، someuser@azure.com: password.
تنظيف الموارد
قد تتحمل الموارد التي أنشأتها في هذه الوحدة النمطية تكاليف مستمرة. لتنظيف الموارد، احذف مجموعة الموارد التي تحتوي عليها، باستخدام الأمر التالي:
az group delete --name $AZ_RESOURCE_GROUP