将本地包部署到现有机器

将本地包部署到现有机器

在我目前的 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

相关内容