写点什么

InfoQ 专访 Weaveworks 项目团队:开源在理想情况下应该怎样做

  • 2019-07-29
  • 本文字数:3224 字

    阅读完需:约 11 分钟

InfoQ 专访 Weaveworks 项目团队:开源在理想情况下应该怎样做

软件初创公司Weaveworks发布了开源项目 Weave Ignite 以庆祝成立五周年。该项目被称为“带有容器 UX、受 GitOps 管理的虚拟机(VM)”。这个新颖的软件使用了 Firecracker,Firecracker是支持AWS Lambda的AWS开源项目。InfoQ 采访了项目背后的团队以了解更多信息。


一篇关于Weave Ignite的博文中,Weaveworks 的 CEO Alexis Richardson 解释了其工作原理。


通过吸收开发人员来自于容器的经验,Ignite 使 Firecracker 变得易于使用。借助 Ignite,我们可以选择希望作为 VM 运行、符合OCI标准的镜像(Docker 镜像),然后,执行 ignite run 而不是 docker run。无需使用特定于 VM 的工具来构建.vdi、.vmdk 或.qcow2 镜像,只需从任何我们所需的基础镜像进行 docker 构建,并添加我们偏爱的内容。

当我们利用 ignite run 来运行 OCI 镜像时,Firecracker 使用默认的 4.19 Linux 内核,在 c.125 微秒启动一个新的 VM 。


Richardson 提出了一些用例,包括为测试或临时工作负载快速启动很多 VM、同时启动完整堆栈和在轻量级 VM 中运行遗留应用程序。


亚马逊于去年 11 月发布了开源虚拟化技术 Firecracker。记者Matt Asay对此评论道,Weaveworks 在此以 Ignite 为例,展示了开源在理想情况下应该怎样做。


尽管该技术本身看起来超级酷,但是,其中还有一些非常棒的东西 AWS 并没有做。他们构建了 Firecracker 并把它开源,以便像@weaveworks的其他开发人员可以以此为基础构建自己的东西。开源实际上就是这么干的。


为了证明 Weave Ignite 可以用在任何地方,Walmart Labs 的一位工程师写了一篇博文来演示如何让 Ignite 在谷歌云上工作。


为了了解更多关于 Weave Ignite 的细节,InfoQ 联系了 Weaveworks 并采访了 CEO Alexis Richardson和 Ignite 的创建者 Lucas Käldström


InfoQ:Ignite 是否创建了一个“真正的”VM,可以存储持久状态、托管它自己的容器等等?这个和用传统的虚拟机管理程序创建的 VM 看起来不一样吗?


Weaveworks:是的,Ignite 创建了一个真正的 VM。但是,和“传统的”VM 略有不同,比如:

  1. Firecracker 是故意设计成的一个最小的 KVM 实现

  2. 我们使用来自 OCI 镜像(容器行业标准)的根文件系统,而不是使用像“.iso”文件这样的“可引导”磁盘以及像Packer这样的支持工具,它们产生特定于供应商的“.vdi”、“.vmdk”文件。

  3. Ignite 支持声明性配置,并通过GitOps运维

除此之外,请查看我们的FAQ.md


InfoQ:能否给不熟悉 Firecracker 的人做个介绍?


Weaveworks:Firecracker 是 Linux 的最小虚拟化实现(使用 KVM)。

Firecracker 是为无服务器工作负载的新时代而打造,因此,它的设计针对安全和速度进行了优化。换句话说,Firecracker 在给定 Linux 内核和硬盘的情况下启动并监控 VM 。

来自https://firecracker-microvm.github.io/: Firecracker 实现了虚拟机监控器(VMM),利用基于 Linux 内核的虚拟机(Kernel-based Virtual Machine,简称 KVM)来创建和管理微虚拟机(microVM)。Firecracker 采用简约设计。 它不包含不必要的设备和游客功能,以减少每个微 VM 的内存占用和攻击范围。 这可以提高安全性,缩短启动时间并提高硬件利用率。


InfoQ:如何吸收“容器开发人员经验”使 Ignite 比原始的 Firecracker 更容易使用?


Weaveworks:Ignite 与 Firecracker 的关系,就像 Docker 跟 OCI 容器运行时实现的runC的关系一样。

与 runC 一样,Firecracker 旨在作为低级组件。今天,如果我们运行一个容器,我们不会直接使用 runC,而是使用更高级的工具,如 Docker、containerd 或者 Kubernetes。同样,除非我们是 Linux 内核或 KVM 开发人员,我们很可能难以找到如何有效正确使用 Firecracker 的方法。通过从容器中获得 DX,并和像 Docker 和OCI镜像规范集成,Ignite 给用户提供了运行 VM 就像运行容器一样的体验,这比要求用户创建虚拟块设备和以太网接口要简单几个数量级。


InfoQ:需要哪些组件才可以在我们的机器上使用 Ignite?


Weaveworks:基本上 Linux 上的 Docker 即可,请参看说明

具体来说:首先,在启用 KVM 的情况下运行 Linux。这是基本要求,因为 Firecracker 是设计实现了 KVM,只有 Linux 有这个功能。其次,安装一个容器运行时,用于和 Ignite 集成,像 Docker(目前唯一支持的运行时,更多的会很快实现)。下载 Ignite 二进制文件。就这些!


InfoQ:GitOps 是基础设施即代码的进化吗?您能否告诉我们一点关于 GitOps 是什么的知识吗?


Weaveworks:GitOps 是一种自动化 Kubernetes 集群管理和应用程序交付的方法。很多人理解并使用一些 GitOps 概念,但是,很少有人能完全发挥它的作用。我们能对运营做到最深刻的改进就是完全意识到它。

在 GitOps,我们通过不断观察运行时状态并用期望的状态(作为声明配置存储的)与之比较来管理整个实时系统。如果观察到的状态偏离了期望的状态,那么,我们使用如Kubernetes、Flux和Flagger的协调器把系统收敛回正确的状态,并且如果我们无法收敛,那么就发出警报。因此,我们可以直接从配置中配置和管理集群和应用程序,并且,根据策略,可以 100%地自动进行配置和管理。借助 Weave Ignite,现在我们也有了第一个可以从配置进行管理的 VM 技术,就跟 Kubernetes 一样。

Weave 产品使用 GitOps 以创建集群,进行上下扩展、升级和修补,还管理一些D/R。我们可以做集群的自动化、管理大量集群、模板和配置。其次,我们可以用自动化的持续应用程序部署来替换部署脚本。我们可以执行渐进式交付,如金丝雀发布、带功能开头的 A/B 测试,以及控制策略。所有这些都适用任何 CI 工具、镜像注册表和 Git 存储库。

是的,GitOps是DevOps和IaC的进化,但是有重要的改进。有哪些改变?GitOps 无疑把基于配置的管理最初设想发挥到了极致:

  1. 我们管理整个运行软件栈,包括应用程序、服务、网格、金丝雀发布,……和盒子,而不是供应已安装软件的“”。

  2. 我们部署不可变容器和配置文件。CI 和 Dev 从不直接触及运行时,它们通过不变性防火墙进行。

  3. 我们不断地检查系统是否偏移。我们有一个完整的描述来进行比较。

  4. 所有对运行系统的改变,无论有多么细小,都是由配置更改驱动的。

  5. 相反,我们不使用多个接口,即 kubectl、ssh、UIs、CLIs 或者像 OpenShift 这样的外观聚合。

  6. GitOps 必须使用 Git+编排,不能是 Git+CI 脚本。我们不把 CI 脚本用于 CD,因为这些会让我们处于不确定状态。我们手动或用基于 CI 的变化更新 Git,但是,我们不让 CI 协调部署,因为只有 Kubernetes 和其他运行时协调器可以强制实现收敛性和原子性。

  7. 我们还用这种方式管理渐进式交付和功能开关,请点击这里参看 YAML。

  8. 整个环境包括:非程序化的资源,即 playbooks 和控制面板。当我们更新应用程序时,也希望在单一版本控制机制下更新监控、警报和运维文档。

  9. 但是,我们不希望开发人员编写配置文件,我们使用高级编程语言(如 Typescript)从代码安全地生成 YAML,并为集群、管道和基于策略的运维行动管理模板。与基于 CI 的脚本模式不同,这个可以扩展。


InfoQ:您是否需要向 Firecracker 项目提交任何上游更改以让 Ignite 工作?


Weaveworks:不,不需要:)


InfoQ:您提出一些可能的用例,包括 Weaveworks 如何将其用于自己的集群管理产品。哪个开发人员用例对你最有吸引力?


Weavework:要选一个的话,是测试。想象一下,我们是否可以以零成本为 k8s 集群启动测试、CI 和其他版本的开发。也就是说,在 Ignite 上快速启动安全的 Kubernetes 集群,让一些案例变得简单。可以参看我们的入门博文。我们只需要运行几次“ignite run”,然后在那些机器上用我们首选的 Kubernetes 安装程序安装 Kubernetes,例如事实上的社区构建工具kubeadm(Weaveworks 从一开始就一直以开源的方式开发它),还有供企业使用的Weaveworks Kubernetes平台。最终:整个 GitOps 数据中心能够使用现代云原生工具在任何地方运行。


原文链接:


Weaveworks Releases Ignite, AWS Firecracker-Powered Software for Running Containers as VMs


2019-07-29 08:003343
用户头像

发布了 199 篇内容, 共 91.5 次阅读, 收获喜欢 295 次。

关注

评论

发布
暂无评论
发现更多内容

Go Web 编程入门:快速了解Fiber框架

宇宙之一粟

Go 语言 Fiber 5月月更

架构实战营模块5作业

天琪实刚亮

架构训练营毕业设计:电商秒杀系统

AragornYang

架构训练营 架构实战营

架构训练营 毕业总结

AragornYang

架构训练营 架构实战营

Java 集合看这一篇就够了

爱好编程进阶

程序员 后端开发

Nacos源码系列—订阅机制的前因后果(上)

牧小农

源码 nacos

架构实战营 - 毕业总结

smile

架构实战营

AI简报:图像超分模型RCAN+SRResNet

AIWeker

人工智能 深度学习 5月月更 超分

从AI数羊到“相牛”:人工智能应用如何低门槛化?

脑极体

5分钟学会 Vim 分屏操作方方面面

爱好编程进阶

Java 程序员 后端开发

设计模式之代理模式

乌龟哥哥

5月月更

网站开发进阶(六十四)CSS 属性选择器讲解

No Silver Bullet

CSS 属性选择器 5月月更

ElasticSearch 概述

爱好编程进阶

Java 程序员 后端开发

SpringWebFlux中WebClient怎么打印日志?

编号94530

spring 日志 WebFlux WebClient

Druid连接池源码阅读05

石小天

MPEG-TS封装格式

Loken

音视频 5月月更

k8s client-go源码分析 informer源码分析(3)-Reflector源码分析

良凯尔

容器 云原生 Kubernetes 集群 Client-go

Java进阶备战金九银十88道真题:多线程+集合

爱好编程进阶

Java 程序员 后端开发

JDBC访问数据库的一些小技巧

爱好编程进阶

程序员 后端开发

druid 源码阅读 5——讨论下druid为什么不用AtomicLong

张大彪

数据库连接池 -Druid 源码学习(五)

wjchenge

Druid 数据库连接池

有了测试组,为什么还要QA?

高山

测试 QA CMMI

Java字节流和字符流,是时候总结一下IO流了

爱好编程进阶

程序员 后端开发

模块九作业 - 设计电商秒杀系统

smile

架构实战营

Dart 2.17发布,新特性速递

岛上码农

flutter ios 安卓开发 跨平台开发 5月月更

IntelliJ IDEA如何clean或者install Maven项目

爱好编程进阶

程序员 后端开发

学生管理系统(3)

5月月更

druid 源码阅读(五)初始化连接池总结

爱晒太阳的大白

5月月更

K8S 准入控制器有哪些是默认的?

baiyutang

Docker Kubernetes 云原生 k8s 5月月更

15-操作DOM对象

爱好编程进阶

Java 程序员 后端开发

KMP子字符串匹配算法学习笔记

爱好编程进阶

Java 程序员 后端开发

InfoQ 专访 Weaveworks 项目团队:开源在理想情况下应该怎样做_开源_Richard Seroter_InfoQ精选文章