技術和基礎設施→ Kubernetes集群和Helm圖表
Kubernetes群集和Helm圖表
1)Kubernetes和Helm的角色
Kubernetes是應用程序平臺的基礎:標準化推出,網絡,configs,秘密和自我修復。Helm是軟件包/模板管理器,可將聲明性清單轉換為具有版本控制和依賴項的可重復版本。它們共同提供了可預測的解鎖,快速回滾和統一的基礎設施語言。
2)群集設計
2.1拓撲和容錯性
Multi-AZ:控制平面和工作池節點分布在各個區域;PDB/TopologySpreadConstraints用於均勻性。
多區域/DR:獨立區域集群;區域間呼叫-僅通過「冷」路徑(目錄/遙測),「熱」(錢包)-本地。
按配置文件排列的工人池:「general」、「compute」、「io」、「spot」(用於背景任務)。通過nodeSelector/affinity/taints進行分配。
2.2個命名空間和多用戶模型
域名隔離:「payments」,「wallet」,「games」,「reporting」。
ResourceQuota+LimitRange:基本的CPU/RAM限制和最大副本;保護群集免受「吸塵器」的影響。
RBAC:默認只讀角色,write只是CI/CD和呼叫。
2.3個網絡
支持NetworkPolicy(Calico/Cilium)的CNI:命名空間/標簽策略L3/L4。
Ingress →Gateway API:過渡到「GatewayClass/Gateway/HTTPRoute」模型,用於加那利群島和許多陰影。
Service Mesh(可選):mTLS, retry/breaker, locality-aware;為服務間可靠性逐點啟用。
3)可靠性和擴展
3.1 Skeiling
HPA按用戶指標(RPS/latency/queue depth),而不僅僅是CPU。
背景載荷類上的VPA;在銷售中-「僅回收」或與HPA一起使用不同的指標。
Cluster Autoscaler:針對敏感服務的單獨節點組;warm-pool to peeks(錦標賽/比賽)。
3.2資源和QoS
每個Pod都具有要求/限制;避免「:最新」和「無限制」容器。
PriorityClass:關鍵服務(「wallet」,「payments」)取代非關鍵服務。
PDB:我們不要在更新腳註時給群集「射擊自己」。
3.3次升級無停機
RollingUpdate c maxUnavailable=0在關鍵路徑上。
PodDisruptionBudget + ReadinessProbes (не `startupProbe` вместо readiness).
在峰值期間快速發布的surge容量-謹慎。
4)平臺安全
Namespace級別的Pod Security(基線/限制);禁止「特權」,hostPath,root。
NetworkPolicy:默認值和按端口/標簽列出的白色列表。
Seccomp/AppArmor, non-root users, read-only rootfs.
秘密:KMS/Vault提供商(CSI),在「價值」中不保留秘密。yaml'公開形式。
RBAC最低:服務帳戶僅授予必要的權利;令牌壽命短。
管理控制:OPA/Gatekeeper/Kyverno-標簽,限制,策略違規的執法。
5) Observability
OpenTelemetry:來自Ingress/Gateway的跟蹤→服務→ DB/緩存,強制性標簽「服務」,「版本」,「區域」,「合作夥伴」,「api_version」。
Logs:結構化,沒有PII/PAN;路由到集中存儲。
度量:RED/USE,SLO-dashbords,burn-rate alerta。
合成:來自所需國家/ASN的樣品;外圍和內部健康檢查。
6) GitOps и progressive delivery
Argo CD/Flux:理想狀態存儲在Git中;每個namespace是其自己的存儲庫/文件夾。
文物的推廣:通過PR而不是「kubectl apply」的「dev stage prod」。
Canary/Blue-Green: Argo Rollouts/Gateway API;成功指標是P95/P99、錯誤率、業務SLI(存款的CR)。
回滾:在Helm/Argo中-按按鈕;在圖表中-版本是固定的。
7) Helm: 最佳實踐
7.1圖表結構
my-service/
Chart. yaml # name, version (SemVer), appVersion values. yaml # base values (no secrets)
values-prod. yaml # prod overrides (no secrets)
templates/
_helpers. tpl # naming, common deployment templates. yaml service. yaml hpa. yaml pdb. yaml networkpolicy. yaml serviceaccount. yaml ingress_or_gateway. yaml charts/# dependencies (opcional)
建議:
- 「版本」是圖表版本(SemVer),「appVersion」是應用程序(圖像)的版本。
- 嚴格的資源名:'{include' svc。fullname".}}"+標簽"應用程序。kubernetes.io/`.
- 強制性宣言:發布/StatefulSet,服務,ServiceAccount,HPA(如果適用),PDB,NetworkPolicy。
7.2 Values策略
基本的價值。yaml'-默認,沒有秘密或環境細節。
覆蓋:「values-{stage'prod} .yaml」+per-region文件。
秘密:SOPS("價值證明。sops.yaml')或通過CSI進行保險庫註射。
資源和樣本參數以「合理」默認值為單位。
7.3依存關系和共享代碼
模式的通用圖表庫(probes,annotations,NetworkPolicy)。
相關性("要求"/"圖表。yaml')根據版本固定;避免深層的「床墊」。
7.4模板和檢查
在'_helpers中使用'required'和'fail'。tpl'表示臨界值。
Values方案的驗證是'values。schema.json`.
圖表的統一測試是「helm unittest」;靜態分析-kubeconform/kubeval。
本地調試是「helm template」+「-values」+「kubeconform」。
7.5個版本和存儲
在OCI容器寄存器中繪制圖表;SemVer標簽。
Helmfile/`helmfile.d'用於編排多項式展開。
CI工件:生成的清單+lockfile依存關系。
8)示例: 部署(Helm模板片段)
yaml apiVersion: apps/v1 kind: Deployment metadata:
name: {{ include "svc. fullname". }}
labels: {{ include "svc. labels". nindent 4 }}
spec:
replicas: {{.Values. replicas default 3 }}
strategy:
type: RollingUpdate rollingUpdate:
maxSurge: 1 maxUnavailable: 0 selector:
matchLabels: {{ include "svc. selectorLabels". nindent 6 }}
template:
metadata:
labels: {{ include "svc. selectorLabels". nindent 8 }}
annotations:
checksum/config: {{ include (print $.Template. BasePath "/configmap. yaml"). sha256sum }}
spec:
serviceAccountName: {{ include "svc. serviceAccountName". }}
securityContext:
runAsNonRoot: true containers:
- name: app image: "{{.Values. image. repository }}:{{.Values. image. tag }}"
imagePullPolicy: IfNotPresent ports:
- name: http containerPort: {{.Values. ports. http }}
resources:
requests:
cpu: {{.Values. resources. requests. cpu }}
memory: {{.Values. resources. requests. memory }}
limits:
cpu: {{.Values. resources. limits. cpu }}
memory: {{.Values. resources. limits. memory }}
readinessProbe:
httpGet:
path: /healthz port: http periodSeconds: 5 envFrom:
- secretRef:
name: {{ include "svc. secretsName". }}
9)秘密和配置
通過CSI (Vault/KMS)或Git存儲庫中的SOPS (GPG/KMS;禁止「kubectl edit」)。
用於滾動發布觸發器的ConfigMap/Secret checksum註釋。
不存儲PAN/PII;使用令牌化。
允許播種秘密,但最好是SOPS或直接CSI。
10)網絡和外圍
用於L7路由,金絲雀和藍綠色的Gateway API;sticky會話僅在必要時進行。
通過mesh/sidecar-less(Cilium)在服務之間的mTLS是支付核心的點。
Egress:受控的外部節點列表(PSP/KYC),固定NAT-IP,定時和撤退預算。
11) Stateful服務和數據
對於OLTP-DBD,在單獨的群集中使用托管雲服務或運算符(Postgres/MySQL)。
PVC/CSI具有snapshot和backaps策略;復制的「PodAntiAffinity」。
對於隊列/流媒體-托管解決方案或專用群集;在「一般」應用群集中保持最低狀態。
12) CI/CD輸送機(參考)
1.構建和測試→ 2) SCA/lint → 3)寄存器映像(SBOM,簽名)→
2.Helm圖表生成+'helm unittest'+kubeconform →
3.Rantime CD → 6)PR中的SOPS剪輯到GitOps存儲庫→
4.Argo/Flux應用→ 8) Argo Rollouts金絲雀→ 9) SLO自動判決→ 10)推廣/回滾。
13)平臺成熟度量標準
通過GitOps發布的份額(目標:100%)。
在準備就緒之前的滾動時間(P95),MTTR回滾。
Namespace的Pod Security和NetworkPolicy覆蓋範圍(目標:100%)。
具有HPA和正確請求/限制的服務百分比。
具有'values的圖表百分比。schema.json'和unit測試。
由「手動」更改引起的事件(目標:0)。
14)實施支票
1.區域群集,配置文件節點池;PDB/TopologySpreadConstraints.
2.Namespace模型,ResourceQuota/LimitRange,RBAC最小值。
3.Pod Security (Restricted) и default-deny NetworkPolicy.
4.Gateway API/Ingress;egress控制和NAT提交給提供商。
5.觀察力:OTel步道,RED/USE,地質合成器;SLO-dashbords。
6.GitOps(Argo/Flux),金絲雀/藍綠色,按度量劃分的汽車行業。
7.Helm標準:結構,計劃。json,測試,SOPS/Vault,OCI寄存器。
8.HPA/VPA、Cluster Autoscaler、warm-pool to peaks。
9.數據操作:CSI狙擊,備份,運算符/托管DB。
10.定期DR/混沌測試和遊戲日。
15)反模式
一個沒有隔離和配額的「巨型」集群。
沒有資源限制的容器,「最新」標簽,沒有問題。
「價值」中的秘密。yaml'公開形式,'kubectl edit'在銷售中。
通過GitOps的版本,對實時群集上的清單進行手動編輯。
沒有NetworkPolicy/Pod Security是「扁平」網絡。
CPU上用於不同類型負載的單個HPA通用信號。
將OLTP-DB存儲在「共享」應用程序群集中,而無需運算符和後備程序。
16) iGaming/fintech上下文: 實用音符
付費webhooks:專用的ingress/gateway和狹窄的PSP egress;嚴格的taymauts/retrai;一個單獨的節點池。
VIP流量:優先級和個別路線;PDB和topology spread用於穩定性。
比賽/高峰:warm-pool節點+謂詞HPA;加熱緩存/連接。
報告/CDC:單獨的群集/池,以便ETL不會影響prod。
調節: 不變邏輯(WORM), PII令牌化,網絡分割.
底線
強大的Kubernetes平臺不是「一堆YAML」,而是標準:隔離、安全政策、管理資源、可觀察性和GitOps紀律。Helm圖表是您的交付合同:可預測的版本,可測試的模板,安全的秘密操作以及簡單的回滾。通過鞏固這些原則,您可以獲得能夠達到峰值,加快發布速度並滿足業務和監管機構要求的群集。