云原生学习笔记

351 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文介绍:CNCF(Cloud Native)、DevOps、云原生应用的一般过程、云原生应用平台的建设目标、GitOps发布模型、DevOps、微服务、容器的关系

CNCF(Cloud Native)

云原生(Cloud Native)技技术帮助企业和机构在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、 服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术可以使开发者轻松地对系统进行频 繁并可预测的重大变更

云原生技术是释放云原生价值最有效最短的路径,

pivotal.io/cn/cloud-na… yq.aliyun.com/articles/74…

image.png

云原生应用关注以下四点:

  • 持续集成DevOps
  • 持续交付
  • 微服务
  • 容器化

DevOps

DevOps 是软件开发人员和 IT 运营之间的合作,目标是自动执行软件交付和基础架构更改流程。它创造了一种文化和环境,可在其中快速、频繁且更可靠地构建、测试和发布软件。

持续交付

持续交付使得单个应用更改在准备就绪后即可发布,而不必等待与其他更改捆绑发布或等待维护窗口期等事件。持续交付让发布行为变得平淡可靠,因此企业可以以更低的风险频繁交付,并更快地获得最终用户的反馈,直到部署成为业务流程和企业竞争力必不可少的组成部分。

微服务

微服务是将应用作为小型服务集合进行开发的架构方法,其中每个服务都可实施业务功能,在自己的流程中运行并通过 HTTP API 进行通信。每个微服务都可以独立于应用中的其他服务进行部署、升级、扩展和重新启动,通常作为自动化系统的一部分运行,可以在不影响最终客户的情况下频繁更新正在使用中的应用。

容器化

与标准虚拟机相比,容器能同时提供效率和速度。单个操作系统实例使用操作系统 级的虚拟化,在一个或多个隔离容器之间进行动态划分,每个容器都具有唯一的可写文件系统和资源配额。创建和破坏容器的开销较低,再加上单个虚拟机中的高包装密度,使容器成为部署各个微服务的完美计算工具

云原生技术的优势

  • 资源按需分配(资源动态创建动态销毁)
  • 更快速的迭代(自动触发、减少人工失误、降低迭代成本、加快迭代频率)
  • 快速部署(自动化部署、提高部署效率)
  • 高可用性(应用多副本,保障业务高可用)
  • 低成本(资源的高利用降低了硬件成本、自动化降低了人工成本)
  • 环境一致性(应用容器化、保证应用开发环境和生产环境的一致性)
  • 自动伸缩(基于应用负载自动扩缩容、保证业务的连续性)
  • 多租户(容器平台的多租户特性可以满足多项目组同时开发)

云原生应用的一般过程

image.png

云原生应用平台的建设目标

image.png

GitOps发布模型

GitOps是一种实现云原生的持续交付模型 GitOps 之应用安全发布模型实践

GitOps发布模型核心思想:

  • 将应用系统的声明性基础架构和应用程序存放在Git版本库中,所有的对应用的操作变更都来源于Git仓库的更新

GitOps发布模型核心能力:

  • 版本管理
    • 应用版本号与git commit映射
    • 每个变更都有历史记录查询
    • 可快速定位故障
    • 可快速回滚
  • 基线管理
    • 环境栈基线:不同环境映射不同的代码分支
    • 发布基线:线上发布设置基线,对应代码的release tag
  • 安全发布(包括发布权限管理以及安全审批)
    • 代码变更review、合并
    • 环境配置信息安全管理
    • 发布审批
  • 快速反馈
    • 测试结果反馈
    • 预览应用

GitOps发布模型特性:

  • Git 仓库是任何 CICD 过程的唯一输入源
  • 声明式的应用编排、构建部署模型
  • 应用在环境栈之间的无差别、自动化推进
  • PR/MR 触发的拉取式流水线过程
  • 快速反馈机制

image.png

使用GitOps管理应用发布到不同Kubernetes集群的架构图

image.png

一个应用开发测试到上线迭代的完整流程时序图

image.png

DevOps、微服务、容器的关系

image.png

  • 微服务完美匹配DevOps理念(分而治之、连续集成、快速交付)
    • 大型应用拆分为微服务,让责任边界更明确,引导交付流程变革
    • 清晰的边界、独立的部署,为更快的迭代和交付流程自动化提供可能
    • 越小的业务边界使得实现的复杂性降低,提高交付质量
  • 容器定义新的交付方式