ปรับใช้รูปภาพคอนเทนเนอร์กับบริการ Azure Kubernetes

เสร็จสมบูรณ์เมื่อ

ในหน่วยนี้ คุณปรับใช้รูปภาพคอนเทนเนอร์กับ Azure Kubernetes Service (AKS) ด้วย AKS คุณสามารถกําหนดค่าคลัสเตอร์ Kubernetes ของคุณให้ทํางานในสถานะที่ต้องการผ่าน การปรับใช้ซึ่งเป็นกระบวนการของการจัดหาการอัปเดตที่เปิดเผยไปยัง pods และ ReplicaSets การประกาศของรัฐนี้ได้รับการจัดการในไฟล์ YAML ที่แสดงอยู่ และตัวควบคุม Kubernetes จะเปลี่ยนสถานะปัจจุบันเป็นสถานะที่ประกาศเมื่อได้รับคําแนะนํา คุณสร้างไฟล์ รายชื่อ deployment.yml และแนะนําอินสแตนซ์ AKS ของคุณให้ทํางานในสถานะที่ต้องการด้วย pods ที่กําหนดค่าเพื่อดึงและเรียกใช้ flightbookingsystemsample รูปภาพคอนเทนเนอร์ที่มีอยู่ในรีจิสทรีคอนเทนเนอร์ Azure ที่คุณส่งในหน่วยก่อนหน้า หากไม่มีไฟล์แสดงรายการนี้ คุณต้องสร้าง อัปเดต และลบ pods ด้วยตนเองแทนที่จะให้ 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 pod ขาเข้าไปยังพอร์ต 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จะสามารถเข้าถึงแอปได้ ดูบันทึกแอปภายในแต่ละ pod โดยใช้คําสั่งต่อไปนี้:

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 จากคําสั่งที่คุณดําเนินการก่อนหน้านี้:

เปิดเบราว์เซอร์และไปที่หน้า Landing Page ตัวอย่างการจองเที่ยวบินที่http://<external-IP>:8080/AirlinesReservationSample/ เบราว์เซอร์ของคุณควรมีลักษณะคล้ายกับสกรีนช็อตต่อไปนี้:

สกรีนช็อตที่แสดงแอปที่ทํางานอยู่

คุณสามารถเลือกที่จะลงชื่อเข้าใช้ด้วยผู้ใช้ทุกคนจาก tomcat-users.xml - ตัวอย่างเช่น someuser@azure.com: password

ล้างแหล่งข้อมูล

ทรัพยากรที่คุณสร้างขึ้นในโมดูลนี้อาจมีค่าใช้จ่ายต่อเนื่อง เมื่อต้องการล้างทรัพยากร ให้ลบกลุ่มทรัพยากรที่มีทรัพยากรดังกล่าวโดยใช้คําสั่งต่อไปนี้:

az group delete --name $AZ_RESOURCE_GROUP