基于SpringBoot3+Druid數據庫連接池與外部PostgreSQL的Kubernetes Pod YAML全解析

說明

一個基于Spring Boot 3 + Druid + 外部PostgreSQL的Kubernetes Pod YAML詳細解析,包含最佳實踐和關鍵配置說明:

YAML

apiVersion: apps/v1
kind: Deployment
metadata:name: springboot-applabels:app: springboot-app
spec:replicas: 2selector:matchLabels:app: springboot-apptemplate:metadata:labels:app: springboot-appspec:containers:- name: app-containerimage: your-registry/springboot-app:1.0.0imagePullPolicy: IfNotPresentports:- containerPort: 8080name: httpprotocol: TCP# 環境變量配置(敏感信息應通過Secret注入)env:- name: SPRING_DATASOURCE_URLvalue: jdbc:postgresql://external-postgres:5432/mydb- name: SPRING_DATASOURCE_USERNAMEvalueFrom:secretKeyRef:name: db-secretkey: username- name: SPRING_DATASOURCE_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: password# Druid監控配置(需在應用配置中開啟)- name: SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_ENABLEDvalue: "true"- name: SPRING_DATASOURCE_DRUID_WEB_STAT_FILTER_ENABLEDvalue: "true"# 資源限制resources:requests:memory: "512Mi"cpu: "500m"limits:memory: "1024Mi"cpu: "1000m"# 健康檢查livenessProbe:httpGet:path: /actuator/health/livenessport: 8080initialDelaySeconds: 30periodSeconds: 10readinessProbe:httpGet:path: /actuator/health/readinessport: 8080initialDelaySeconds: 20periodSeconds: 5# 可選:當使用私有鏡像倉庫時添加imagePullSecretsimagePullSecrets:- name: regcred---
# Service暴露(根據需要選擇類型)
apiVersion: v1
kind: Service
metadata:name: springboot-service
spec:type: ClusterIPselector:app: springboot-appports:- name: httpport: 8080targetPort: 8080

關鍵配置解析:

  1. Deployment基礎結構

    • replicas: 2:保證至少兩個Pod實例

    • 使用apps/v1?API版本(最新穩定版)

    • 明確的標簽選擇器(app: springboot-app)

  2. 容器配置

    • 鏡像規范:建議使用具體版本號而非latest

    • 端口暴露:明確命名端口(port 8080 → http)

    • 環境變量

      • PostgreSQL連接信息通過Secret注入

      • Druid監控配置通過環境變量開啟

      • JDBC URL指向外部數據庫服務(需確保網絡可達)

  3. Secret集成

    # 創建Secret的命令示例
    kubectl create secret generic db-secret \--from-literal=username=admin \--from-literal=password='S3cret!'
    • 敏感數據與配置分離

    • 通過secretKeyRef動態注入

  4. 健康檢查

    • Liveness Probe:檢測應用存活狀態

    • Readiness Probe:檢測服務就緒狀態

    • 使用Spring Boot Actuator端點

    • 合理的延遲設置(適應應用啟動時間)

  5. 資源限制

    • 明確設置請求/限制值

    • 防止資源爭用和OOM問題

    • 根據實際負載調整數值

  6. 服務暴露

    • ClusterIP類型適合內部訪問

    • 需要外部訪問時可使用NodePort或LoadBalancer

    • 保持端口命名一致性

  7. Druid特殊配置

    • 需要在應用配置中啟用相關端點:

      properties

    • # application.properties
      spring.datasource.druid.stat-view-servlet.login-username=admin
      spring.datasource.druid.stat-view-servlet.login-password=druid123
      spring.datasource.druid.filter.stat.enabled=true

    • 建議通過Ingress配置訪問限制

  8. 外部數據庫連接

    • 確保Kubernetes集群可以訪問外部PostgreSQL

    • 可能需要配置:

      • 網絡策略(NetworkPolicy)

      • 外部DNS解析

      • SSL連接配置(推薦)

最佳實踐建議:

  1. 配置分離

    • 將變化頻率不同的配置分層:

      • 環境變量 → 頻繁變化配置

      • ConfigMap → 普通配置

      • Secret → 敏感信息

  2. 健康檢查優化

    livenessProbe:failureThreshold: 3successThreshold: 1
    readinessProbe:failureThreshold: 3httpHeaders:- name: Custom-Headervalue: HealthCheck
  3. 多環境配置
    使用Kustomize或Helm管理不同環境的差異化配置

  4. 連接池優化

    • 根據實際負載調整Druid參數:

      properties

      spring.datasource.druid.initial-size=5
      spring.datasource.druid.min-idle=5
      spring.datasource.druid.max-active=20

  5. 安全加固

    • 添加Pod安全上下文:

      securityContext:runAsNonRoot: truerunAsUser: 1000allowPrivilegeEscalation: false
  6. 監控集成

    • 暴露Prometheus指標端點

    • 配置合適的ServiceMonitor(如使用Prometheus Operator)

  7. 更新策略

    strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 0
     

部署步驟:

  1. 構建Docker鏡像并推送至倉庫

  2. 創建必要的Secret和ConfigMap

  3. 應用Deployment和Service配置:

    kubectl apply -f deployment.yaml
  4. 驗證部署狀態:

    kubectl get pods -l app=springboot-app
    kubectl logs -f <pod-name>

注意事項:

  1. 確保數據庫白名單包含Pod IP范圍

  2. 生產環境建議使用連接池監控和自動恢復機制

  3. 定期輪換數據庫憑證(Secret更新策略)

  4. 考慮使用Service Mesh進行數據庫連接管理

通過以上配置,您可以獲得一個高可用、可監控且安全的Spring Boot應用部署方案,能夠有效管理數據庫連接并與外部PostgreSQL服務穩定通信。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72396.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72396.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72396.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 全局工具類 AppHolder:高效管理 Application 和 Activity

引言 介紹 AppHolder 的作用&#xff1a;全局管理 Application 和 Activity&#xff0c;簡化開發。適用場景&#xff1a;需要全局上下文和生命周期管理的場景。 功能特性 全局上下文管理。Activity 生命周期監聽。Fragment 生命周期監聽&#xff08;可選&#xff09;。應用狀態…

PyTorch 深度學習實戰(14):Deep Deterministic Policy Gradient (DDPG) 算法

在上一篇文章中&#xff0c;我們介紹了 Proximal Policy Optimization (PPO) 算法&#xff0c;并使用它解決了 CartPole 問題。本文將深入探討 Deep Deterministic Policy Gradient (DDPG) 算法&#xff0c;這是一種用于連續動作空間的強化學習算法。我們將使用 PyTorch 實現 D…

【深度學習與大模型基礎】第5章-線性相關與生成子空間

線性相關是指一組向量中&#xff0c;至少有一個向量可以表示為其他向量的線性組合。具體來說&#xff0c;對于向量組 v1,v2,…,vn&#xff0c;如果存在不全為零的標量 c1,c2,…,cn使得&#xff1a; c1v1c2v2…cnvn0 則稱這些向量線性相關。否則&#xff0c;它們線性無關。 舉…

【Agent實戰】貨物上架位置推薦助手(RAG方式+結構化prompt(CoT)+API工具結合ChatGPT4o能力Agent項目實踐)

本文原創作者:姚瑞南 AI-agent 大模型運營專家,先后任職于美團、獵聘等中大廠AI訓練專家和智能運營專家崗;多年人工智能行業智能產品運營及大模型落地經驗,擁有AI外呼方向國家專利與PMP項目管理證書。(轉載需經授權) 目錄 結論 效果圖示 1.prompt 2. API工具封…

Go語言入門基礎詳解

一、語言歷史背景 Go語言由Google工程師Robert Griesemer、Rob Pike和Ken Thompson于2007年設計&#xff0c;2009年正式開源。設計目標&#xff1a; 兼具Python的開發效率與C的執行性能內置并發支持&#xff08;goroutine/channel&#xff09;簡潔的類型系統現代化的包管理跨…

HarmonyOS NEXT開發進階(十二):build-profile.json5 文件解析

文章目錄 一、前言二、Hvigor腳本文件三、任務與任務依賴圖四、多模塊管理4.1 靜態配置模塊 五、分模塊編譯六、配置多目標產物七、配置APP多目標構建產物八、定義 product 中包含的 target九、拓展閱讀 一、前言 編譯構建工具DevEco Hvigor&#xff08;以下簡稱Hvigor&#x…

基于SSM + JSP 的圖書商城系統

基于SSM的圖書商城 網上書城、圖書銷售系統、圖書銷售平臺 &#xff5c;Java&#xff5c;SSM&#xff5c;HTML&#xff5c;JSP&#xff5c; 項目采用技術&#xff1a; ①&#xff1a;開發環境&#xff1a;IDEA、JDK1.8、Maven、Tomcat ②&#xff1a;技術棧&#xff1a;Java、…

色板在數據可視化中的創新應用

色板在數據可視化中的創新應用&#xff1a;基于色彩感知理論的優化實踐 引言 在數據可視化領域&#xff0c;色彩編碼系統的設計已成為決定信息傳遞效能的核心要素。根據《Nature》期刊2024年發布的視覺認知研究&#xff0c;人類大腦對色彩的識別速度比形狀快40%&#xff0c;色…

K8S學習之基礎二十七:k8s中daemonset控制器

k8s中DaemonSet控制器 ? DaemonSet控制器確保k8s集群中&#xff0c;所有節點都運行一個相同的pod&#xff0c;當node節點增加時&#xff0c;新節點也會自動創建一個pod&#xff0c;當node節點從集群移除&#xff0c;對應的pod也會自動刪除。刪除DaemonSet也會刪除創建的pod。…

PyTorch 系列教程:使用CNN實現圖像分類

圖像分類是計算機視覺領域的一項基本任務&#xff0c;也是深度學習技術的一個常見應用。近年來&#xff0c;卷積神經網絡&#xff08;cnn&#xff09;和PyTorch庫的結合由于其易用性和魯棒性已經成為執行圖像分類的流行選擇。 理解卷積神經網絡&#xff08;cnn&#xff09; 卷…

Spring Cloud Stream - 構建高可靠消息驅動與事件溯源架構

一、引言 在分布式系統中&#xff0c;傳統的 REST 調用模式往往導致耦合&#xff0c;難以滿足高并發和異步解耦的需求。消息驅動架構&#xff08;EDA, Event-Driven Architecture&#xff09;通過異步通信、事件溯源等模式&#xff0c;提高了系統的擴展性與可觀測性。 作為 S…

王者榮耀道具頁面爬蟲(json格式數據)

首先這個和英雄頁面是不一樣的&#xff0c;英雄頁面的圖片鏈接是直接放在源代碼里面的&#xff0c;直接就可以請求到&#xff0c;但是這個源代碼里面是沒有的 雖然在檢查頁面能夠搜索到&#xff0c;但是應該是動態加載的&#xff0c;源碼中搜不到該鏈接 然后就去看看是不是某…

【一起來學kubernetes】12、k8s中的Endpoint詳解

一、Endpoint的定義與作用二、Endpoint的創建與管理三、Endpoint的查看與組成四、EndpointSlice五、Endpoint的使用場景六、Endpoint與Service的關系1、定義與功能2、創建與管理3、關系與交互4、使用場景與特點 七、Endpoint的kubectl命令1. 查看Endpoint2. 創建Endpoint3. 編輯…

結構型模式之橋接模式:解耦抽象和實現

在面向對象設計中&#xff0c;我們經常遇到需要擴展某些功能&#xff0c;但又不能修改現有代碼的情況。為了避免繼承帶來的復雜性和維護難度&#xff0c;橋接模式&#xff08;Bridge Pattern&#xff09;應運而生。橋接模式是一種結構型設計模式&#xff0c;旨在解耦抽象部分和…

如何用Java將實體類轉換為JSON并輸出到控制臺?

在軟件開發的過程中&#xff0c;Java是一種廣泛使用的編程語言&#xff0c;而在眾多應用中&#xff0c;數據的傳輸和存儲經常需要使用JSON格式。JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;易于人類閱讀和編寫&#xff0c;…

Vue3 開發的 VSCode 插件

1. Volar Vue3 正式版發布&#xff0c;Vue 團隊官方推薦 Volar 插件來代替 Vetur 插件&#xff0c;不僅支持 Vue3 語言高亮、語法檢測&#xff0c;還支持 TypeScript 和基于 vue-tsc 的類型檢查功能。 2. Vue VSCode Snippets 為開發者提供最簡單快速的生成 Vue 代碼片段的方…

C# Enumerable類 之 集合操作

總目錄 前言 在 C# 中&#xff0c;System.Linq.Enumerable 類是 LINQ&#xff08;Language Integrated Query&#xff09;的核心組成部分&#xff0c;它提供了一系列靜態方法&#xff0c;用于操作實現了 IEnumerable 接口的集合。通過這些方法&#xff0c;我們可以輕松地對集合…

51c自動駕駛~合集54

我自己的原文哦~ https://blog.51cto.com/whaosoft/13517811 #Chameleon 快慢雙系統&#xff01;清華&博世最新&#xff1a;無需訓練即可解決復雜道路拓撲 在自動駕駛技術中&#xff0c;車道拓撲提取是實現無地圖導航的核心任務之一。它要求系統不僅能檢測出車道和交…

Spring Cloud Eureka - 高可用服務注冊與發現解決方案

在微服務架構中&#xff0c;服務注冊與發現是確保系統動態擴展和高效通信的關鍵。Eureka 作為 Spring Cloud 生態的核心組件&#xff0c;不僅提供去中心化的服務治理能力&#xff0c;還通過自我保護、健康檢查等機制提升系統的穩定性&#xff0c;使其成為微服務架構中的重要支撐…

Unity屏幕適配——立項時設置

項目類型&#xff1a;2D游戲、豎屏、URP 其他類型&#xff0c;部分原理類似。 1、確定設計分辨率&#xff1a;750*1334 為什么是它&#xff1f; 因為它是 iphone8 的尺寸&#xff0c;寬高比適中。 方便后續適配到真機的 “更長屏” 或 “更寬屏” 2、在場景…