成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

只需五步,將Spring Boot服務遷移到Kubernetes

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

當許多Java開發人員使用Spring框架來快速創建Web服務,但是其在生產環境中運行可能是個比較大的挑戰,因為有很多運行方式和云提供商。當然您可以使用像AWS Elastic Beanstalk這樣的服務來保持其運行,實現自動縮放、零停機部署、無需部署新版本的基礎設施經驗等等。但是,這些服務對于預算較低的人來說會花費很多錢,同時失去對服務基礎設施的控制。

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

1. 生成Docker鏡像

Kubernetes是一個容器編排平臺,它可以自動化地部署、擴展和管理容器化應用程序。Kubernetes的工作原理是這樣的:您可以從應用程序創建Docker鏡像,并“告訴”Kubernetes啟動您創建的一個或多個鏡像實例。然后,Kubernetes會自動將這些實例分配給可用的節點,并確保它們始終處于運行狀態。如果有節點失敗或需要擴展應用程序,則Kubernetes會自動重新分配實例,以確保應用程序始終處于可用狀態。因此,我們的第一步是從Spring Boot服務創建一個鏡像。

以下一個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

有了這個和docker build插件,我們可以運行gradle clean buildDocker(或使用maven docker插件)來構建docker鏡像。請注意,它將創建一個帶有gradle.properties或build.gradle上配置的版本標簽的映像。

2. 創建部署和Pods

現在要將創建好的鏡像放在Kubernetes上,我們需要將其上傳到注冊表中。我們可以上傳到公共docker注冊表,但是該映像將對每個人都可用!由于我們的服務是私有的,因此我們需要上傳到私有注冊表。幸運的是,Gcloud為您的帳戶提供了私有注冊表。

這樣一來,就可以最終將服務放在Kubernetes集群上了!由于正在使用Gcloud,因此使用GKE創建集群非常容易,請按照本教程進行操作。創建集群后,配置命令行連接它后,需要為應用程序創建部署(或復制控制器)以實現可擴展性。使用以下配置作為初始配置:

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集群創建一個新的部署,并使用此配置。過一段時間后,您可以使用kubectl get deployment spring-boot-deployment檢查部署的狀態,并使用kubectl get pods spring-boot-app檢查pod的狀態。如果要檢查pod的日志,則可以使用kubectl log命令。

3. 使用服務公開我們的Pods

現在,我們的Pod正在運行,需要創建一個服務來將Pod公開。使用下配置創建服務:

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

正如所看到的,服務配置非常簡單。但是,此配置未公開。我們可以將服務類型設置為LoadBalancer,因為gcloud會自動為我們的服務創建真正的負載均衡器和外部IP。實際上嘗試使用此配置我們無法正確設置TLS和HTTPS,我們希望服務僅通過HTTPS協議訪問。但是該怎么做呢?

4. 使用Ingress進行路由

可以找到Kubernetes Ingress來使用。它是一個較新的功能,但非常有效。它幾乎像一個類型為LoadBalancer的服務,但您可以設置自定義路由規則。下面是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

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

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

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

重要!Kubernetes服務對默認pod端口和端點“/”執行健康檢查。如果您沒有映射該端點或者它受到保護,則需要加入livenessProbe和readinessProbe配置。

建議在部署到生產之前使用minikube測試這些設置,以便您熟悉Kubernetes環境。

要部署新版本,請使用kubectl set image deployment/spring-boot-deployment spring-boot-app=your-new-image或僅使用kubectl edit deployment spring-boot-deployment編輯配置。使用第二個命令,您可以同時更新圖像和Pod的數量。如果您只想擴展應用程序,請運行kubectl scale deployment spring-boot-deployment --replicas=10或創建自動縮放配置。

更新部署會導致Kubernetes滾動更新,無需停機,因為它會處理所有內容,您只需坐下來放松即可。將基礎架構更改為GKE后,可以減少關注應用程序的健康狀況,更多地關注開發。Kubernetes非常易于與CI工具(如Jenkins、GitLab CI、BitBucket Pipelines等)一起使用。

責任編輯:趙寧寧 來源: Java學研大本營
相關推薦

2023-08-01 19:16:01

Spring編程瀏覽器

2022-11-01 08:55:55

編譯工具MavenSpring

2020-05-06 13:47:42

ZooKeeperKubernetes遷移

2022-08-05 07:37:39

單體架構遷移微服務

2022-02-15 09:36:13

容器應用程序云服務

2020-09-02 07:20:48

KubernetesJava應用程序容器

2021-09-28 08:00:32

數據安全網絡風險網絡安全

2022-11-28 11:43:24

數據分析不及格數據驗證

2022-11-02 15:25:03

云數據庫云平臺

2010-05-31 10:34:00

Windows下配置S

2016-12-12 19:16:43

數據云端

2012-10-29 09:27:16

2020-05-21 11:12:38

DaaSDevOps托管服務

2015-03-20 13:40:17

2018-01-10 16:07:55

數據數據分析企業轉型

2019-06-05 13:32:38

云端云計算云遷移

2019-06-05 15:15:51

云端云計算遷移

2021-08-18 10:36:43

Sping社區實驗項目服務器

2019-11-15 09:02:50

OpenJDKGitHub

2021-06-25 11:05:46

云平臺安全挑戰業務遷移
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区中文字幕 | 超碰人人插 | 国产免费让你躁在线视频 | 亚洲综合一区二区三区 | 一区二区免费 | 一区二区三区视频在线 | jizz在线免费观看 | 麻豆久久久久 | 91原创视频 | 一区二区三区四区在线 | 色婷婷亚洲国产女人的天堂 | 国产丝袜一区二区三区免费视频 | 亚洲美女天堂网 | 久久精品国产一区二区电影 | 国产精品美女久久久久久免费 | 国产乱肥老妇国产一区二 | 亚洲综合婷婷 | 精品欧美黑人一区二区三区 | 亚洲成人一二区 | 成人精品一区二区户外勾搭野战 | 精品国产一区二区三区日日嗨 | 日韩成人av在线 | 色综合久久天天综合网 | 欧美日韩视频在线播放 | 在线黄 | 欧美另类视频在线 | 黄色网址av | 中文二区 | 国产激情视频网站 | 成人免费网站www网站高清 | 精品一区二区久久久久久久网站 | 男女视频在线观看网站 | 日韩欧美中文 | 一区二区三区电影网 | 精精国产视频 | 亚洲精品无 | 国产伦精品一区二区三区视频金莲 | 天天视频一区二区三区 | 精品国产一区二区在线 | 国产一区二区激情视频 | 涩涩视频网 |