Kubernetes Namespace内仅更新单个服务的方案及Helm配置咨询
单服务K8s部署更新方案解答
完全支持仅更新Namespace内的单个服务,无需清空全量重部署,这是K8s+Helm部署体系的原生标准能力
前置适配要求
- 建议30个微服务拆分为独立Helm Release管理,或在同一份Helm Chart中为每个服务配置独立的条件渲染开关,两种模式均可实现单服务无影响更新
- 目标Namespace已配置ECR镜像拉取Secret,可正常拉取私有镜像
方案1:每个服务对应独立Helm Release(微服务场景最优方案)
该模式下每个服务维护独立的Chart配置,更新时仅操作对应服务的Release,不会触发其他服务的任何变更。
单个SpringBoot服务的Helm Chart目录结构
service-order/ ├── Chart.yaml ├── values.yaml └── templates/ ├── deployment.yaml ├── service.yaml └── ingress.yaml(按需配置)
核心配置示例
Chart.yaml基础信息配置
apiVersion: v2 name: service-order description: SpringBoot 订单服务Helm Chart version: 1.0.0 appVersion: 2.3.1
values.yaml可配置参数示例(适配ECR镜像)
replicaCount: 3 image: repository: <AWS账号ID>.dkr.ecr.<AWS区域>.amazonaws.com/service-order pullPolicy: IfNotPresent tag: "v1.0.0" # 版本更新时替换为新镜像Tag即可 service: type: ClusterIP port: 8080 resources: limits: cpu: 1000m memory: 2Gi requests: cpu: 500m memory: 1Gi
templates/deployment.yaml核心模板片段(适配SpringBoot健康检查)
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-deployment labels: app: {{ .Release.Name }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ .Release.Name }} template: metadata: labels: app: {{ .Release.Name }} spec: containers: - name: {{ .Release.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 8080 protocol: TCP livenessProbe: httpGet: path: /actuator/health port: http initialDelaySeconds: 60 periodSeconds: 10
单服务更新执行命令
helm upgrade service-order ./service-order \ --namespace <目标Namespace名称> \ --set image.tag=<新构建的镜像版本Tag>
方案2:所有服务同属一份Helm Chart的适配方案
如果当前30个服务统一用一份Helm Chart管理,可通过条件渲染开关实现单服务更新。
核心配置调整
在全局values.yaml中为每个服务增加部署开关:
global: namespace: <目标Namespace名称> # 各服务独立配置 service-order: enabled: false image: tag: "v1.0.0" service-user: enabled: false image: tag: "v1.2.1" # 剩余28个服务同理配置
在每个服务的资源模板开头增加渲染判断:
{{- if .Values.service-order.enabled }} # 此处放置该服务的Deployment、Service等资源配置 {{- end }}
单服务更新执行命令
helm upgrade microservices ./all-in-one-chart \ --namespace <目标Namespace名称> \ --set service-order.enabled=true \ --set service-order.image.tag=<新镜像Tag>
提示:该模式建议部署时增加
--atomic参数避免误操作覆盖其他服务配置,长期使用优先选择独立Release方案。
内容的提问来源于stack exchange,提问作者karthi0702
相关产品推荐
相关产品推荐

