K8s 不部署源代码、不构建应用

一、CI/CD 到底是什么?

CI/CD 是「代码 → 容器镜像 → 部署到 K8s 运行」的完整流程,分 3 个核心阶段:

1. CI(持续集成,Continuous Integration):代码 → 容器镜像

  • 做的事:
    1. 从 Git 仓库拉取最新的源代码
    2. 编译 / 打包代码(比如 Java 项目mvn package、Go 项目go build
    3. 编写 Dockerfile,把编译好的程序打包成容器镜像
    4. 把镜像推送到镜像仓库(比如 Harbor、Docker Hub、阿里云镜像服务)
  • 常用工具:Jenkins、GitLab CI、GitHub Actions、GitLab Runner、Argo Workflows 等

2. CD(持续交付 / 部署,Continuous Delivery/Deployment):镜像 → 部署到 K8s

  • 做的事:
    1. 从镜像仓库拉取最新的镜像
    2. 更新 K8s 的 Deployment/StatefulSet 等资源的镜像版本
    3. 触发 K8s 滚动更新,把旧 Pod 替换成新镜像的 Pod
    4. 验证服务正常运行

二、K8s 在这个流程里,管什么、不管什么?

K8s 只负责:最终的「部署运行」环节

K8s 的核心工作,是运行已经打包好的容器镜像

  • 你给 K8s 一个 Deployment YAML,里面写了image: nginx:1.25.3,K8s 就会:
    1. 拉取这个镜像
    2. 创建 Pod 运行容器
    3. 维护 Pod 的状态(挂了自动重启、数量不够自动扩容)
    4. 完成滚动更新、回滚等操作
  • 简单说:K8s 只认「容器镜像」,不认「源代码」

K8s 完全不管:「代码 → 镜像」的 CI 过程

K8s 不会参与、也不会干涉代码变成镜像的任何步骤:

  • 不管你用什么工具做 CI:Jenkins、GitLab CI、GitHub Actions、甚至手动docker build,K8s 都不关心
  • 不管你用什么构建流程:是每次提交代码自动构建,还是手动触发构建,K8s 都不干涉
  • 不管你用什么镜像仓库:Harbor、Docker Hub、私有仓库,K8s 只负责拉取,不负责镜像的构建和推送
  • 不管你用什么语言 / 框架:Java、Go、Python、Node.js,K8s 都不参与编译打包,只运行最终的容器

三、实际例子

场景:把一个 Java Web 项目部署到 K8s

1. CI 阶段(K8s 完全不参与,企业自己做)
  • 开发提交代码到 GitLab
  • GitLab CI 自动触发流水线:
    1. 拉取代码 → mvn clean package 编译打包成 jar 包
    2. 编写 Dockerfile,把 jar 包打包成镜像 my-app:v1.0.0
    3. 把镜像推送到 Harbor 私有仓库
  • 这个过程和 K8s 没有任何关系,K8s 完全不知道代码的存在。
2. CD 阶段(K8s 只负责最后一步)
  • CD 工具(比如 Argo CD、Jenkins)从 Harbor 拉取my-app:v1.0.0
  • 更新 K8s 的 Deployment YAML,把镜像版本改成my-app:v1.0.0
  • K8s 收到更新请求后,执行滚动更新
    1. 拉取新镜像
    2. 创建新 Pod,启动容器
    3. 销毁旧 Pod
    4. 确保最终运行的 Pod 数量符合期望
  • 这里 K8s 只做「运行容器」的事,完全不关心镜像怎么来的。

四、为什么 K8s 要这么设计?

  1. 解耦:把「构建流程」和「运行平台」彻底分开,企业可以自由选择适合自己的 CI/CD 工具和流程,不用被 K8s 绑定。
  2. 通用性:K8s 只需要支持容器运行,就能适配所有语言、所有构建流程的应用,不用为不同语言做适配。
  3. 职责清晰:K8s 专注做「容器编排」,CI/CD 工具专注做「代码构建」,各司其职,系统更稳定、更易维护。

五、常见误区纠正

  • 误区:K8s 可以直接部署源代码 纠正:K8s 不能直接运行源代码,必须先把代码打包成容器镜像,K8s 才能运行。
  • 误区:K8s 自带 CI/CD 功能 纠正:K8s 本身没有 CI/CD 能力,需要配合 Jenkins、GitLab CI 等工具使用,K8s 只负责最终的部署环节。
  • 误区:K8s 会干涉 CI/CD 流程 纠正:K8s 完全不干涉 CI/CD 的流程设计,企业可以根据自己的需求自定义流程,K8s 只执行最终的部署操作。

六、总结

K8s 是「容器的运行平台」,不是「代码的构建平台」。它只负责运行已经打包好的容器,不负责把代码变成容器的过程。

相关推荐
运维全栈笔记12 小时前
K8S部署Redis高可用全攻略:1主2从3哨兵架构实战
redis·docker·云原生·容器·架构·kubernetes·bootstrap
尘世壹俗人13 小时前
使用K8s部署模型
kubernetes
AI木马人15 小时前
9.人工智能实战:GPU 服务如何上 Kubernetes?从单机部署到 K8s + NVIDIA Device Plugin + HPA 的生产级改造
人工智能·容器·kubernetes
码点滴19 小时前
告别显存焦虑:PagedAttention 如何将大模型吞吐量提升 4 倍?
人工智能·架构·kubernetes·大模型·pagedattention
键盘鼓手苏苏20 小时前
Kubernetes 容器安全最佳实践
云原生·kubernetes·k8
键盘鼓手苏苏20 小时前
Kubernetes 安全最佳实践
云原生·kubernetes·k8
木雷坞2 天前
K8s GPU 推理服务 ImagePullBackOff 排查与预热
云原生·容器·kubernetes·gpu算力
吴爃2 天前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
The Straggling Crow2 天前
Monitoring 2026-04-30
kubernetes
AOwhisky2 天前
Kubernetes调度与服务暴露:从“定时任务”到“服务发现”的完全指南
linux·运维·云原生·容器·kubernetes·服务发现