Willson Chen

Stay Hungry, Stay Foolish.

云原生基础

云原生

简介

  • 应用原生被设计为在云上以最佳方式运行,充分发挥云的优势,是上云的最短路径。
  • 云原生的关键技术:
    • 微服务架构
    • 容器
    • 容器编排
    • 服务网格
    • 声明式API
    • 不可变基础设施
    • DevOps

概念

声明式API

  • 只声明期望的状态,不需要具体执行细节。
  • 系统负责将实际状态调整为期望状态。
  • 区别于命令式API需要发出具体执行的命令。
  • 如K8s,使用yaml替代命令行操作。

不可变基础设施

  • 基础设施即代码,使用配置文件而非命令行。
  • 配置文件可以被版本控制,如git。
  • 区别于可变基础设施,如允许管理员ssh到服务器修改配置和安装依赖环境。

DevOps

  • 指开发、运维、测试团队深度合作,辅以高度自动化的研发工具链,以实现快速可靠交付的目的。
  • 在人员组织上,运维在项目初期就介入到开发中,了解架构和技术路线,从而制定运维方案。开发也会在运维初期参与部署。
  • 在工具链上,容器、K8s、CICD、git等。

CI/CD

  • CI(Continuous Integration)持续集成
    • 是指开发经常性进行系统集成,自动化构建并验证,以便快速发现错误。
  • CD(Continuous Delivery)持续交付
    • 是指在持续集成的基础上,可以随时自动化地将应用发布到生产环境上。
  • CI/CD工具,如Gitlab、Jenkins、Tekton等。
  • 流水线:将CI/CD任务分解成多个阶段和步骤,并按顺序执行这些步骤。
  • 流水线常见步骤:拉取代码、静态分析、编译、单元测试、打包、推送仓库、部署等。

服务网格

  • 服务网格(Service Mesh)
    • 定义:管理分布式应用各服务之间通信的基础设施层。
    • 功能:实现服务发现、负载均衡、流量管理、熔断器、监控和日志等。
    • 关键原理:通过独立部署的Sidecar代理流量。
  • Sidecar:
    • 与主进程容器在同一个Pod内运行的独立容器,代理出入流量。
    • 对比于传统方式(通过sdk实现服务治理相关功能)。
    • 可以做到对应用无侵入,独立升级。
  • 优势:
    • 解耦服务治理和业务应用本身,无论开发与部署。
    • 异构系统的统一治理,无需针对每种开发语言提供一套sdk。
  • 劣势:
    • 延迟:多加了一层代理,增加毫秒级延迟。
    • 运维复杂度:需要部署和管理sidecar代理。
  • 常见解决方案:Istio。

云原生技术生态

  • CNCF(Cloud Native Computing Foundation),云原生基金会
  • 2015年google联合其他公司成立,致力于托管和运营云原生项目。
  • CNCF项目如k8s、istio、gRPC、ETCD、gitlab、apisix、prometheus等。