Aracılığıyla paylaş


Spring Boot Uygulamasını Azure Kubernetes Service'e dağıtma

Not

Spring Boot uygulamaları için Azure Container Apps kullanmanızı öneririz. Ancak yine de Azure Kubernetes Service'i hedef olarak kullanmayı seçebilirsiniz. Daha fazla bilgi için bkz. Java uygulamalarınız için doğru Azure hizmetlerini seçme.

Bu öğretici, Spring Boot uygulaması geliştirmek ve Microsoft Azure'a dağıtmak için Kubernetes ve Docker'ı birleştirme konusunda size yol gösterir. Daha açık belirtmek gerekirse, uygulama geliştirme için Spring Boot, kapsayıcı dağıtımı için Kubernetes ve uygulamanızı barındırmak için Azure Kubernetes Service (AKS) kullanırsınız.

Kubernetes ve Docker, geliştiricilerin kapsayıcılarda çalışan uygulamalarının dağıtımını, ölçeklendirmesini ve yönetimini otomatikleştirmesine yardımcı olan açık kaynak çözümlerdir.

Önkoşullar

Not

Bu öğreticinin sanallaştırma gereksinimleri nedeniyle, bir sanal makinede bu makaledeki adımları uygulayamazsınız; sanallaştırma özellikleri etkinleştirilmiş bir fiziksel bilgisayar kullanmanız gerekir.

Docker'da Spring Boot için Başlangıç Rehberi web uygulamasını oluşturma

Aşağıdaki adımlar spring boot web uygulaması oluşturma ve yerel olarak test etme adımlarını gösterir.

  1. Bir komut istemi açın ve uygulamanızı barındıracak yerel bir dizin oluşturun ve bu dizine geçin; mesela:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    --veya--

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Docker'da Spring Boot Kullanmaya Başlama örnek projeyi dizinine kopyalayın.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Dizini tamamlanmış proje olarak değiştirin.

    cd gs-spring-boot-docker
    cd complete
    
  4. Örnek uygulamayı derlemek ve çalıştırmak için Maven kullanın.

    mvn package spring-boot:run
    
  5. web uygulamasını http://localhost:8080'e göz atarak veya aşağıdaki curl komutuyla test edin.

    curl http://localhost:8080
    
  6. Şu iletiyi görmeniz gerekir: Hello Docker World

    Örnek Uygulamaya Yerel Olarak Gözat

Azure CLI kullanarak Azure Container Registry oluşturma

  1. Bir komut istemi açın.

  2. Azure hesabınızda oturum açın:

    az login
    
  3. Azure Aboneliğinizi seçin:

    az account set -s <YourSubscriptionID>
    
  4. Bu öğreticide kullanılan Azure kaynakları için bir kaynak grubu oluşturun.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Kaynak grubunda özel bir Azure kapsayıcı kayıt defteri oluşturun. Öğretici, sonraki adımlarda örnek uygulamayı docker görüntüsü olarak bu kayıt defterine gönderir. wingtiptoysregistry değerini kayıt defteriniz için benzersiz bir adla değiştirin.

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

Uygulamanızı Jib aracılığıyla kapsayıcı kayıt deposuna gönderin.

  1. Azure CLI'dan Azure Container Registry'nizde oturum açın.

    # 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. pom.xml dosyasını bir metin düzenleyicisiyle açın; örneğin Visual Studio Code.

    code pom.xml
    
  3. <properties> dosyasındaki koleksiyonunu Azure Container Registry'nizin kayıt defteri adıyla ve jib-maven-pluginen son sürümüyle güncelleştirin.

    <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. aşağıdaki örnekte gösterildiği gibi <plugins> öğesinin için bir girdi içermesi için <plugin> dosyasındaki jib-maven-plugin koleksiyonunu güncelleştirin. Microsoft Container Registry'den (MCR) temel görüntü kullandığımızı unutmayın: azure için resmi olarak desteklenen bir JDK içeren mcr.microsoft.com/openjdk/jdk:11-ubuntu. Resmi olarak desteklenen JDK'lere sahip diğer MCR temel görüntüleri için bkz. OpenJDK'nın Microsoft Derlemesini Yükleme ..

    <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. Spring Boot uygulamanızın tamamlanmış proje dizinine gidin ve aşağıdaki komutu çalıştırarak görüntüyü derleyin ve görüntüyü kayıt defterine gönderin:

    az acr login && mvn compile jib:build
    

Not

Azure Cli ve Azure Container Registry'nin güvenlik endişesi nedeniyle, az acr login tarafından oluşturulan kimlik bilgileri 1 saat geçerlidir. 401 Unauthorized bir hata görürseniz, yeniden kimlik doğrulaması yapmak için az acr login --name <your registry name> komutunu yeniden çalıştırabilirsiniz. Read timed out bir hata görürseniz, mvn -Djib.httpTimeout=7200000 jib:dockerBuildile zaman aşımlarını artırmayı veya sonsuz bir zaman aşımı için -Djib.httpTimeout=0 deneyebilirsiniz.

Azure CLI kullanarak AKS üzerinde Kubernetes Kümesi oluşturma

  1. Azure Kubernetes Service'te bir Kubernetes kümesi oluşturun. Aşağıdaki komut, wingtiptoys-kubernetes kaynak grubunda, wingtiptoys-akscluster adlı bir Kubernetes kümesi oluşturur, Azure Container Registry (ACR) wingtiptoysregistry ile ilişkilendirilmiş ve DNS ön eki wingtiptoys-kubernetes olacak şekilde.

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

    Bu komutun tamamlanması biraz zaman alabilir.

  2. Azure CLI kullanarak kubectl yükleyin. Linux kullanıcılarının bu komutu sudo olarak ön eklemeleri gerekebilir çünkü Kubernetes CLI /usr/local/bin'e dağıtılmaktadır.

    az aks install-cli
    
  3. Kümenizi Kubernetes web arabiriminden yönetebilmek ve kubectliçin küme yapılandırma bilgilerini indirin.

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

Görüntüyü Kubernetes kümenize dağıtma

Bu öğretici, kubectlkullanarak uygulamayı dağıtır ve ardından Kubernetes web arabirimi aracılığıyla dağıtımı keşfetmenize olanak tanır.

kubectl ile dağıtma

  1. Bir komut istemi açın.

  2. kubectl run komutunu kullanarak kapsayıcınızı Kubernetes kümesinde çalıştırın. Kubernetes'te uygulamanız için bir hizmet adı ve tam görüntü adı verin. Mesela:

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

    Bu komutta:

    • kapsayıcı adı gs-spring-boot-docker, run komutundan hemen sonra belirtilir

    • --image parametresi, birleşik oturum açma sunucusunu ve görüntü adını wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest olarak belirtir

  3. kubectl expose komutunu kullanarak Kubernetes kümenizi harici olarak kullanıma sunma. Hizmet adınızı, uygulamaya erişmek için kullanılan genel kullanıma yönelik TCP bağlantı noktasını ve uygulamanızın dinleyeceğiniz iç hedef bağlantı noktasını belirtin. Mesela:

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

    Bu komutta:

    • kapsayıcı adı gs-spring-boot-docker, expose pod komutundan hemen sonra belirtilir.

    • --type parametresi, kümenin yük dengeleyici kullandığını belirtir.

    • --port parametresi 80'in genel kullanıma yönelik TCP bağlantı noktasını belirtir. Uygulamaya bu bağlantı noktasından erişin.

    • --target-port parametresi 8080 iç TCP bağlantı noktasını belirtir. Yük dengeleyici, istekleri bu bağlantı noktasındaki uygulamanıza iletir.

  4. Uygulama kümeye dağıtıldıktan sonra dış IP adresini sorgulayın ve web tarayıcınızda açın:

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

    Azure 'da Örnek Uygulamaya Gözatma

Kubernetes kaynak görünümüyle dağıtma

  1. Kaynak görünümlerinden (Ad Alanı, İş Yükleri, Hizmetler ve girişler, Depolama veya Yapılandırma) ekle'yi seçin.

    Kubernetes kaynakları görünümü .

  2. Aşağıdaki YAML'yi yapıştırın:

    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. Uygulamayı dağıtmak için YAML düzenleyicisinin alt kısmındaki "'ı seçin" ve "'i ekle" adlı seçenekleri kullanın.

    Kubernetes kaynaklarını görüntüleyin, kaynak ekleyin.

    Deploymentdağıtıldıktan sonra, yukarıdaki gibi, aşağıdaki YAML'yi kullanarak dağıtmak için, YAML düzenleyicisinin altındaki Service Ekle'yi seçin.

    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. YAML dosyası eklendikten sonra kaynak görüntüleyici Spring Boot uygulamanızı gösterir. Dış hizmet, uygulamayı tarayıcınızda kolayca görüntüleyebilmeniz için bağlantılı bir dış IP adresi içerir.

    Kubernetes kaynakları görünümünü, hizmet listesini .

    Kubernetes kaynakları görünümü, hizmetler listesi, dış uç noktalar vurgulanmış.

  5. harici IPseçin. Ardından Spring Boot uygulamanızın Azure'da çalıştığını göreceksiniz.

    Azure 'da Örnek Uygulamaya Gözatma

Sonraki adımlar

Spring ve Azure hakkında daha fazla bilgi edinmek için Azure'da Spring belge merkezine geçin.

Ayrıca bkz.

Azure'da Spring Boot kullanma hakkında daha fazla bilgi için aşağıdaki makaleye bakın:

Java ile Azure kullanımı hakkında daha fazla bilgi için Java Geliştiricileri için Azure ve Azure DevOps ve Java ile Çalışmabaşlıklarına bakın.

Visual Studio Code ile Kubernetes'e Java uygulaması dağıtma hakkında daha fazla bilgi için bkz. Visual Studio Code Java Öğreticileri.

Docker'da Spring Boot örnek projesi hakkında daha fazla bilgi için bkz. Docker'da Spring Boot Başlarken.

Aşağıdaki bağlantılar Spring Boot uygulamaları oluşturma hakkında ek bilgiler sağlar:

  • Basit bir Spring Boot uygulaması oluşturma hakkında daha fazla bilgi için https://start.spring.io/'daki Spring Initializr bölümüne bakın.

Aşağıdaki bağlantılar Kubernetes'i Azure ile kullanma hakkında ek bilgi sağlar:

Kubernetes komut satırı arabirimini kullanma hakkında daha fazla bilgiyi https://kubernetes.io/docs/reference/kubectl/ kullanıcı kılavuzunda bulabilirsiniz.

Kubernetes web sitesinde, özel kayıt defterlerindeki görüntülerin kullanılmasını ele alan birkaç makale vardır:

Azure ile özel Docker görüntülerini kullanma hakkında ek örnekler için bkz. Linux üzerinde Azure Web App için özel Docker görüntüsü kullanma .

Azure Dev Spaces ile doğrudan Azure Kubernetes Service'te (AKS) kapsayıcıları yinelemeli olarak çalıştırma ve hata ayıklama hakkında daha fazla bilgi için bkz. Java ile Azure Dev Spaces'i kullanmaya başlama