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
- Azure aboneliği; henüz Azure aboneliğiniz yoksa MSDN abone avantajlarınızı etkinleştirebilir veya ücretsiz Azure hesabı için kaydolabilirsiniz.
- Azure Komut Satırı Arabirimi (CLI).
- Desteklenen bir Java Development Kit (JDK). Azure'da geliştirme yaparken kullanılabilecek JDK'ler hakkında daha fazla bilgi için bkz . Azure ve Azure Stack'te Java desteği.
- Apache Maven derleme aracı (Sürüm 3).
- Git istemcisi.
- Docker istemcisi.
- ACR Docker kimlik bilgisi yardımcısı.
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.
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
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
Tamamlanmış projenin dizinine geçin.
cd gs-spring-boot-docker cd complete
Örnek uygulamayı derlemek ve çalıştırmak için Maven'ı kullanın.
mvn package spring-boot:run
http://localhost:8080
adresine giderek veya aşağıdakicurl
komutunu kullanarak web uygulamasını test edin:curl http://localhost:8080
Şu iletinin görüntülendiğini görmeniz gerekir: Hello Docker World
Azure CLI’yi kullanarak Azure Container Registry oluşturma
Komut istemi açın.
Azure hesabınızda oturum açın:
az login
Azure aboneliğinizi seçin:
az account set -s <YourSubscriptionID>
Bu öğreticide kullanılacak Azure kaynakları için bir kaynak grubu oluşturun.
az group create --name=wingtiptoys-kubernetes --location=eastus
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
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
pom.xml dosyasını bir metin düzenleyicisiyle açın; örneğin Visual Studio Code.
code pom.xml
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>
Aşağıdaki örnekte gösterildiği gibi,
<plugin>
öğesininjib-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>
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:dockerBuild
artırmayı deneyebilirsiniz.
Azure CLI'yi kullanarak AKS üzerinde Kubernetes kümesi oluşturma
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.
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ünesudo
eklemesi gerekebilir.az aks install-cli
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 kubectl
dağıtır ve ardından Kubernetes web arabirimi aracılığıyla dağıtımı keşfetmenize olanak tanır.
kubectl ile dağıtma
Komut istemi açın.
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.
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.
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}'
Kubernetes kaynak görünümüyle dağıtma
Kaynak görünümlerinden herhangi birinden Ekle'yi seçin (Ad Alanı, İş Yükleri, Hizmetler ve girişler, Depolama veya Yapılandırma).
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
Uygulamayı dağıtmak için YAML düzenleyicisinin alt kısmındaki Ekle'yi seçin.
örneğini
Deployment
dağıtdıktan sonra, aşağıdaki YAML'yi kullanarak dağıtmakService
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
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.
Dış IP'yi seçin. Ardından Spring Boot uygulamanızın Azure'da çalıştığını göreceksiniz.
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin