我正在尝试使用 Juju (16.6) 将服务部署到我们的私有 Openstack 云,并注意到了一些问题。
在引导新环境时,Juju 显然希望在环境的存储桶中查找图像元数据。我创建了一个“公共”存储桶,使用 Swift 作为对象存储,并在“streams/v1/*”对象路径中用图像元数据填充它 - 但是,当引导时,除非元数据位于环境的私有存储桶中,否则 juju 会失败。这是正常的吗?环境配置中是否有解决方法来解决这个问题?
我的环境如下(较少的ssh密钥):
access-key: ""
admin-secret: ""
agent-version: 1.16.6
api-port: 17070
auth-mode: userpass
auth-url: http://173.23.181.5:5000/v2.0
authorized-keys: 'ssh-rsa `...
...
ca-private-key: ""
control-bucket: juju-bucket
default-image-id: ""
default-instance-type: ""
default-series: precise
development: false
firewall-mode: instance
image-metadata-url: ""
logging-config: <root>=INFO
name: openstack-ws
password: xxxxxxxxxx
public-bucket: juju-dist
public-bucket-url: ""
region: regionOne
secret-key: ""
ssl-hostname-verification: true
state-port: 37017
tenant-name: WebServices
tools-url: ""
type: openstack
use-floating-ip: true
username: xxxxx
一旦我让环境启动,我接下来就会尝试启动服务。就我而言,我使用的是 Hadoop charm。当我部署 Hadoop 主服务器 ( juju deploy hadoop hadoop-master
) 时,实例无法初始化,并出现“主机名:名称或服务未知错误”。我怀疑这是由于对实例“公共”IP 地址的反向 DNS 查找失败造成的。这听起来正确吗?问题是什么?
答案1
public-bucket
和设置public-bucket-url
在一段时间前已被弃用并被忽略。control-bucket
如果指定,则仅使用 - 否则随机生成。私有存储桶现在是覆盖从 simplestreams 数据中获取具有指定版本的 juju 工具的唯一方法。
例如,juju bootstrap --upload-tools
在确保运行了相当于以下内容的内容后运行:
# cd $GOPATH/src/launchpad.net/juju-core/cmd/juju # go install . # cd ../jujud # go install .
将 juju 二进制文件(juju 和 jujud)从 $PATH 打包成发布 tarball 并将其上传到control-bucket
。然后,cloud-init 脚本在引导机器启动时运行,下载并安装最新的当前工具(--upload-tools 始终确保这一点)。因此juju bootstrap --upload-tools
,如果 hacky,在实际部署中测试对 juju-core 源的更改肯定很有用。
或者,你可以运行:
juju sync-tools --all --public --source=~/.juju/local/storage/tools/release/
运行后立即执行juju bootstrap -e local --upload-tools
(假设您已运行go install
前面提到的 2 个命令,从源代码构建时)。这样,您需要运行juju bootstrap -e local
并观察进度/检查日志。