多节点OpenStack Charms 部署指南0.0.1.dev223--27--Charm Hook

56 篇文章 4 订阅
56 篇文章 1 订阅

目录:
第一节 多节点OpenStack Charms 部署指南0.0.1.dev223–1--OpenStack Charms 部署指南
第二节 多节点OpenStack Charms 部署指南0.0.1.dev223–2-安装MAAS

第三节 多节点OpenStack Charms 部署指南0.0.1.dev223–3-安装Juju

第四节 多节点OpenStack Charms 部署指南0.0.1.dev223–4-安装openstack

第五节 多节点OpenStack Charms 部署指南0.0.1.dev223–5--使bundle安装openstack

第六节 多节点OpenStack Charms 部署指南0.0.1.dev223–6--配置vault和设置数字证书生命周期

第七节 多节点OpenStack Charms 部署指南0.0.1.dev223–7--juju 离线部署bundle

第八节 多节点OpenStack Charms 部署指南0.0.1.dev223–8--配置 OpenStack

附录 t 多节点OpenStack Charms 部署指南0.0.1.dev223–附录T–OpenStack 高可用性

第九节 多节点OpenStack Charms 部署指南0.0.1.dev223–9--网络拓扑

第十节 多节点OpenStack Charms 部署指南0.0.1.dev223–10–OpenStack 高可用基础架构实际

第十一节 多节点OpenStack Charms 部署指南0.0.1.dev223–11–访问Juju仪表板

第十二节 多节点OpenStack Charms 部署指南0.0.1.dev223–12–OpenStack 配置openstack失败后处理

第十三节 多节点OpenStack Charms 部署指南0.0.1.dev223–13–OpenStack配置高可用后无法登陆openstack dashboard

第十四节 多节点OpenStack Charms 部署指南0.0.1.dev223–14–ssh端口转发解决IDC机房国际线路不良问题

第十五节 多节点OpenStack Charms 部署指南0.0.1.dev299–15–OpenStack 实例高可用

第十六节 多节点OpenStack Charms 部署指南0.0.1.dev299–16–OpenStack基础架构高可用The easyrsa resource is missing. .

第十七节 多节点OpenStack Charms 部署指南0.0.1.dev303–17–修改实例数量等quota上限

第十八节 多节点OpenStack Charms 部署指南0.0.1.dev303–18–backup备份

第十九节 多节点OpenStack Charms 部署指南0.0.1.dev303–19–juju log

第二十节 多节点OpenStack Charms 部署指南0.0.1.dev303–20–控制器高可用性

第二十一节 多节点OpenStack Charms 部署指南0.0.1.dev303–21–控制器备份和还原

第二十二节 多节点OpenStack Charms 部署指南0.0.1.dev223–22-- Resource: res_masakari_haproxy not running

第二十三节 多节点OpenStack Charms 部署指南0.0.1.dev223–23-登录openstack-dashboad,SSLError(SSLCertVerificationError

第二十四节 多节点OpenStack Charms 部署指南0.0.1.dev223–24-Resource: res_masakari_f8b6bde_vip not running

第二十五节 多节点OpenStack Charms 部署指南0.0.1.dev223–25–rsyslog 日志服务器构建实际

第二十六节 多节点OpenStack Charms 部署指南0.0.1.dev223–26–跨model 建立关系构建rsyslog 日志服务器构建实际

第二十七节 多节点OpenStack Charms 部署指南0.0.1.dev223–27–Charm Hook

第二十八节 多节点OpenStack Charms 部署指南0.0.1.dev223–28–Command run

第三十节 多节点OpenStack Charms 部署指南0.0.1.–30–参考体系结构—Dell EMC硬件上的Canonical Charmed OpenStack(Ussuri)

第三十一节 多节点OpenStack Charms 部署指南0.0.1.–31–vm hosting-1

第三十二节 多节点OpenStack Charms 部署指南0.0.1.–32–vm hosting-2-VM host networking (snap/2.9/UI)

第三十三节 多节点OpenStack Charms 部署指南0.0.1.–33–vm hosting-3-Adding a VM host (snap/2.9/UI)

第三十四节 多节点OpenStack Charms 部署指南0.0.1.–34–vm hosting-4-VM host存储池和创建和删除vm (snap/2.9/UI)

第三十五节 多节点OpenStack Charms 部署指南0.0.1.–35–Command export-bundle备份opensack并重新部署openstack

第三十六节 多节点openstack charms 部署指南0.0.1-36-graylog实际-1

第三十七节 多节点openstack charms 部署指南0.0.1-37-graylog实际-2

第三十八节 多节点openstack charms 部署指南0.0.1-38-graylog实际-3

第三十九节 多节点openstack charms 部署指南0.0.1-39-graylog-4-filebeat

第四十节 多节点openstack charms 部署指南0.0.1-40-prometheus2

参考链接:

[Draft] Charm hooks

在前文多节点OpenStack Charms 部署指南0.0.1.dev223–24-Resource: res_masakari_f8b6bde_vip not running中,提到用如下命令:

juju run --application hacluster 'hooks/update-status'

来“在整个集群中运行配置更改的hook删除该已删除单元的corosync.conf条目。”

当时照样执行了下,并不知其详细含义,就看了下文档,来了解相关hook命令的详细意义。


关于

Charm hook是Juju用来调用charm的机制。它们是charm的hooks /目录中的可执行文件,由事件触发。

对于Juju的新手来说,有些令人困惑,但大多数charm作者并不直接与hook互动。相反,charm的作者与charming化的框架提供的接口进行交互。

触发:

触发hook的事件和hook序列对于了解以下信息很有用:

定期事件

计时器触发hook:

hook备注
update-status由update-status-hook-interval模型配置选项定义的计时器间隔
collect-metrics此计时器不可配置。

部署和单位创建

首次部署charm时,通过juju deploy, juju add-unit, 或 juju scale-application,charm会获得安装任何必要软件的机会。

Kubernetes (K8s) 云

hook备注
*-relation-created对于每个 peer 关系
*-relation-created对于其他关系
leader-elected
config-changed
start
storage-attached
update-status

传统云

传统的云与K8的不同之处在于,它们包括一个安装hook,并且它们的storage-attached hook很快出现(以使安装可以在持久性存储上进行)。

hook备注
storage-attached
install
*-relation-created对于每个 peer 关系
*-relation-created对于其他关系
leader-elected
config-changed
start
update-status

机器启动

当基础计算机启动时,由该计算机托管的单元运行以下挂钩:

Kubernetes云

不执行任何hook。charm部署的OCI映像本身包含一个入口点。

传统云

hook备注
start在Juju 2.8之前,仅在首次启动时触发

机器关机

当基础计算机重新启动或关闭电源时,该计算机托管的单元将运行以下hook:

Kubernetes云

不执行任何hook。

传统云

hook备注
staop在Juju 2.8之前,没有hook触发

配置变更

当Juju用户执行juju config并更改选项时,将通过hook将charm通知更改。

hook备注
config-changed

Unit Creation

参见《部署和单位创建》节

Unit Removal

可以随时从模型中删除单元。调用单元删除的命令包括juju remove-unit,juju remove-application和juju scale-application

Kubernetes(K8s)云

不执行任何hook。

传统云
单元可以共同托管在同一台计算机上。这些hook为单位提供了清理的机会。

hook备注
*-storage-detached提供–destroy-storage选项时
*-relation-departed对于每一个已经从“created”变为“joined”状态的关系
stop
remove

relation creation

关系在两个应用程序的单元内调用hook,但是两个应用程序都不需要另一侧的单元来进行处理。这可能会造成一种不直观的情况,其中一个单元可以通过关系向尚未配置的单元发送数据。

hook备注
《relation-name>-relation-created并不意味着在关系的另一侧有可用的单元

单元加入关系

将单位添加到关系中时,将通知所有单位。

hook备注
《relation-name>-relation-joined

更改关系数据

当一个单元执行关系设置挂钩工具时,所有其他单元都会收到一条通知:

hook备注
《relation-name>-relation-changed

关系发生单位偏离

从模型中删除一个单元后,将通知其相关单元:

hook备注
《relation-name>-relation-departed

关系删除

当执行juju remove-relation或删除关系的命令(例如juju remove-application)时,将通知单元:

hook备注
《relation-name>-relation-broken

存储创建

将存储添加(“附加”)到特定单元,而不是整个应用程序。一旦云使存储卷可用,juju attach-storage命令将触发以下挂钩:

hook备注
《storage-name-name>-storage-attched

储存空间已移除

可以通过juju detach-storage将存储与模型分离,也可以通过juju destroy-storage完全将存储从模型中移除。从单位的角度来看,这两个操作是无法区分的,并且具有相同的钩子:

hook备注
《storage-name-name>-storage-detched

系列升级

机器有时可以存活很多年。为了支持该用例,charm可以管理使应用程序能够在新的操作系统版本下继续运行的过程。

Kubernetes(K8s)云
不适用。

传统云

hook备注
pre-series-upgrade在机器操作系统升级之前。
post-series-upgrade机器的操作系统升级后。

执行环境

hook在每台计算机上串行运行。当多个单元占用同一台计算机时,它们可以竞争执行时间。

当多个hook排队等待执行时,它们将以以下优先级运行:

  • 升级操作系统版本hook
    pre-series-upgrade
    post-series-upgrade

  • upgrade-juju

  • restart

  • 任何需要重试的hook

  • 领导hooks,如
    leader-elected

  • Actions hooks

  • 从juju run来的被执行命令

  • 存储, 如.
    storage-attached
    storage-detaching

  • 其他hook, 除了

  • update-status

更多细节

应用程序单元的直接动作完全由其charm hook来定义。hook是charm的hooks目录中的可执行文件; juju单位代理会在特定时间调用具有特定名称的hook(请参见下文),从而引起世界变化。

每当发生hook有价值的事件时,单元代理都会首先检查该hook是否正在调试,如果是,则将控制权移交给用户。否则,它将尝试查找名称正确的hook。如果该hook不存在,则代理会继续进行而不会提出投诉;如果该hook确实存在,则在特定的hook上下文中不带参数地调用该hook,并将其输出写入单元代理的日志中。如果返回非零退出代码,则代理将进入错误状态并等待用户干预。

如果在hook执行期间中止单元代理进程,则代理也将进入错误状态。

hook有多种类型,以下各节将更详细地描述每种hook。

不需要任何hook;如果您未实现hook,那么hook就不会运行。当发生hook件时,Juju将查找要执行的相应hook文件,但是如果找不到任何hook文件,它将继续运行而不会产生错误。

必须将所有的hook都写为等幂的,这意味着运行一次hook和多次运行应该没有什么区别。此属性很重要,因为Juju系统可能会以难以预测的方式多次运行hook’。

触发吊钩的事件

许多事件

机器启动

托管Juju单元的计算机启动后,将执行启动hook。该hook可能是执行某些任务所必需的

机器关机

关闭机器不会触发任何吊钩

New peer unit
Peer unit
Leader elected

通过juju config和关联数据进行配置更改

charm有望随着配置的改变而适当地做出响应。许多事件可以

  • The relation-set allows peers a 这个关系设置允许对等
  • leader-set hook tool 领导设置hook工具

配置更改通过

触发器hook(s)
juju configconfig-changed
On all units of application a:
config-changed
《rel》-relation-created
《rel》-relation-joined
juju relate 《a》 《b》On all units of application b:
config-changed:
《rel》-relation-created
《rel》-relation-joined
config-changed:

核心生命周期hook

它们在正常的charm生命周期内运行。

config-changed
在几种不同情况下,config-changed运行。

  • “安装”后立即进行
  • 在“升级魅力”之后立即进行
  • 单元代理重新启动后至少要运行一次(但是,如果单元处于错误状态,则只有在清除错误状态后才能运行该单元)。
  • 使用GUI或命令行界面更改charm配置后

它不能假定该软件已经启动。它不应启动已停止的软件,而应(如果适用)重新启动运行的软件以考虑配置更改。

install
安装是在charm生命周期的开始运行的。该hook应用于执行一次性设置操作,例如安装不会随配置更改而更改的必备软件。

leader-elected
领导人选举至少运行一次,以表明且具决定这个单位的领导者。如果他们的领导力,共识,筏式或法定人数协议需要一个单位来主张领导力,则作者可以使用此hook’采取行动。如果选举程序是在应用程序内部完成的,则应使用其他代码将领导者告知Juju。有关更多信息,请阅读“实施领导”页面。

start
start在第一个配置更改的hook之后立即运行。应该使用它来确保charm的软件正在运行。请注意,魅力的软件应配置为在重新启动后仍然存在,而无需juju的进一步干预。

重新启动计算机后,也将运行启动。

stop
在该单位的销毁顺序即将结束之前,停止运行应该使用它来确保charm的软件未运行,并且不会在重新启动后再次启动。

remove
stop hook执行后,立即运行remove。

客户端请求删除应用程序时,将调用此hook。它应该实现以下逻辑:

  • 停止应用程序
  • 删除在应用程序生命周期中创建的所有文件/配置
  • 准备还原所需的应用程序的任何备份。

upgrade-charm
在任何本身不会中断现有错误状态upgrade操作之后,upgrade-charm会立即运行。应该使用它来将charm的其他版本编写的本地状态调和为当前版本需要处理的任何形式。

虽然强制升级功能旨在作为开发人员工具使用,并且通常不适合最终用户使用,但一定要乐观地认为永远不要滥用该功能。鉴于此,如果您需要在其他挂钩正常运行之前运行升级charm挂钩,明智的做法是在所有其他挂钩之前添加一个快速调用(幂等)upgrade-charm。

update-status
update-status向用户提供有关魅力正在建模的应用程序状态的持续反馈。该charm由Juju定期运行,并为作者提供了运行代码的机会,该代码可以使应用程序“健康”。

关系hook

单位只会在开始之后和停止之前参与关系。在该时间窗口内,单位可能一次参与多个不同的关系,包括具有相同名称的多个关系。

为了说明,请考虑将由多个客户端应用程序使用的数据库应用程序。单个客户端应用程序的单元肯定会希望连接到并使用同一数据库。但是,如果另一个客户端应用程序的单元要使用相同的数据库,则后果可能对所有相关人员来说都是灾难性的。

如果juju遵守了关系元数据中的限制字段,则可以解决此问题,但这并不是一个高优先级的bug:大多数提供程序应用程序无论如何都应该能够处理多个requirers;无论如何,大多数需求者只会连接到一个provider 。

当运行给定charm的单位参与给定关系时,它为在该关系中意识到的每个远程单位至少运行三个hook。

[name]-relation-created

[name] -relation-created在安装hook之后且在任何[name] -relation-joined hook之前运行。它可以保证在任何leader领导者与peer同伴之间的联系之前都可以运行。对于在较晚时间点建立的非对等关系,一旦建立了该关系,hook就会触发。
[name]-relation-joined
[name] -relation-joined仅在该远程单元首次被观察到时运行。应该使用它来关系设置可以使用不超过加入单元的名称和远程专用地址设置来确定的任何本地单元设置,这在创建关系时始终可用,并且按照惯例不删除。
您不应该依赖-joined挂钩中的任何其他关系设置,因为不能保证它们会存在;如果您需要更多信息,则应等待 -changed挂钩提供正确的信息。

[name]-relation-changed
[name] -relation-changed始终在-join之后运行一次,并且随后在该远程单元更改其关系设置时运行。它应该是唯一依赖于Relationship-get中远程关系设置的hook,并且如果设置不完整,它也不会出错:您可以保证当远程单元更改其设置时,该hook将再次运行。

您可以获取以及应设置的设置取决于该关系的interface

[name]-relation-departed
[name] -relation-departed仅在已知远程单元要离开该关系时才运行一次;它只会在至少运行一个 -changed钩子后运行,并且在-departed运行后,将不会再运行其他 -changed钩子。应该使用它删除对远程单元的所有引用,因为不能保证它仍然是系统的一部分;很可能(尽管不能保证)运行该装置的系统已经关闭。

当单位自己对某种关系的参与即将结束时,单位代理会继续遵守上述订购保证;但是在这些限制内,它将运行最少的钩子,以通知每个远程单元离开的魅力。

一旦为这种关系运行了所有必要的-departed钩子,单元代理将运行最终的关系钩子:

[name]-relation-broken

[name] -relation-broken表示当前关系不再有效,并且必须对超级按钮的软件进行配置,就好像该关系不存在一样。只有在运行了每个必要的 -departed 钩子之后,才会调用该函数;如果正在执行,则可以确保当前在本地不知道任何远程单元。

重要的是要注意,即使没有其他单位加入该关系,-broken钩也可能运行。这不是一个错误:即使没有远程单位加入,也可以通过 relation-ids工具在其他挂钩中检测到该单位参与的事实,并且需要执行-broken挂钩,以使吊饰有机会清理建立任何乐观生成的配置。

同样,重要的是要内部化一个事实,即可能有多个具有相同名称的运行时关系在起作用,并且它们是独立的:一个 -broken 钩子并不意味着每个这样的关系都被破坏。

存储 Charm Hooks

juju可以提供各种存储charm。charm可以定义从Juju分配的几种不同类型的存储。要阅读更多信息,请参阅存储文档
[name]-storage-attached
[name] -storage-attached允许charm在添加存储后运行代码。连接存储的挂钩将在安装挂钩之前运行,以便安装例程可以使用存储。该挂钩的名称前缀将取决于metadata.yaml文件中定义的存储密钥

[name]-storage-detaching
[name]-storage-detaching 允许charm在删除存储之前运行代码。存储分离挂钩将在分离存储之前运行,并且始终在停止挂钩运行之前运行,以使charn在删除资源之前以及设备终止之前可以优雅地释放资源。挂钩的名称前缀将取决于metadata.yaml文件中定义的存储密钥。

Metric Hooks

collect-metrics
Juju在设备的整个生命周期内每五分钟执行一次收集collect-metrics。使用collect-metrics中的add-metric hook工具将度量添加到Juju。

因为它可能与生命周期超级异常挂钩同时运行,所以收集指标将在更加受限的环境中执行,该环境中没有许多挂钩工具(例如config-get)。如果绝对需要访问超级配置或其他项目,则可以使用charmhelpers.core.unitdata.kv将信息传递到collect-metrics挂钩上下文中。

写作 hooks

如果您遵循《入门指南》,则会对基础知识有个很好的了解。为了充实您的知识,您将需要研究钩子上下文和工具,并尝试debug-hook

但是,依赖于具体细节,好的钩子显示出许多有用的高级属性:

  • 它们是幂等的:也就是说,一次运行一个钩子和连续运行N次钩子之间应该没有明显的区别。如果此属性不成立,您可能会使自己的生活变得不必要地困难:除其他事项外,普通用户最有可能对钩子失败做出的第一反应是尝试再次运行它(如果他们不只是尝试跳过它)。

  • 它们易于阅读和理解。试图编写一个可以完成所有任务的文件,并根据argv [0]的值在内部调用不同的函数,并为每个钩子对该文件进行符号链接,这很诱人。但是这种结构很快变得笨拙。编写与钩子分开的库所花费的时间很可能是花了很多时间:它使您可以编写清晰而集中的单个钩子,并使维护人员免受无关紧要的细节的影响。

  • 在可能的情况下,他们重用已经编写的通用代码以简化或解决常见的用例。

  • 它们不会返回error,除非有充分的理由相信没有用户干预就无法解决它们。这样做是失败的承认:看到您的超级用户返回错误状态的用户不太可能具有解决该问题所需的特定专业知识。如果必须返回错误,请确保至少在此之前将所有上下文都可以写入日志。

  • 他们仅非常少量地写入charm目录

我们建议您也使自己熟悉最佳做法,如果打算分发您的charm,则还应熟悉charm商店的政策

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值