k8s经典蘑菇部署步骤:完成配置检查并验证服务运行

k8s经典蘑菇部署步骤:完成配置检查并验证服务运行
2026-10-29 11:46:47 三九养生堂 作者 谁在为7600亿海光信息“抬轿”? 成龙近 3 年来社交账号所发布内容全是对好友的悼念和告别,对此你有哪些感触? 吴小莉 新浪网官方账号

把 k8s经典蘑菇理解为一套面向 Kubernetes 集群的部署范式:将容器镜像、工作负载、服务入口、伸缩策略和运行观测组织成可重复执行的路径。下面以一个无状态库存查询 API 为例,说明开发人员如何准备模板、平台运维人员如何发布,以及值班人员怎样检查故障。先让 API 稳定接流量,再逐步加入弹性伸缩、持久化和服务网格能力。示例使用 kubectl 创建和调整资源,不预设集群采用哪套 API 资源版本;若改用 YAML 清单,应按目标集群支持的资源定义补齐相应字段。

先拆清模板里要解决的问题

编写资源清单或准备 kubectl 命令前,先明确库存查询 API 如何启动、读取哪些配置、监听什么端口,以及实例异常时怎样判断恢复。典型组合是由 Deployment 管理无状态副本,由 Service 提供集群内稳定地址;需要集群外访问时,再配置 Ingress 和入口控制器。应用配置与镜像分开管理,数据库凭据放入 Secret;需要保留的业务数据交给持久卷,不依赖容器文件系统。

同时确定命名空间、标签和资源边界。例如,将同一业务的 Deployment 与 Service 放在同一命名空间,并统一使用 app: api 标签。Service 选择器必须与 Pod 模板标签匹配,否则 Service 找不到后端,Pod 即使显示运行也无法接收请求。

模板字段库存查询 API 的演练值用途
副本数3 个 Pod验证多实例服务与滚动更新
容器端口8080/TCP接收 API 请求
CPU 请求200m供调度器估算容器所需资源
内存请求256Mi供调度器安排节点容量
CPU 上限1 核限制容器的 CPU 使用量
内存上限512Mi限制容器的内存使用量
  • 镜像:由构建流程产出,并使用可核验的镜像摘要发布。
  • 工作负载:Deployment 管理无状态 API 副本和滚动更新。
  • 网络:Service 负责集群内访问,Ingress 按需承接集群外请求。
  • 运行保障:探针、资源请求、伸缩策略和日志指标共同用于判断服务状态。

按部署顺序搭建基础工作负载

先将应用打包为容器镜像,在镜像中明确启动命令和监听端口,并准备能反映应用状态的健康检查接口。以下命令创建命名空间和 Deployment。镜像摘要、端口及探针路径都要替换或核对为库存查询 API 实际使用的值;占位摘要不能直接用于发布。

kubectl create namespace demo

kubectl create deployment api \
  --image=registry.example.com/team/api@sha256:REPLACE_WITH_DIGEST \
  --replicas=3 \
  -n demo

接着为容器设置资源请求和上限。CPU 请求值为 200m、内存请求值为 256Mi;CPU 上限为 1 核、内存上限为 512Mi。这些是演练参数,不是所有应用的通用标准。实际配置应结合压测结果和运行曲线调整,避免请求值过低导致节点超载,也避免上限设置不当影响服务响应。

kubectl set resources deployment/api -n demo \
  --requests=cpu=200m,memory=256Mi \
  --limits=cpu=1,memory=512Mi

为新 Pod 设置滚动更新策略,并加入就绪探针和存活探针。更新时允许额外启动 1 个 Pod,同时将不可用副本数设为 0,以减少发布期间的容量波动。就绪探针访问 /ready,存活探针访问 /live;请确认应用确实提供这两个端点。

kubectl patch deployment api -n demo --type=strategic \
  -p '{"spec":{"strategy":{"type":"RollingUpdate","rollingUpdate":{"maxSurge":1,"maxUnavailable":0}},"template":{"spec":{"containers":[{"name":"api","readinessProbe":{"httpGet":{"path":"/ready","port":8080},"periodSeconds":10},"livenessProbe":{"httpGet":{"path":"/live","port":8080},"periodSeconds":20}}]}}}}'

若应用启动较慢,可加入 startupProbe,让启动检查先完成,避免存活探针在初始化期间过早判定进程失败。探针接口应真实反映服务状态,不能只返回成功,却忽略关键依赖已经不可用。配置完成后检查 Deployment 与 Pod 的实际状态,而不是只根据命令返回成功就认定服务已经可用。

接通服务,并让发布过程可控

为 Deployment 配置 Service,使用同一组标签选择后端 Pod。下面的命令把集群内的 80 端口转发到容器的 8080 端口;集群内部的调用方通过 Service 名称访问,不直接依赖可能随 Pod 重建而变化的 IP。

kubectl expose deployment api \
  --name=api \
  --port=80 \
  --target-port=8080 \
  --type=ClusterIP \
  -n demo

需要对外访问时,再配置 Ingress 和对应的入口控制器,明确主机名、路径和后端 Service,避免把每个业务端口直接暴露到集群外。readinessProbe 判断实例是否可以接收流量,livenessProbe 判断进程是否需要重启。Service 选择器要与 Deployment 创建的 Pod 标签一致;若 Service 没有可用端点,先检查标签、Pod 就绪状态和目标端口。

发布时使用构建流程生成的镜像摘要,先在测试环境验证,再更新 Deployment 中的镜像地址。观察滚动更新状态、Pod 事件和应用日志;若新 Pod 无法就绪,先检查镜像拉取、配置挂载、端口和探针,再考虑回退到上一个健康的 ReplicaSet。环境差异放入 ConfigMap 或 Secret,避免临时修改镜像来切换配置。

kubectl set image deployment/api \
  api=registry.example.com/team/api@sha256:REPLACE_WITH_NEW_DIGEST \
  -n demo

kubectl rollout status deployment/api -n demo --timeout=180s

不要把数据库密码直接写入镜像或明文配置文件。可以由受控的密钥管理流程创建 Secret,再通过环境变量或卷挂载交给应用;访问凭据时要限制命名空间和服务账号权限。ConfigMap 适合存放非敏感配置,例如下游服务地址和功能开关。

补齐伸缩、容量与故障恢复

当 API 请求量变化明显时,可以为 Deployment 配置 HPA。伸缩依赖集群能提供指标数据,也依赖容器设置合理的 CPU requests。下面将副本范围设为 2 到 10,并把平均 CPU 使用率 65% 作为目标;应用高峰、启动耗时和下游数据库承载能力也要一并评估。

kubectl autoscale deployment api \
  --min=2 \
  --max=10 \
  --cpu=65 \
  -n demo

应用 HPA 前,确认集群指标组件正常,并检查 Deployment 已声明 CPU requests。伸缩不能代替容量规划:数据库连接池上限、消息队列配额和节点可用资源都要同步评估,否则 API 副本增加后,压力可能转移到下游依赖。若 CPU 使用率长期不反映真实瓶颈,还应根据请求量、队列长度或业务延迟补充合适的指标与告警。

对需要保存用户数据的组件,使用 PVC 与合适的存储类,并做好备份和恢复演练。PodDisruptionBudget 可限制自愿中断时同时不可用的副本数;配合多副本和合理的节点分布,可降低维护操作对服务的影响。对于有严格启动顺序或稳定网络标识的服务,应评估 StatefulSet,而不是把有状态组件一概放进 Deployment。

服务网格适合需要统一处理服务间加密、流量治理或细粒度调用观测的场景,但会增加代理资源消耗和运维复杂度。先用 Kubernetes 原生 Service、探针和伸缩能力跑通库存查询主链路,再针对明确需求引入网格策略,避免一开始就把复杂度堆进基础模板。

以运行结果校验整条路径

完成命名空间、Deployment、Service 和 HPA 的配置后,按顺序检查资源状态、后端端点和发布结果:

kubectl get deployment,pods,svc,hpa -n demo
kubectl rollout status deployment/api -n demo --timeout=180s
kubectl get endpointslice -n demo
kubectl describe deployment api -n demo
kubectl logs deployment/api -n demo

执行前确认 demo 命名空间已创建,且镜像摘要已替换为构建流程产出的实际值。依次检查 Pod 是否就绪、Service 是否关联到可用端点、入口是否能访问,以及日志和指标是否持续产生。再演练一次滚动发布,确认新副本就绪后旧副本退出;模拟实例异常,检查流量是否转向健康副本;最后验证回退、扩缩容和数据恢复流程。

kubectl rollout undo deployment/api -n demo
kubectl get pods,svc,hpa -n demo
kubectl get endpointslice -n demo

若发布后出现故障,先结合 Deployment 事件、Pod 状态和应用日志定位原因;确认新镜像或配置有问题时,再执行回退并检查旧副本是否恢复就绪。这样,k8s经典蘑菇就从一组可重复执行的部署步骤变成可复用的运行方法:先标准化工作负载,再接通服务,最后用伸缩、观测和恢复机制巩固稳定性。

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。
屏忆:这款开源工具,把过目就忘的日常变成「上下文」
25000 美元卖公司内部截图,丢了饭碗还要吃牢饭!大厂百万年薪抢招“内鬼分析师”,围剿下一个“自己人”
来自于:新浪网官方
网友评论
投资浮盈成上市险企利润“放大器”
我以为刘翔已经属于自己了
分享到微博
发布
最热评论
最新评论
暂无评论

举报邮箱:[email protected]

Copyright ? 1996-2026 SINA Corporation

All Rights Reserved 新浪公司 版权所有