手把手教你k8s部署springboot服務
1.前言
在看到此文章之前,想必你已經知道如何啟動一個spring boot
應用,知道如何通過docker
運行你的spring boot
服務。
你可能會有這樣得疑問,已經了解如上部署方式,是否還有必須去了解如何通過k8s
部署spring boot
應用?
如果你有這樣的疑問,那么請繼續(xù)往下看。
2.創(chuàng)建SpringBoot應用
在介紹k8s
部署spring boot
應用之前,我們需要創(chuàng)建一個spring boot
應用。
2.1 編寫pom.xml
<?xml version="1.0" encoding="UTF-8"?> ? <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ? ?<parent> ? ? ? ?<artifactId>boot-example-advance</artifactId> ? ? ? ?<groupId>com.boot.example</groupId> ? ? ? ?<version>1.0-SNAPSHOT</version> ? ?</parent> ? ? ?<modelVersion>4.0.0</modelVersion> ? ?<artifactId>boot-example-docker</artifactId> ? ?<version>1.0-SNAPSHOT</version> ? ? ?<name>boot-example-docker</name> ? ?<url>http://www.example.com</url> ? ? ?<dependencies> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId> ? ? ? ?</dependency> ? ?</dependencies> ? ? ?<build> ? ? ? ?<plugins> ? ? ? ? ? ?<plugin> ? ? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ? ? ?<artifactId>spring-boot-maven-plugin</artifactId> ? ? ? ? ? ? ? ?<executions> ? ? ? ? ? ? ? ? ? ?<execution> ? ? ? ? ? ? ? ? ? ? ? ?<goals> ? ? ? ? ? ? ? ? ? ? ? ? ? ?<goal>repackage</goal> ? ? ? ? ? ? ? ? ? ? ? ? ? ?<goal>build-info</goal> ? ? ? ? ? ? ? ? ? ? ? ?</goals> ? ? ? ? ? ? ? ? ? ?</execution> ? ? ? ? ? ? ? ?</executions> ? ? ? ? ? ?</plugin> ? ? ? ?</plugins> ? ?</build> </project>
2.2 編寫程序
@SpringBootApplication @RestController public class DockerApplication { ? ? ? ?@GetMapping("/") ? ?public String home() { ? ? ? ?try { ? ? ? ? ? ?return "Hello Docker World:" + InetAddress.getLocalHost().getHostAddress(); ? ? ? } catch (UnknownHostException e) { ? ? ? ? ? ?return "Hello Docker World"; ? ? ? } ? } ? ? ?public static void main(String[] args) { ? ? ? ?SpringApplication.run(DockerApplication.class, args); ? } }
2.3 應用打包
通過mvn clean package -X
命令對該應用進行打包,執(zhí)行完命令后可以看到target
目錄下生成了一個xxx.jar
的包
3.構建鏡像
有了應用包,需要編寫Dockerfile
文件將應用包構建成一個鏡像
3.1 編寫Dockerfile
FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
3.2 構建鏡像
有了jar
包和Dockerfile
文件就可以使用docker build -t a601942905/app .
命令來構建鏡像
3.2.1 查看鏡像是否構建成功
構建完鏡像
后則可以通過docker images
命令來查看是否存在剛才構建的鏡像,存在則說明鏡像
構建成功
3.2.2 驗證鏡像的正確性
如果本地存在構建的鏡像,可以通過docker run --name myapp -p 8080:8080 -d a601942905/app
命令將鏡像
啟動成容器
使用docker ps
命令查看容器是否正常啟動,如果正常啟動,可以通過curl localhost:8080
訪問服務接口, 正常響應,則說明鏡像
可以正常使用
3.3 推送鏡像
為了讓k8s
能夠拉取到鏡像,需要將構建好的本地鏡像
通過docker push a601942905/app
命令推送到遠程倉庫
4.k8s
有了鏡像
,就可以使用k8s
來部署服務
4.1 創(chuàng)建deployment
kubectl create deployment myapp --image=a601942905/app
4.2 創(chuàng)建service
kubectl expose deployment myapp --type=NodePort --port=8080
4.3 訪問服務
在瀏覽器中輸入ip + 端口即可訪問對應的服務
4.4 服務擴容
kubectl scale --replicas=5 deployment/myapp
擴容
之后可以看到同時存在5
個myapp pod
服務,這在實際場景中是非常有用的。當我們的服務壓力過大、負載過高時,就可以通過該方式實現服務擴容,使得服務可以提供更高的并發(fā)能力,渡過高峰期。
4.5 服務縮容
kubectl scale --replicas=3 deployment/myapp
過了業(yè)務高峰期,之前擴容的服務就會存在冗余,造成資源浪費??梢酝ㄟ^如上方式實現服務縮容,從而達到服務降本的目的
4.6 服務自愈
服務在運行的過程中,由于某些原因會導致pod
故障,從而造成對外提供服務的數量減少。在業(yè)務高峰時期,這種故障的產生可能會拖垮整個服務,從而導致無法對外提供服務。使用k8s
完全不用擔心這種故障的發(fā)生,當pod
服務故障后,k8s
會重新啟動一個新pod
服務
4.7 服務滾動更新
kubectl set image deploy/myapp app=a601942905/app:latest
服務發(fā)布后,如果發(fā)布服務的配置存在問題,導致服務無法啟動,此時整個應用都無法對外提供服務。滾動更新
會先啟動一個新服務,當新服務啟動后再關掉一個舊服務,這樣即便服務由于配置問題無法啟動,也不會影響線上服務,從而提高服務的slo
4.8 版本回退
kubectl rollout undo deploy/myapp
服務發(fā)版不可以避免的一個問題:本地、測試環(huán)境測的好好的,一到線上就報錯。遇到這種情況,我們的第一反應就是版本回退
,從而讓服務恢復到正常狀態(tài)
5.總結
看到這里,想必你已經知道為什么要了解k8s
來部署服務。因為k8s
可以輕松實現服務擴容
、服務縮容
、服務自愈
、服務滾動更新
和服務版本回退
到此這篇關于手把手教你k8s部署springboot服務的文章就介紹到這了,更多相關k8s部署springboot服務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文徹底弄懂Java中MultipartFile接口和File類
MultipartFile是一個接口,我們可以理解為是Spring?給我們綁定的一個在使用文件上傳等時簡便實現的口子,這篇文章主要給大家介紹了關于如何通過一文徹底弄懂Java中MultipartFile接口和File類的相關資料,需要的朋友可以參考下2023-11-11Java多線程正確使用倒計時協調器CountDownLatch方法詳解
這篇文章主要為大家介紹了Java多線程倒計時協調器CountDownLatch的正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09SpringBoot項目的配置文件中設置server.port不生效問題
這篇文章主要介紹了SpringBoot項目的配置文件中設置server.port不生效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11