为什么代码在开发电脑能跑,上线却报错?
开发使用某个 Node 版本和系统库,服务器环境不同。
环境差异造成依赖缺失、版本冲突和难以复现的问题。
Docker 把应用和运行依赖打包为 Image,在任何兼容 Host 上启动一致的 Container。
问题反馈中记录版本和环境,避免只描述“页面坏了”。
理解应用如何被打包、复制、调度和自动恢复。
部署与云、研发协作、性能与扩容、项目与协作
容器把应用和运行依赖打包成一致环境,Kubernetes 管理大量容器的部署、扩容和恢复。
团队需要让应用在开发、测试和生产中一致运行,并自动管理多个实例。
位于应用与云基础设施之间,是现代运行与编排层。
Image、Container、Dockerfile、Registry、Compose、Pod、Deployment、Service、Ingress 和 Cluster。
前端、后端、数据库工具和 Worker 都可以被容器化并部署到集群。
把代码、运行时和依赖封装成可重复运行的镜像。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
开发使用某个 Node 版本和系统库,服务器环境不同。
环境差异造成依赖缺失、版本冲突和难以复现的问题。
Docker 把应用和运行依赖打包为 Image,在任何兼容 Host 上启动一致的 Container。
问题反馈中记录版本和环境,避免只描述“页面坏了”。
应用依赖特定 Node、Python、系统库和配置。本地与服务器环境不同会导致运行差异。Docker 使用标准镜像描述环境,让同一版本在多处一致启动。
容器共享宿主机内核,比完整虚拟机更轻。它提供隔离和可复制环境,但数据持久化、网络和安全仍需设计。
Docker 处理运行环境,页面交互和业务逻辑仍由应用代码负责。
镜像像发布包,容器是镜像正在运行的实例。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
测试环境验证新版,生产环境仍运行稳定版。
没有版本化制品会导致部署内容不确定,也无法快速回滚。
Image 通过 Tag 标记版本并推送到 Registry;Container 从指定版本启动;Volume 保存需要持久化的数据。
后台或诊断页可展示当前版本,便于问题对照。
构建一次镜像后,可以启动多个容器。Registry 保存和分发镜像版本,部署系统从 Registry 拉取指定版本。
容器自身文件通常被视为临时状态,数据库和上传文件应使用 Volume 或外部托管存储。
版本号应对应可追踪发布,避免使用无法确认内容的模糊标签。
Dockerfile 描述单个镜像,Compose 编排一组本地或简单环境服务。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
项目包含三个服务,每个都有不同依赖和启动方式。
手工安装会导致环境不一致,入门成本高。
Dockerfile 描述单个镜像,Docker Compose 编排多个容器,Base Image 提供基础运行环境。
README 和本地演示流程应明确数据初始化、端口和失败排查。
Dockerfile 声明基础镜像、复制文件、安装依赖、构建应用和启动命令。良好镜像要小、可缓存、权限合理并避免包含密钥。
Compose 可以一次启动 Web、API、PostgreSQL 和 Redis,适合本地开发、课程演示和简单部署。
services:
web:
build: ./web
api:
build: ./api
db:
image: postgres
redis:
image: redis一个完整产品本地运行时,往往已经包含多个容器,即使生产架构仍是单体。
当容器数量和机器数量增加,需要统一调度与自动化管理。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
业务高峰需要增加实例,故障后还要自动恢复。
人工登录服务器启动和搬迁容器无法应对大规模变化。
Kubernetes 在 Cluster 中通过 Control Plane 调度、扩缩和恢复容器工作负载。
产品要接受实例动态变化,用户状态不能依赖某一台机器。
Kubernetes 根据声明状态把容器放到合适节点,保持期望副本数,发现故障后重新启动,并支持滚动发布和自动扩缩。
它解决大规模运行问题,也增加概念、配置和运维成本。小型应用可以使用托管平台或简单容器部署。
Kubernetes 不会自动修复业务 Bug,它保证容器按声明运行,并提供运行治理能力。
这些资源分别负责运行单元、版本与副本、稳定入口和外部路由。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
外部用户访问 /orders,后台同时运行多个订单 Pod。
Pod 地址会变化,客户端无法直接依赖某个实例。
Ingress 接收外部流量,Kubernetes Service 提供稳定入口,Deployment 管理多个 Pod。
维护和扩容过程应保持用户入口稳定,避免暴露内部拓扑。
Pod 是最小调度单元,通常包含一个主要容器。Deployment 声明镜像版本和副本数,并管理更新。
Kubernetes Service 为变化的 Pod 提供稳定内部地址,Ingress 把外部域名和路径转发到不同 Service。
Pod 地址会变化,Service 提供稳定访问;这与后端代码中的 Service 含义完全不同。
Kubernetes 根据健康状态和负载维持应用运行。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
订单服务从 v1 更新到 v2,同时流量持续进入。
一次关闭全部旧实例再启动新版会造成中断,新实例未准备好也会返回错误。
Rolling Update 分批替换;Readiness Probe 确认实例可接流量;Autoscaling 根据负载增加实例。
设计兼容旧新版本同时运行的状态,重要操作避免在切换中丢失。
Rolling Update 逐步替换旧 Pod,减少停机。Readiness Probe 决定实例是否接收流量,Liveness Probe 判断是否需要重启。
Horizontal Pod Autoscaler 可以根据 CPU 或自定义指标调整副本数。自动扩缩仍受数据库、队列和外部依赖容量限制。
发布过程中用户可能同时访问新旧版本,接口和数据结构需要兼容。
同一个词在代码、架构和 Kubernetes 中代表不同层级。
先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。
团队说“Project Service 里加校验”“拆成文档微服务”“K8s Service 没转发到 Pod”。
同一个词跨代码、架构和平台层使用,容易造成理解错位。
Service Layer 是代码中的业务层;Microservice 是独立部署应用;Kubernetes Service 是集群网络入口。
沟通时补上层级和完整名称,设计师可以继续追问它影响哪段用户流程。
后端 Service 是代码层,封装业务逻辑;微服务是架构层,可独立部署的业务能力;Kubernetes Service 是基础设施层,为 Pod 提供稳定网络地址。
判断含义时看它的上下文:代码目录、系统架构图或集群配置。技术沟通里明确层级可以减少大量误解。
这类同名概念正是全景学习的价值:先放到层级里,再理解细节。
画出浏览器请求进入 Kubernetes 后经过 Ingress、Service、Deployment、Pod、Container 的路径。