自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

只需五步,將Spring Boot服務(wù)遷移到Kubernetes

開(kāi)源 云原生
如果預(yù)算有限,想以低成本獲得彈性Beanstalk的所有好處,可以使用Kubernetes,并且它是開(kāi)源的!

當(dāng)許多Java開(kāi)發(fā)人員使用Spring框架來(lái)快速創(chuàng)建Web服務(wù),但是其在生產(chǎn)環(huán)境中運(yùn)行可能是個(gè)比較大的挑戰(zhàn),因?yàn)橛泻芏噙\(yùn)行方式和云提供商。當(dāng)然您可以使用像AWS Elastic Beanstalk這樣的服務(wù)來(lái)保持其運(yùn)行,實(shí)現(xiàn)自動(dòng)縮放、零停機(jī)部署、無(wú)需部署新版本的基礎(chǔ)設(shè)施經(jīng)驗(yàn)等等。但是,這些服務(wù)對(duì)于預(yù)算較低的人來(lái)說(shuō)會(huì)花費(fèi)很多錢,同時(shí)失去對(duì)服務(wù)基礎(chǔ)設(shè)施的控制。

如果預(yù)算有限,想以低成本獲得彈性Beanstalk的所有好處,可以使用Kubernetes,并且它是開(kāi)源的!

1. 生成Docker鏡像

Kubernetes是一個(gè)容器編排平臺(tái),它可以自動(dòng)化地部署、擴(kuò)展和管理容器化應(yīng)用程序。Kubernetes的工作原理是這樣的:您可以從應(yīng)用程序創(chuàng)建Docker鏡像,并“告訴”Kubernetes啟動(dòng)您創(chuàng)建的一個(gè)或多個(gè)鏡像實(shí)例。然后,Kubernetes會(huì)自動(dòng)將這些實(shí)例分配給可用的節(jié)點(diǎn),并確保它們始終處于運(yùn)行狀態(tài)。如果有節(jié)點(diǎn)失敗或需要擴(kuò)展應(yīng)用程序,則Kubernetes會(huì)自動(dòng)重新分配實(shí)例,以確保應(yīng)用程序始終處于可用狀態(tài)。因此,我們的第一步是從Spring Boot服務(wù)創(chuàng)建一個(gè)鏡像。

以下一個(gè)Dockerfile示例:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
MAINTAINER Samuel Birocchi <samuel.birocchi@gobots.com.br>
ADD target/*.jar app.jar
COPY newrelic newrelic

ENV JAVA_OPTS=""
ENV SPRING_PROFILE="default"
ENV MONGO_PASSWORD=""

ENTRYPOINT exec java $JAVA_OPTS \
 -javaagent:newrelic/newrelic.jar \
 -Djava.security.egd=file:/dev/./urandom \
 -Dspring.profiles.active=$SPRING_PROFILE \
 -Dmongo.password=$MONGO_PASSWORD \
 -jar app.jar

有了這個(gè)和docker build插件,我們可以運(yùn)行g(shù)radle clean buildDocker(或使用maven docker插件)來(lái)構(gòu)建docker鏡像。請(qǐng)注意,它將創(chuàng)建一個(gè)帶有g(shù)radle.properties或build.gradle上配置的版本標(biāo)簽的映像。

2. 創(chuàng)建部署和Pods

現(xiàn)在要將創(chuàng)建好的鏡像放在Kubernetes上,我們需要將其上傳到注冊(cè)表中。我們可以上傳到公共docker注冊(cè)表,但是該映像將對(duì)每個(gè)人都可用!由于我們的服務(wù)是私有的,因此我們需要上傳到私有注冊(cè)表。幸運(yùn)的是,Gcloud為您的帳戶提供了私有注冊(cè)表。

這樣一來(lái),就可以最終將服務(wù)放在Kubernetes集群上了!由于正在使用Gcloud,因此使用GKE創(chuàng)建集群非常容易,請(qǐng)按照本教程進(jìn)行操作。創(chuàng)建集群后,配置命令行連接它后,需要為應(yīng)用程序創(chuàng)建部署(或復(fù)制控制器)以實(shí)現(xiàn)可擴(kuò)展性。使用以下配置作為初始配置:

apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: spring-boot-deployment
spec:
  selector:
    matchLabels:
      app: spring-boot-app
  replicas: 3 # tells deployment to run 3 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: spring-boot-app
    spec:
      containers:
      - name: spring-boot-app
        image: #your image name here
        ports:
        - containerPort: 8080
          name: server
        - containerPort: 8081
          name: management

考慮到在最后一步中配置了Kubernetes命令行界面(kubectl),因此我們可以使用kubectl apply -f Deployment.yml為Kubernetes集群創(chuàng)建一個(gè)新的部署,并使用此配置。過(guò)一段時(shí)間后,您可以使用kubectl get deployment spring-boot-deployment檢查部署的狀態(tài),并使用kubectl get pods spring-boot-app檢查pod的狀態(tài)。如果要檢查pod的日志,則可以使用kubectl log命令。

3. 使用服務(wù)公開(kāi)我們的Pods

現(xiàn)在,我們的Pod正在運(yùn)行,需要?jiǎng)?chuàng)建一個(gè)服務(wù)來(lái)將Pod公開(kāi)。使用下配置創(chuàng)建服務(wù):

apiVersion: v1
kind: Service
metadata:
  name: spring-boot-service
spec:
  ports:
  - port: 8080
    targetPort: 8080
    name: http
  - port: 8081
    targetPort: 8081
    name: management
  selector:
    app: spring-boot-app
  type: NodePort

正如所看到的,服務(wù)配置非常簡(jiǎn)單。但是,此配置未公開(kāi)。我們可以將服務(wù)類型設(shè)置為L(zhǎng)oadBalancer,因?yàn)間cloud會(huì)自動(dòng)為我們的服務(wù)創(chuàng)建真正的負(fù)載均衡器和外部IP。實(shí)際上嘗試使用此配置我們無(wú)法正確設(shè)置TLS和HTTPS,我們希望服務(wù)僅通過(guò)HTTPS協(xié)議訪問(wèn)。但是該怎么做呢?

4. 使用Ingress進(jìn)行路由

可以找到Kubernetes Ingress來(lái)使用。它是一個(gè)較新的功能,但非常有效。它幾乎像一個(gè)類型為L(zhǎng)oadBalancer的服務(wù),但您可以設(shè)置自定義路由規(guī)則。下面是Ingress配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: spring-boot-ingress
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: your-tls-secret
  backend:
    serviceName: spring-boot-service
    servicePort: 8080

正如所看到的,我們將入口設(shè)置為僅允許使用kubernetes.io/ingress.allow-http:"false"進(jìn)行HTTPS連接。但是,您會(huì)發(fā)現(xiàn)此文件中有TLS配置。我們需要首先創(chuàng)建一個(gè)Secret,其中包含用于Ingress訪問(wèn)的ssl證書數(shù)據(jù)。使用下文配置即可完成此操作。

5. Secrets

apiVersion: v1
data:
  tls.crt: #base64 hash of your cert
  tls.key: #base64 hash of your key
kind: Secret
metadata:
  name: your-tls-secret
  namespace: default
type: Opaque

應(yīng)用所有配置后,我們可以使用 kubectl get ingress spring-boot-ingress 命令檢查應(yīng)用程序的外部 IP。通過(guò) HTTPS 訪問(wèn),我們的 Spring Boot 應(yīng)用程序就運(yùn)行在 Kubernetes 集群上了!

重要!Kubernetes服務(wù)對(duì)默認(rèn)pod端口和端點(diǎn)“/”執(zhí)行健康檢查。如果您沒(méi)有映射該端點(diǎn)或者它受到保護(hù),則需要加入livenessProbe和readinessProbe配置。

建議在部署到生產(chǎn)之前使用minikube測(cè)試這些設(shè)置,以便您熟悉Kubernetes環(huán)境。

要部署新版本,請(qǐng)使用kubectl set image deployment/spring-boot-deployment spring-boot-app=your-new-image或僅使用kubectl edit deployment spring-boot-deployment編輯配置。使用第二個(gè)命令,您可以同時(shí)更新圖像和Pod的數(shù)量。如果您只想擴(kuò)展應(yīng)用程序,請(qǐng)運(yùn)行kubectl scale deployment spring-boot-deployment --replicas=10或創(chuàng)建自動(dòng)縮放配置。

更新部署會(huì)導(dǎo)致Kubernetes滾動(dòng)更新,無(wú)需停機(jī),因?yàn)樗鼤?huì)處理所有內(nèi)容,您只需坐下來(lái)放松即可。將基礎(chǔ)架構(gòu)更改為GKE后,可以減少關(guān)注應(yīng)用程序的健康狀況,更多地關(guān)注開(kāi)發(fā)。Kubernetes非常易于與CI工具(如Jenkins、GitLab CI、BitBucket Pipelines等)一起使用。

責(zé)任編輯:趙寧寧 來(lái)源: Java學(xué)研大本營(yíng)
相關(guān)推薦

2022-11-01 08:55:55

編譯工具MavenSpring

2023-08-01 19:16:01

Spring編程瀏覽器

2020-05-06 13:47:42

ZooKeeperKubernetes遷移

2022-08-05 07:37:39

單體架構(gòu)遷移微服務(wù)

2022-02-15 09:36:13

容器應(yīng)用程序云服務(wù)

2020-09-02 07:20:48

KubernetesJava應(yīng)用程序容器

2022-11-02 15:25:03

云數(shù)據(jù)庫(kù)云平臺(tái)

2021-09-28 08:00:32

數(shù)據(jù)安全網(wǎng)絡(luò)風(fēng)險(xiǎn)網(wǎng)絡(luò)安全

2022-11-28 11:43:24

數(shù)據(jù)分析不及格數(shù)據(jù)驗(yàn)證

2010-05-31 10:34:00

Windows下配置S

2012-10-29 09:27:16

2020-05-21 11:12:38

DaaSDevOps托管服務(wù)

2015-03-20 13:40:17

2016-12-12 19:16:43

數(shù)據(jù)云端

2021-08-18 10:36:43

Sping社區(qū)實(shí)驗(yàn)項(xiàng)目服務(wù)器

2019-06-05 15:15:51

云端云計(jì)算遷移

2019-06-05 13:32:38

云端云計(jì)算云遷移

2018-01-10 16:07:55

數(shù)據(jù)數(shù)據(jù)分析企業(yè)轉(zhuǎn)型

2021-06-25 11:05:46

云平臺(tái)安全挑戰(zhàn)業(yè)務(wù)遷移

2019-11-15 09:02:50

OpenJDKGitHub
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)