Java應(yīng)用上Kubernetes生產(chǎn)級必備20條(企業(yè)落地標(biāo)準(zhǔn))

這是互聯(lián)網(wǎng)大廠 / 金融 / 云原生生產(chǎn)環(huán)境通用的 Java + K8s 落地強(qiáng)制規(guī)范,覆蓋鏡像、資源、穩(wěn)定性、監(jiān)控、安全、發(fā)布、運(yùn)維全維度,直接可作為上線驗(yàn)收清單。

一、鏡像與容器基礎(chǔ)(3 條)

1. 使用輕量化 JRE 基礎(chǔ)鏡像

禁止用openjdk:latest/ 完整 JDK 鏡像,必須用:

eclipse-temurin:17-jre-alpine(推薦)

distroless/java17-debian12(安全極簡)

要求:鏡像體積 < 300MB,無多余依賴、編譯工具、shell。

2. 構(gòu)建標(biāo)準(zhǔn)化瘦身鏡像

采用分層構(gòu)建(多階段構(gòu)建):編譯→打包→運(yùn)行分離

只交付jar/war,不交付源碼、maven、git 等文件

鏡像不可變:運(yùn)行時禁止寫入 / 修改容器內(nèi)文件

3. 容器非 root 運(yùn)行

禁止使用 root 用戶啟動 Java 進(jìn)程

專屬 UID/GID,最小權(quán)限原則

滿足 K8ssecurityContext安全策略

二、JVM + K8s 資源配置(4 條)

4. JVM 內(nèi)存自動感知容器資源

必須開啟容器感知,禁止寫死 -Xmx/-Xms

yaml

# JVM 參數(shù)(Java 11+ 原生支持)-name:JAVA_TOOL_OPTIONSvalue:"-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"

JVM 最大內(nèi)存 = 容器內(nèi)存限制 × 75%,避免 OOM Kill。

5. 嚴(yán)格配置 Requests / Limits

生產(chǎn)強(qiáng)制雙限制,缺一不可:

yaml

resources:requests:cpu:1000mmemory:2Gilimits:cpu:2000mmemory:2Gi

CPU:無超配;內(nèi)存:requests = limits(避免調(diào)度抖動)

Java 應(yīng)用禁止不配置 Limits

6. 合理 CPU 核數(shù)配置

單 Pod CPU 推薦1~2 核(微服務(wù)最佳實(shí)踐)

避免單核 GC 卡頓、避免多核浪費(fèi)

禁止超過 4 核(除非批處理 / 計(jì)算型應(yīng)用)

7. 禁用 JVM Swap

開啟-XX:+AlwaysPreTouch+ K8s 禁止 swap,保證內(nèi)存性能穩(wěn)定。

三、健康檢查與高可用(3 條)

8. 配置精準(zhǔn)存活探針(livenessProbe)

基于HTTP 端口 / 健康端點(diǎn),不使用進(jìn)程判斷:

yaml

livenessProbe:httpGet:path:/actuator/health/livenessport:httpinitialDelaySeconds:60periodSeconds:10

作用:卡死 / 死鎖時自動重啟,防止weibo.com/ttarticle/p/show?id=2309405281549024624840假活。

9. 配置精準(zhǔn)就緒探針(readinessProbe)

yaml

readinessProbe:httpGet:path:/actuator/health/readinessport:httpinitialDelaySeconds:20periodSeconds:5

作用:啟動完成前不接入流量,發(fā)布無報(bào)錯。

10. 優(yōu)雅啟動 / 終止(必選)

配置terminationGracePeriodSeconds: 30-60

Spring Boot 開啟:server.shutdown=graceful

確保:停止前先摘流量 → 處理完請求 → 關(guān)閉 JVM

杜絕流量丟失、連接報(bào)錯、事務(wù)中斷。

四、發(fā)布與彈性(3 條)

11. 滾動發(fā)布策略

yaml

strategy:rollingUpdate:maxUnavailable:0maxSurge:1

保證:發(fā)布過程無損、無斷服。

12. 禁止使用 latest 鏡像標(biāo)簽

必須用固定版本號:v1.2.3、git-commit-id

禁止:latest、dev等浮動標(biāo)簽,防止意外更新。

13. 生產(chǎn)啟用 HPA 彈性伸縮

基于 CPU / 自定義指標(biāo)自動擴(kuò)縮容:

最小副本 ≥ 2(高可用)

擴(kuò)容閾值:CPU 使用率 70%

支持秒級擴(kuò)容,應(yīng)對流量突刺

五、配置與外部依賴(2 條)

14. 配置外部化(不硬編碼)

配置放ConfigMap

密鑰放Secret(數(shù)據(jù)庫密碼、token 等)

環(huán)境變量注入,禁止打包在 jar 內(nèi)

15. 合理連接池 + 超時控制

DB/Redis/MQ 連接池跟隨容器生命周期

全部設(shè)置連接超時、讀取超時

支持 K8s 網(wǎng)絡(luò)波動自動重連

六、可觀測性(3 條)

16. 暴露標(biāo)準(zhǔn)監(jiān)控端點(diǎn)

集成Spring Boot Actuator,提供:

/actuator/prometheus指標(biāo)

JVM 內(nèi)存、GC、線程、類加載

接口 QPS、RT、錯誤率

17. 標(biāo)準(zhǔn)日志輸出(stdout/stderr)

日志直接打印控制臺,禁止寫本地文件

統(tǒng)一 JSON 格式,方便日志平臺采集

包含:traceId、時間、級別、異常棧

18. 接入分布式追蹤

集成 SkyWalking/Pinpoint/OpenTelemetry

全鏈路追蹤

調(diào)用拓?fù)?/p>

慢請求定位

七、安全與運(yùn)維規(guī)范(2 條)

19. 網(wǎng)絡(luò)策略與權(quán)限管控

生產(chǎn)環(huán)境配置NetworkPolicy,限制 Pod 訪問范圍

密鑰加密、Secret 權(quán)限隔離

禁止容器特權(quán)模式privileged: false

20. 固定 Pod 調(diào)度規(guī)則

反親和性:同服務(wù)副本分散在不同節(jié)點(diǎn)

避免單點(diǎn)故障

支持污點(diǎn) / 容忍,適配混合部署

最簡可直接復(fù)制的生產(chǎn)級 YAML 片段(Java 通用)

yaml

apiVersion:apps/v1kind:Deploymentmetadata:name:java-appspec:replicas:2strategy:rollingUpdate:maxUnavailable:0maxSurge:1selector:matchLabels:app:java-apptemplate:metadata:labels:app:java-appspec:securityContext:runAsNonRoot:truerunAsUser:1000containers:-name:appimage:your-registry/java-app:v1.0.0ports:-name:httpcontainerPort:8080env:-name:JAVA_TOOL_OPTIONSvalue:"-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+AlwaysPreTouch"resources:requests:cpu:1000mmemory:2Gilimits:cpu:2000mmemory:2GilivenessProbe:httpGet:path:/actuator/health/livenessport:httpinitialDelaySeconds:60periodSeconds:10readinessProbe:httpGet:path:/actuator/health/readinessport:httpinitialDelaySeconds:20periodSeconds:5lifecycle:preStop:exec:command:["sleep","15"]terminationGracePeriodSeconds:60

總結(jié)

這 20 條是Java 上 K8s 生產(chǎn)可用的最低標(biāo)準(zhǔn),滿足后可保證穩(wěn)定、安全、無損發(fā)布

核心紅線:資源限制、健康檢查、優(yōu)雅啟停、非 root、鏡像不可變、配置外部化

可直接作為上線 checklist、架構(gòu)評審標(biāo)準(zhǔn)、DevOps 規(guī)范使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容