Menyebarkan aplikasi Spring Boot ke Azure Kubernetes Service

Nota

Untuk aplikasi Spring Boot, gunakan Azure Container Apps. Namun, Anda masih dapat menggunakan Azure Kubernetes Service sebagai tujuan. Untuk informasi selengkapnya, lihat Memilih layanan Azure yang tepat untuk aplikasi Java Anda.

Tutorial ini menunjukkan kepada Anda cara menggunakan Kubernetes dan Docker untuk mengembangkan dan menyebarkan aplikasi Spring Boot ke Microsoft Azure. Lebih khusus lagi, Anda menggunakan Spring Boot untuk pengembangan aplikasi, Kubernetes untuk penyebaran kontainer, dan Azure Kubernetes Service (AKS) untuk menghosting aplikasi Anda.

Kubernetes dan Docker adalah solusi sumber terbuka yang membantu pengembang mengotomatiskan penyebaran, penskalaan, dan manajemen aplikasi mereka yang berjalan dalam kontainer.

Prasyarat

  • Langganan Azure; jika Anda belum memiliki langganan Azure, aktifkan manfaat pelanggan MSDN Anda atau daftar untuk akun Azure gratis.
  • Antarmuka Command-Line Azure (CLI) .
  • Java Development Kit (JDK) yang didukung. Untuk informasi selengkapnya tentang JDK yang tersedia untuk digunakan saat mengembangkan di Azure, lihat dukungan Java di Azure dan Azure Stack.
  • Alat pengembangan Maven dari Apache (Versi 3).
  • Klien Git.
  • Klien Docker .
  • pembantu kredensial ACR Docker .

Nota

Karena persyaratan virtualisasi tutorial ini, Anda tidak dapat mengikuti langkah-langkah dalam artikel ini pada komputer virtual. Anda harus menggunakan komputer fisik dengan fitur virtualisasi diaktifkan.

Membuat aplikasi web "Getting Started" Spring Boot pada Docker

Langkah-langkah berikut memandu Anda membangun aplikasi web Spring Boot dan mengujinya secara lokal.

  1. Buka prompt perintah dan buat direktori lokal untuk menahan aplikasi Anda, dan ubah ke direktori tersebut; misalnya:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    --atau--

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Kloning proyek sampel Spring Boot di Docker Getting Started ke direktori.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Ubah direktori ke proyek yang telah selesai.

    cd gs-spring-boot-docker
    cd complete
    
  4. Gunakan Maven untuk membuat dan menjalankan aplikasi sampel.

    mvn package spring-boot:run
    
  5. Uji aplikasi web dengan menelusuri ke http://localhost:8080, atau dengan perintah curl berikut:

    curl http://localhost:8080
    
  6. Anda melihat pesan berikut ditampilkan: Hello Docker World

    Telusuri Aplikasi Sampel secara Lokal

Membuat Azure Container Registry menggunakan Azure CLI

  1. Buka jendela perintah.

  2. Masuk ke akun Azure Anda:

    az login
    
  3. Pilih langganan Azure Anda:

    az account set -s <YourSubscriptionID>
    
  4. Buat grup sumber daya untuk sumber daya Azure yang digunakan dalam tutorial ini.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Buat registri kontainer Azure privat di grup sumber daya. Tutorial ini mendorong aplikasi sampel sebagai gambar Docker ke registri ini di langkah selanjutnya. Ganti wingtiptoysregistry dengan nama unik untuk registri Anda.

    az acr create --resource-group wingtiptoys-kubernetes --location eastus \
     --name wingtiptoysregistry --sku Basic
    

Dorong aplikasi Anda ke registri kontainer melalui Jib

  1. Masuk ke Azure Container Registry Anda dari Azure CLI.

    # set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login"
    az config set defaults.acr=wingtiptoysregistry
    az acr login
    
  2. Buka file pom.xml dengan editor teks, seperti Visual Studio Code.

    code pom.xml
    
  3. <properties> Perbarui koleksi dalam file pom.xml dengan nama registri untuk Azure Container Registry Anda dan versi terbaru .jib-maven-plugin

    <properties>
       <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. -->
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version>
       <java.version>1.8</java.version>
    </properties>
    
  4. Perbarui koleksi <plugins> dalam file pom.xml sehingga elemen <plugin> berisi entri untuk jib-maven-plugin, seperti yang ditunjukkan dalam contoh berikut. Gunakan gambar dasar dari Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, yang berisi JDK yang didukung secara resmi untuk Azure. Untuk gambar dasar MCR lainnya dengan JDK yang didukung secara resmi, lihat Menginstal Microsoft Build di OpenJDK.

    <plugin>
      <artifactId>jib-maven-plugin</artifactId>
      <groupId>com.google.cloud.tools</groupId>
      <version>${jib-maven-plugin.version}</version>
      <configuration>
         <from>
             <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image>
         </from>
         <to>
             <image>${docker.image.prefix}/gs-spring-boot-docker</image>
         </to>
      </configuration>
    </plugin>
    
  5. Buka direktori proyek yang telah selesai untuk aplikasi Spring Boot Anda dan jalankan perintah berikut untuk membangun gambar dan dorong gambar ke registri:

    az acr login && mvn compile jib:build
    

Nota

Untuk alasan keamanan, kredensial yang Anda buat dengan menggunakan az acr login berlaku selama satu jam. Jika Anda melihat kesalahan 401 Unauthorized , jalankan az acr login --name <your registry name> perintah lagi untuk mengotoris ulang. Jika Anda melihat Read timed out kesalahan, coba tingkatkan batas waktu dengan mvn -Djib.httpTimeout=7200000 jib:dockerBuild, atau gunakan -Djib.httpTimeout=0 untuk batas waktu tak terbatas.

Membuat kluster Kubernetes di AKS menggunakan Azure CLI

  1. Buat kluster Kubernetes di Azure Kubernetes Service. Perintah berikut membuat kluster Kubernetes di wingtiptoys-kubernetes grup sumber daya, dengan wingtiptoys-akscluster sebagai nama kluster, dengan Azure Container Registry (ACR) wingtiptoysregistry terpasang, dan wingtiptoys-kubernetes sebagai awalan DNS:

    az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \
     --attach-acr wingtiptoysregistry \
     --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
    

    Perintah ini mungkin perlu waktu cukup lama untuk diselesaikan.

  2. Instal kubectl menggunakan Azure CLI. Pengguna Linux mungkin perlu mengawali perintah ini karena sudo menyebarkan Kubernetes CLI ke /usr/local/bin.

    az aks install-cli
    
  3. Unduh informasi konfigurasi kluster sehingga Anda dapat mengelola kluster dari antarmuka web Kubernetes dan kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

Menyebarkan gambar ke kluster Kubernetes Anda

Tutorial ini menyebarkan aplikasi dengan menggunakan kubectl, dan kemudian Anda dapat menjelajahi penyebaran melalui antarmuka web Kubernetes.

Menyebarkan dengan kubectl

  1. Buka jendela perintah.

  2. Jalankan kontainer Anda di kluster Kubernetes dengan menggunakan perintah kubectl run. Berikan nama layanan untuk aplikasi Anda di Kubernetes dan nama gambar lengkap. Misalnya:

    kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    

    Dalam perintah ini:

    • Anda menentukan nama gs-spring-boot-docker kontainer segera setelah run perintah.

    • Parameter --image menentukan server login gabungan dan nama gambar sebagai wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.

  3. Mengekspos kluster Kubernetes secara eksternal dengan menggunakan perintah kubectl expose. Tentukan nama layanan Anda, port TCP yang menghadap publik yang digunakan untuk mengakses aplikasi, dan port target internal yang didengarkan aplikasi Anda. Misalnya:

    kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    Dalam perintah ini:

    • Anda menentukan nama gs-spring-boot-docker kontainer segera setelah expose pod perintah.

    • Parameter --type menentukan bahwa kluster menggunakan load balancer.

    • Parameter --port menentukan port TCP yang menghadap publik 80. Anda mengakses aplikasi di port ini.

    • Parameter --target-port menetapkan port TCP internal sebesar 8080. Load balancer meneruskan permintaan ke aplikasi Anda di port ini.

  4. Setelah Anda menyebarkan aplikasi ke kluster, kueri alamat IP eksternal dan buka di browser web Anda:

kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'

Telusuri Aplikasi Sampel di Azure

Menyebarkan dengan tampilan sumber daya Kubernetes

  1. Pilih Tambahkan dari salah satu tampilan sumber daya (Namespace, Beban Kerja, Layanan dan ingress, Penyimpanan, atau Konfigurasi).

    tampilan sumber daya Kubernetes.

  2. Tempelkan dalam YAML berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gs-spring-boot-docker
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gs-spring-boot-docker
      template:
        metadata:
          labels:
            app: gs-spring-boot-docker
        spec:
          containers:
          - name: gs-spring-boot-docker
            image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    
  3. Pilih Tambahkan di bagian bawah editor YAML untuk menyebarkan aplikasi.

    tampilan sumber daya Kubernetes, tambahkan sumber daya.

    Setelah menyebarkan Deployment, seperti pada langkah sebelumnya, pilih Tambahkan di bagian bawah editor YAML untuk disebarkan Service menggunakan YAML berikut:

    apiVersion: v1
    kind: Service
    metadata:
      name: gs-spring-boot-docker
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: gs-spring-boot-docker
    
  4. Setelah Anda menambahkan file YAML, penampil sumber daya menampilkan aplikasi Spring Boot Anda. Layanan eksternal menyertakan alamat IP eksternal yang ditautkan sehingga Anda dapat dengan mudah melihat aplikasi di browser Anda.

    tampilan sumber daya Kubernetes, daftar layanan.

    tampilan sumber daya Kubernetes, daftar layanan, endpoint eksternal disorot.

  5. Pilih IP Eksternal. Anda melihat aplikasi Spring Boot Anda berjalan di Azure.

    Telusuri Aplikasi Sampel di Azure

Langkah berikutnya

Untuk mempelajari selengkapnya tentang Spring dan Azure, lanjutkan ke pusat dokumentasi Spring on Azure.

Lihat juga

Untuk informasi selengkapnya tentang menggunakan Spring Boot di Azure, lihat artikel berikut ini:

Untuk informasi selengkapnya tentang menggunakan Azure dengan Java, lihat Azure for Java Developers dan Bekerja dengan Azure DevOps dan Java.

Untuk informasi selengkapnya tentang menyebarkan aplikasi Java ke Kubernetes dengan Visual Studio Code, lihat Tutorial Java Visual Studio Code.

Untuk informasi selengkapnya tentang proyek sampel Spring Boot di Docker, lihat Spring Boot di Docker Getting Started.

Tautan berikut memberikan informasi selengkapnya tentang membuat aplikasi Spring Boot:

  • Untuk informasi selengkapnya tentang membuat aplikasi Spring Boot sederhana, lihat Spring Initializr di https://start.spring.io/.

Tautan berikut memberikan informasi lebih lanjut tentang menggunakan Kubernetes dengan Azure:

Untuk informasi selengkapnya tentang menggunakan antarmuka baris perintah Kubernetes, lihat panduan pengguna kubectl di https://kubernetes.io/docs/reference/kubectl/.

Situs web Kubernetes memiliki beberapa artikel yang membahas penggunaan gambar di registri privat:

Untuk contoh selengkapnya tentang cara menggunakan gambar Docker kustom dengan Azure, lihat Menggunakan gambar Docker kustom untuk Azure Web App di Linux.

Untuk informasi selengkapnya tentang menjalankan dan men-debug kontainer secara berulang langsung di Azure Kubernetes Service (AKS) dengan Azure Dev Spaces, lihat Mulai Azure Dev Spaces dengan Java.