Skip to content

云原生生态:容器运行时 / Service Mesh / GitOps / CI-CD ​

一、什么是"云原生"(Cloud Native) ​

CNCF 定义:云原生技术让组织能在公有云/私有云/混合云等现代动态环境中,构建和运行可弹性扩展的应用。代表技术:容器、服务网格、微服务、不可变基础设施、声明式 API。

四要素(常考):容器化、微服务、DevOps / CI-CD、持续交付。 延伸:可观测性(Observability)、Service Mesh、Serverless、GitOps。

核心思想:应用与基础设施解耦、一切声明式、面向失败设计(假设会挂,能自愈)、不可变基础设施。

二、容器基础 ​

  • 容器 vs 虚拟机:容器共享宿主机内核,靠 namespace(隔离视图)+ cgroups(限制资源) 实现隔离,轻量、启动快;VM 有独立内核,重、隔离更强。
  • 镜像分层:镜像由只读层叠加,容器加一个可写层;分层复用让拉取/存储高效。
  • Docker → containerd:Docker 把容器运行时拆出 containerd;K8s 通过 CRI 接口对接运行时,Docker 因不直接实现 CRI 被弃用(dockershim 移除),现在默认 containerd / CRI-O。
  • OCI 标准:镜像规范(OCI Image)+ 运行时规范(OCI Runtime),保证生态互通。

三、Service Mesh(服务网格) ​

  • 解决什么:微服务间通信的流量治理、安全(mTLS)、可观测性、熔断限流重试——原本要写进业务代码,现在下沉到基础设施层。
  • 实现方式:Sidecar 代理(Istio 用 Envoy)与业务容器同 Pod,拦截所有进出流量;控制平面下发规则。
  • 代表:Istio、Linkerd、Consul。新趋势:Ambient Mesh / eBPF(如 Cilium)减少 sidecar 开销。
  • Service Mesh vs Ingress:Ingress 管南北向(集群入口),Mesh 管东西向(服务间)+ 南北向。

四、GitOps ​

  • 核心:Git 是唯一事实来源;集群状态由 Git 中声明的期望状态驱动,用控制器持续同步。
  • 工具:ArgoCD、Flux。
  • 优点:可审计(Git history)、可回滚、声明式、自动化;避免"手工 kubectl 改线上"。
  • Pull 模式:集群内 agent 拉取 Git 并 apply(比 Push 模式更安全,凭证不出集群)。

五、CI/CD ​

  • CI(持续集成):代码提交后自动构建、测试、镜像打包。
  • CD(持续交付/部署):自动把镜像发布到环境。
  • 典型流水线:commit → build → test → 构建镜像 → 推送镜像仓库 → 部署(kubectl set image / Helm / ArgoCD)。
  • 工具:GitLab CI、GitHub Actions、Jenkins、Tekton、Argo Workflows。

六、包管理与配置 ​

  • Helm:K8s 的包管理器,用 Chart 模板化 + values.yaml 参数化,管理复杂应用的一组资源,支持版本与回滚。
  • Kustomize:无模板、用 overlay 叠加定制多环境(原生集成在 kubectl)。
  • Operator:CRD + 控制器,把领域运维知识编码成软件(如 Prometheus Operator、各种数据库 Operator)。

七、其他高频名词 ​

  • CRD / CR:扩展 K8s API,自定义资源(Custom Resource Definition)与其实例。
  • Serverless / FaaS:Knative、OpenFaaS,按需运行、缩到零。
  • 不可变基础设施:不原地改,而是替换(重建新容器/镜像)。
  • 容器镜像仓库:Harbor、镜像扫描、多架构镜像。
  • 多集群 / 联邦:Karmada、集群网格,跨云跨区管理。

八、高频速答 ​

Q:容器和虚拟机本质区别? A:容器共享宿主内核、用 namespace/cgroups 隔离,轻量启动快;VM 有独立内核,隔离强但重。

Q:Service Mesh 解决了什么问题?为什么不直接写 SDK? A:把通信治理(mTLS、重试、熔断、指标)从业务代码下沉到 sidecar,语言无关、统一治理、可独立升级;代价是额外延迟与资源开销。

Q:GitOps 和普通 CI/CD 区别? A:GitOps 强调"Git 为唯一事实来源 + 控制器持续同步(Pull 模式)",状态可审计可回滚,天然声明式;普通 CD 常是流水线 Push 部署。

Q:Helm 的作用? A:把一组 K8s 资源模板化打包成 Chart,参数化复用、版本管理与回滚,解决"手写一堆 YAML"的痛点。

Q:什么是 Operator? A:用 CRD 定义自定义资源 + 控制器实现其运维逻辑,把人工运维知识自动化(如自动扩缩、备份、故障恢复)。

Q:K8s 为什么不用 Docker 了? A:K8s 通过 CRI 对接容器运行时,Docker 不直接实现 CRI(需 dockershim 适配层),故移除;containerd 更轻、更符合分层设计。

糌粑的面经笔记 · VitePress 版