简介
搭建Docker私服仓库,后端采用ceph swift 分布式存储。使用 Potus 做管理平台. 上文介绍了搭建ceph的详细步骤,本文将介绍 安装 CEPH 对象网关以及添加对swift的支持
环境准备:
参考 Docker Private Registry搭建(一)
安装 CEPH 对象网关
在你的管理节点的工作目录下,给 Ceph 对象网关节点安装Ceph对象所需的软件包。例如:
ceph-deploy install --rgw node1 node2 node3....
ceph-common 包是它的一个依赖性,所以 ceph-deploy 也将安装这个包。 ceph 的命令行工具就会为管理员准备好。为了让你的 Ceph 对象网关节点成为管理节点,可以在管理节点的工作目录下执行以下命令(通常这步不需要执行,在前边的步骤管理节点已经建好了):
ceph-deploy admin node1
新建网关实例
在你的管理节点的工作目录下,使用命令在 Ceph 对象网关节点上新建一个 Ceph对象网关实例。举例如下:
ceph-deploy rgw create node1 node2 node3 ...
在网关服务成功运行后,你可以使用未经授权的请求来访问端口 7480 ,就像这样:
http://client-node:7480
如果网关实例工作正常,你接收到的返回信息大概如下所示(集群模式下每个节点上都会启动这个服务):
version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName></DisplayName>
</Owner>
<Buckets>
</Buckets>
</ListAllMyBucketsResult>
在任何时候如果你遇到麻烦,而你也想重新来一次,执行下面的命令来清除配置:
ceph-deploy purge <gateway-node1> [<gateway-node2>]
ceph-deploy purgedata <gateway-node1> [<gateway-node2>]
如果你执行了 purge, 你必须重新安装 Ceph.
使用网关
访问创建 RADOSGW 用户
通常在管理节点上执行就可以了,即使集群模式下也是一样的。
radosgw-admin user create --uid="testuser" --display-name="First User"
命令输出如下:
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [{
"user": "testuser",
"access_key": "I0PJDPCIYZ665MW88W9R",
"secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
}],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
新建swift用户
通常在管理节点上执行就可以了,即使集群模式下也是一样的。
radosgw-admin subuser create –uid=testuser –subuser=testuser:swift –access=full
输出类似下面这样:
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [{
"id": "testuser:swift",
"permissions": "full-control"
}],
"keys": [{
"user": "testuser:swift",
"access_key": "3Y1LNW4Q6X0Y53A52DET",
"secret_key": ""
}, {
"user": "testuser",
"access_key": "I0PJDPCIYZ665MW88W9R",
"secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
}],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
新建secret key :
通常在管理节点上执行就可以了,即使集群模式下也是一样的。
radosgw-admin key create –subuser=testuser:swift –key-type=swift –gen-secret
输出类似下面这样:
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [{
"id": "testuser:swift",
"permissions": "full-control"
}],
"keys": [{
"user": "testuser:swift",
"access_key": "3Y1LNW4Q6X0Y53A52DET",
"secret_key": ""
}, {
"user": "testuser",
"access_key": "I0PJDPCIYZ665MW88W9R",
"secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
}],
"swift_keys": [{
"user": "testuser:swift",
"secret_key": "244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF\/IA"
}],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
注意:集群模式下swift_secret_key 生成一次就好, 所有的monitor节点上的验证信息会相应的同步更新。因此可以方便的支持负载均衡。
测试swift访问
访问的验证则可以使用swift
的命令行客户端。可以通过命令 man swift 获取更多命令行选项的更多信息。
执行下面的命令安装 swift 客户端,在 Red Hat Enterprise Linux上执行:
sudo install python-setuptools
sudo easy_install pip
sudo pip install --upgrade setuptools
sudo pip install --upgrade python-swiftclient
执行下面的语句验证:
swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K ‘{swift_secret_key}’ list
使用网关服务器的外网 IP 地址替换其中的 {IP ADDRESS} ,使用新建 swift 用户时执行的命令 radosgw-admin key create 的输出替换其中的 {swift_secret_key} 。使用你的 Civetweb 所使用的端口替换其中 {port} ,比如默认是 7480 。如果你不替换这个端口,它的默认值是 80. 举例如下:
swift -A http://10.19.143.116:7480/auth/1.0 -U testuser:swift -K '244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF/IA' list
输出类似如下:
my-new-bucket
有可能不输出任何信息,也没有问题,估计是版本的问题,可以忽略。