在我目前的 juju 模型中,我有一台带有几个容器的机器
Machine State
14 started
14/lxd/2 started
14/lxd/20 started
我想部署一个带有 2 个本地 Charm 的本地包。我的bundle.yaml
看起来像这样:
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
现在我想将我的 elasticsearch charm 放在机器 14 上的 LXD 容器中,但是运行时juju deploy ~/elastic5-bundle
出现以下错误:
ERROR the provided bundle has the following errors:
placement "lxd:14" refers to a machine not defined in this bundle
但是,当我在 bundle.yaml 中添加机器 14 时,会创建一台新机器,而不是将 charm 部署到机器 14。有什么可能的解决方案可以将 bundle 中的 charm 部署到现有的机器上吗?
答案1
您无法使用 juju deploy 命令在现有机器上部署 charms。机器应在包中定义才能正常工作。
你的包看起来应该是这样的:
machines:
'14':
constraints: <any constraint for example tags=machine14 or mem=3048 or arch=amd64>
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
可能可以使用juju-部署器. 通过添加此 repo 安装 juju-deployer:
$ sudo add-apt-repository ppa:tvansteenburgh/ppa
将束定义为:
phase1:
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
现在,通过运行以下命令进行部署:
$ juju-deployer -c bundle.yaml phase1
答案2
在最新的 Juju 版本 (2.3) 中,我注意到现在有一个标志可以在部署包时使用。我找到了文档这里:
要让包使用模型的现有机器,而不是创建新机器,--map-machines=existing
请使用该选项。此外,要为映射指定特定机器,可以传递“bundle-id=existing-id”形式的逗号分隔值,其中 bundle-id 和 Existing-id 指的是顶级机器 ID。
例如,考虑一个捆绑包,其 YAML 文件配置了机器 1、2、3 和 4,以及一个包含机器 1、2、3、4 和 5 的模型。以下部署将使用现有机器 1 和 2 作为捆绑包机器 1 和 2,但使用现有机器 4 作为捆绑包机器 3,使用现有机器 5 作为捆绑包机器 4:
juju deploy some-bundle --map-machines=existing,3=4,4=5