热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从运维的角度理解云原生

1.需求的根本——应用交付(CICD)CICD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。1.1持续集成CI持续集成(CONTINUOUSIN

1. 需求的根本——应用交付(CI/CD)

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。


1.1 持续集成CI

持续集成(CONTINUOUS INTEGRATION,CI)指的是开发人员频繁的(一天多次的)将所有开发者的工作合并到主干上。这些新提交在最终合并到主线之前,都需要通过编译和自动化测试流进行验证,以保障所有的提交在合并主干之后的质量问题,对可能出现的一些问题进行预警。持续集成的核心在于确保新增的代码能够与原先代码正确的集成。

持续集成带来的好处是:


  • 易于定位错误
  • 易于控制开发流程
  • 易于Code Review
  • 易于减少不必要的工作

1.2 持续交付CD

持续交付(CONTINUOUS DELIVERY,CD)的侧重点在于交付,其核心对象不在于代码,而在于可交付的产物。由于持续集成仅仅针对于新旧代码的集成过程执行了一定的测试,其变动到持续交付后还需要一些额外的流程。

持续部署带来的好处是:


  • 发布频率更快,因为不需要停下来等待发布。每一处提交都会自动触发发布流
  • 在小批量发布的时候,风险降低了,发现问题可以很轻松的修复
  • 客户每天都可以看到持续改进和提升,而不是每个月或者每季度,或者每年
  • 自动实时的部署上线,是最优的解决办法,但持续部署的要求是团队非常成熟,并且上线前是需要经过QA测试的,所以实际情况下很难实现,一般的团队也很难接受,挑战和风险都很大。

2. 应用交付(CI/CD)的发展

CI/CD这些年,经历了快速发展,应用从开发到交付的流程也越来越方便和自动化。
软件从开发到交付


2.1 裸机/虚拟机

在传统裸机(bare metal)或虚拟化的时代,当开发团队将代码交付给运维进行生产环境中部署,但是它却未能正常工作时,挑战就出现了。

“运行环境不一致”、“没有安装相关依赖软件”、“配置文件不一样”等等已经成了开发和运维沟通的惯用语。


2.2 容器

有了容器之后,由于容器镜像里打包的不仅是应用,而是整个操作系统的文件和目录,即其运行所需的所有依赖,都能被封装一起。我们只需要解压这个容器镜像,那么这个应用所需的所有运行依赖都是存在的、一致的。


2.3 k8s

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势。

一个专门用于容器编排调度的工具呼之欲出,Kubernetes的出现彻底改变了局面,可以说它直接改变了应用的基础架构。而Kubernetes这种声明式配置尤其适合CI/CD流程。


2.4 云原生

从宏观概念上讲,云原生是不同思想的集合,集目前各种热门技术之大成,CNCF(云原生计算基金会)给出了云原生应用的三大特征:


  • 容器化包装:软件应用的进程应该包装在容器中独立运行。
  • 动态管理:通过集中式的编排调度系统来动态的管理和调度。
  • 微服务化:明确服务间的依赖,互相解耦。

在这里插入图片描述


2.5 使用Jenkins进行CI/CD

使用Jenkins进行持续集成与发布流程


  1. 用户向Gitlab提交代码,代码中必须包含Dockerfile
  2. 将代码提交到远程仓库
  3. 用户在发布应用时需要填写git仓库地址和分支、服务类型、服务名称、资源数量、实例个数,确定后触发Jenkins自动构建
  4. Jenkins的CI流水线自动编译代码并打包成Docker镜像推送到Harbor镜像仓库
  5. Jenkins的CI流水线中包括了自定义脚本,根据我们已准备好的Kubernetes的YAML模板,将其中的变量替换成用户输入的选项
  6. 生成应用的Kubernetes YAML配置文件
  7. 更新Ingress的配置,根据新部署的应用的名称,在Ingress的配置文件中增加一条路由信息
  8. 更新PowerDNS,向其中插入一条DNS记录,IP地址是边缘节点的IP地址。
  9. Jenkins调用Kubernetes的API,部署应用

3. OAM


3.1 基于 Kubernetes 的 DevOps 平台新挑战

随着云原生时代的到来,以面向终态设计著称的申明式 API 逐渐打破了原有 DevOps 的工作模式。用户只需申明一个应用的 YAML 格式,便可以在 K8s 上快速部署和交付软件。
在这里插入图片描述
然而 K8s 的 API 并非完美


  • 依然有大量用户觉得 YAML 文件复杂难以理解
  • 各类云资源也无法用原生的方式统一调用
  • 复杂应用依然难以部署和管理
    k8s

3.2 OAM 应用模型

OAM 是以应用为中心的分层模型。
oam

OAM应用 = Component + Traint:


  • Component
    OAM 中常见的概念是 Component 组件,完全从研发角度定义的待部署单元。组件,组合起来就可以构建简单的应用。
  • Trait
    如果关心应用运维的问题,OAM 中有 Trait 的概念,指的是在原来组件的基础上附加一些特征。特征指的是运维的能力,如手动扩缩容能力、外部访问能力、发布、负载均衡。弹性扩缩容、基于流量的管理等等。

有了OAM之后,研发只需要关心component, 运维给component加上trait。


参考

如何基于 K8s 构建下一代 DevOps 平台?
云原生技术实践公开课


推荐阅读
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 如何从BAM文件绘制ATAC-seq插入片段长度分布图?
    在ATAC-seq数据处理中,插入片段长度的分布图是一个重要的质量控制指标,它能反映出核小体的周期性排列。本文将详细介绍如何从BAM文件中提取并绘制这些数据。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有