פריסת תמונת הגורם המכיל בשירות 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, הקובץ מכיל פריסה ושירות. הפריסה משמשת לניהול ערכה של פודים, והשירות משמש כדי לאפשר גישת רשת לפודים. התצורה של הפודים נקבעה למשיכה של תמונה יחידה, <AZ_CONTAINER_REGISTRY>.azurecr.io/flightbookingsystemsample:latestמ- Azure Container Registry. תצורת השירות נקבעה לאפשר תעבורת תא HTTP נכנסת ליציאה 8080, בדומה לאיך שהרץ את תמונת הגורם המכיל באופן מקומי עם -p ארגומנט היציאה.

אם הפריסה הצליחה, כעת יש לך אשכול AKS. קבע את תצורת ממשק שורת הפקודה של Azure כדי לגשת לאשכול 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