前几天,我遇到了一个规范的Juju工具。
互联网上的废料声称它是一个配置管理工具,例如Chef,Ansible或Puppet。
我倾斜地看了看书架上的基座,看了看带有魅力模块的存储库(菜谱或剧本的类似物),并认为事实并非如此。
Juju更像是一个与虚拟机无关的乐队(例如Nomad或Kubernetes)。 在上面,您可以声明性地描述应用程序的基础结构配置:我们运行哪些应用程序,在哪些计算机上运行,有多少副本以及它们如何与其他服务连接。
但是与Kubernetes不同,它不仅可以与Docker一起使用,而且还可以与任何类型的虚拟机一起使用。
他们说内核,代理和客户端是用Golang编写的-我没有看过。
通常将与配置本身相关的部分与YAML和Python结合使用(坞站表示您可以使用除python之外的其他语言)。
这一切如何运作?
免责声明 :本文并不声称是完整而准确的描述,我认为它是降低那些希望了解Juju并帮助浏览文档的人的入门方法。
完整的文档在这里: https : //docs.jujucharms.com/
如上文所述,在Juju中包含以下几个组成部分:
- 控制器是分配虚拟机的服务器部分。 每个[cloud]提供程序都有其自己的控制器(包括不太适用的云提供程序,例如本地LXD或“ 金属即服务” )。
该控制器是一个组件的整体应用程序。 每个提供程序中至少必须运行一个控制器副本。 有一些HA,但是我没有深入研究。 - 代理-放在每个虚拟机上。 代理有两种-用于机器和用于单位。 似乎其中之一放在主机上,而其中之一放在虚拟机中-我也没有详细研究。
- 客户端是用于管理所有经济情况的CLI工具。
- 图形用户界面
- 所有用户组件(应用程序,机器等)的声明性描述
- 用于设置单独的虚拟机的自定义代码,称为Charms
(实际上,有一个更大的组件树,但是对于这个故事,我们将其简化以使您更容易理解是什么)
在说明性描述中,您可以构建大约以下组件结构(图形由GUI自动绘制):

服务器部分以某种方式在此处创建虚拟机,拉动依赖关系,在它们之间建立关系,跟踪出现的信号-那里的一切似乎都很标准,就像其他协调器一样。
这里是配置虚拟机的模块,称为超级按钮(单位-超级按钮),让我们仔细看看。
看来我认识Chef,Ansible和Puppet,这里可能没有什么新鲜事物,但事实并非如此。 Juju的创建者没有创建DSL来声明性地描述系统中的资源。 相反,他们创建了一个框架,该框架将使完全普通的python或bash代码成为幂等,并将其与Juju控制器关联。
魅力装置
魅力本身不是很简单。 由于结构的复杂性,他们提醒厨师的菜谱或ansible的角色。 实际上,它们更像是资源而不是食谱。
它们由元数据/声明部分,强制挂钩(对事件的反应)和各种数据文件(例如,附加脚本,文档或典型配置)组成。
声明部分描述了魅力依赖接口(例如,wordpress魅力取决于mysql,而mysql魅力提供了此接口),系统兼容性,标签,配置参数(例如cookie属性)以及取决于其他魅力的程序层(例如,大多数超级按钮都包含layer:basic
)。
在命令式挂钩中,描述了对各种外部事件的反应。 例如,我们在install
事件上install
必要的软件包,在configure
事件上对其进行configure
,并在start
事件上start
服务。
所有这些都是在带有装饰器的常规python上编写的(我在某处读到了可以在任何东西上写的语句,甚至可以在bash上写,但我没有看到任何示例)。
NTP是一个典型的轻量级示例: https : //github.com/lampkicking/charm-ntp
有趣的是,显然,在编译超级按钮时,获得了一个完全独立的应用程序,可以在服务器上运行而没有其他依赖项-在编译版本中,我看到它包含了它使用的所有层的内容以及所有使用的Python模块的压缩包。
NTP的示例: https : //jaas.ai/ntp/32 (请参阅页面右侧的文件列表)。
总结
Juju有一种非常有趣且不寻常的方法来描述和设置基础结构。
juju最有可能比厨师的门槛更高,与菜谱和剧本相比,juju的魅力极有可能发展缓慢,并且需要更多的编程技能。
另一方面,我认为带有事件挂钩的模型会鼓励您编写更多正确的代码。
在我看来,Juju更面向基础架构程序员(那些在5-7年前在python上用python写了很多CLI工具的程序员)的过程中,现在他们需要配置服务器,而Chef / Ansible则是针对管理员的,而不是管理员-现在需要两个服务器来配置一百或两个服务器。
我应该在2019年使用Juju吗?
不确定:
- 您将新的(云原生)应用程序包装到docker中的docker中,并在cuber或ECS上启动它
- 对于“旧”应用程序,您可能已经在整体或老板中编写了部署脚本
- 对于具有“旧”架构的新项目-也许。 但是 :
- 几乎没有人知道RuNet中的Juju,这是俄语的第一篇文章,介绍了一些含义
如果您与Juju合作,请在评论中写错我的地方-毕竟,我只为她读了2-3个小时的码头信息。