Spring Boot Uygulamasını Azure Kubernetes Service’e Dağıtma

Not

Spring Boot uygulamaları için Azure Spring 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. Burada uygulama geliştirme için Spring Boot, kapsayıcı dağıtımı için Kubernetes, uygulamanızı barındırmak için de Azure Kubernetes Service (AKS) kullanacaksınız.

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

Önkoşullar

Not

Bu öğreticinin sanallaştırma gereksinimlerinden dolayı, bu makaledeki adımları bir sanal makinede izleyemezsiniz; sanallaştırma özellikleri etkinleştirilmiş bir fiziksel bilgisayar kullanmanız gerekir.

Docker üzerinde Spring Boot'u Kullanmaya Başlama web uygulamasını oluşturma

Aşağıdaki adımlar, bir Spring Boot web uygulaması oluşturma ve yerel olarak test etme sürecinde size yol gösterecektir.

  1. Komut istemini açın ve uygulamanızı barındıracak bir yerel dizin oluşturun ve söz konusu dizine geçin; örneğin:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- veya --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Docker üzerinde Spring Boot'u Kullanmaya Başlama örnek projesini dizine kopyalayın.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Tamamlanmış projenin dizinine geçin.

    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. http://localhost:8080 adresine giderek veya aşağıdaki curl komutunu kullanarak web uygulamasını test edin:

    curl http://localhost:8080
    
  6. Şu iletinin görüntülendiğini görmeniz gerekir: Hello Docker World

    Örnek Uygulamaya Yerel Olarak Göz Atma

Azure CLI’yi kullanarak Azure Container Registry oluşturma

  1. 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ılacak 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. Bu öğreticinin ilerleyen adımlarında örnek uygulama Docker görüntüsü olarak bu kayıt defterine gönderilecektir. 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 defterine gönderme

  1. Azure CLI ile Azure Container Registry'de 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. pom.xml dosyasındaki <properties> koleksiyonunu Azure Container Registry kayıt defterinizin adı ve jib-maven-plugin eklentisinin 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, <plugin> öğesinin jib-maven-plugin öğesine yönelik bir giriş içermesi için pom.xml dosyasındaki <plugins> koleksiyonunu güncelleştirin. Microsoft Container Registry’den (MCR) edindiğimiz ve Azure için resmi olarak desteklenen bir JDK’yı içeren bir temel görüntüyü (mcr.microsoft.com/openjdk/jdk:11-ubuntu) kullandığımıza dikkat edin. Resmi olarak desteklenen JDK'lere sahip diğer MCR temel görüntüleri için bkz . OpenJDK'nin 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 için tamamlanmış proje dizinine gidin ve aşağıdaki komutu çalıştırarak görüntüyü oluşturun ve 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, tarafından az acr login oluşturulan kimlik bilgileri 1 saat geçerlidir. 401 Yetkisiz hatası görürseniz, yeniden kimlik doğrulaması yapmak için komutunu yeniden çalıştırabilirsinizaz acr login --name <your registry name>. Okuma zaman aşımı hatası görürseniz ile veya -Djib.httpTimeout=0 sonsuz bir zaman aşımı için zaman aşımlarını mvn -Djib.httpTimeout=7200000 jib:dockerBuildartırmayı deneyebilirsiniz.

Azure CLI'yi 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 küme adı wingtiptoys-akscluster, Azure Container Registry (ACR) wingtiptoysregistry eklenmiş ve DNS ön eki olarak wingtiptoys-kubernetes olan bir kubernetes kümesi oluşturur:

    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'yi kullanarak kubectl yükleyin. Kubernetes CLI, /usr/local/bin dizinine dağıtıldığından Linux kullanıcılarının bu komutun önüne sudo eklemesi gerekebilir.

    az aks install-cli
    
  3. Kümenizi Kubernetes web arabirimi ve kubectl aracılığıyla yönetebilmeniz iç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, uygulamasını kullanarak kubectldağıtır ve ardından Kubernetes web arabirimi aracılığıyla dağıtımı keşfetmenize olanak tanır.

kubectl ile dağıtma

  1. Komut istemi açın.

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

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

    Şu komutta:

    • Kapsayıcı adı gs-spring-boot-docker, run komutundan hemen sonra belirtilmiştir.

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

  3. kubectl expose komutunu kullanarak Kubernetes kümenizi dışarıdan kullanıma açın. Hizmetinizin adını, uygulamaya erişmek için kullanılan genel TCP bağlantı noktasını ve uygulamanızın dinlediği iç hedef bağlantı noktasını belirtin. Örneğin:

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

    Şu komutta:

    • Kapsayıcı adı gs-spring-boot-docker, expose pod komutundan hemen sonra belirtilmiştir.

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

    • --port parametresi, 80 numaralı genel TCP bağlantı noktasını belirtir. Uygulamaya bu bağlantı noktası üzerinden erişirsiniz.

    • --target-port parametresi, 8080 numaralı iç TCP bağlantı noktasını belirtir. Yük dengeleyici istekleri uygulamanıza bu bağlantı noktasından 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}'
    

    Örnek Uygulamaya Azure'da Göz Atma

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

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

    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 Ekle'yi seçin.

    Kubernetes kaynakları görünümü, kaynak ekleme.

    örneğini Deploymentdağıtdıktan sonra, aşağıdaki YAML'yi kullanarak dağıtmak Service için YAML düzenleyicisinin alt kısmındaki 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ü, hizmetler listesi.

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

  5. Dış IP'yi seçin. Ardından Spring Boot uygulamanızın Azure'da çalıştığını göreceksiniz.

    Örnek Uygulamaya Azure'da Göz Atma

Sonraki adımlar

Spring ve Azure hakkında daha fazlasını öğrenmek için Azure’da Spring belge merkezinde çalışmaya devam edin.

Ayrıca bkz.

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

Azure’ı Java ile kullanma hakkında daha fazla bilgi için bkz. Java Geliştiricileri için Azure ve Azure DevOps ve Java ile Çalışma.

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

Docker üzerinde Spring Boot örnek projesi hakkında daha fazla bilgi için bkz. Docker üzerinde Spring Boot'u Kullanmaya Başlama.

Aşağıdaki bağlantılarda Spring Boot uygulaması oluşturma hakkında ek bilgiler verilmektedir:

  • Basit bir Spring Boot uygulaması oluşturma hakkında daha fazla bilgi için https://start.spring.io/ konumundaki Spring Initializr konusuna bakın.

Aşağıdaki bağlantılarda Azure ve Kubernetes'i birlikte kullanma hakkında ek bilgiler verilmektedir:

Kubernetes komut satırı arabirimini kullanma hakkında daha fazla bilgi için https://kubernetes.io/docs/reference/kubectl/ adresindeki kubectl kullanıcı kılavuzunu inceleyin.

Kubernetes web sitesinde özel kayıt defterlerindeki görüntüleri kullanma konusunda birçok makale vardır:

Azure ile özel Docker görüntülerini kullanmaya yönelik ek örnekler için bkz. Linux üzerinde Azure Web Uygulaması için özel Docker görüntüsü kullanma.

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