OpenStack示例配置组件之Web Application中的Swift文件存储,OpenStack中的Swift文件存储对接Ceph RadosGW

注:此教程未完成 单独对象存储方式swift参考 >>

实际上应该是ceph RadosGW对接OpenStack Keystone身份认证

因为RadosGW提供了和Swift兼容的API,所有二者api是一样的,直接做个负载均衡到RadosGW就成了一个swift接口

ceph官方latest文档已经很落后了,搞得整了好久才弄明白。要知道ceph.conf配置中的键如果是空格形式的(形如“rgw keystone api version”),这种是ceph octopus版本最后一次出现,在pacific版本改为下划线形式。

并且网上教程包括官网教程重点都在以Keystone V2版本api为例说明,没有V3接口版本的例子。

求证:

octopus版本的ceph.conf例子:Common Settings — Ceph Documentation

pacific版本的ceph.conf例子:Common Settings — Ceph Documentation

发行索引:Ceph Releases (index) — Ceph Documentation

重点:

如果使用kolla-ansible部署RadosGW兼容的Swift,不要去找那种“手动部署RadosGW对接Swift”的教程,因为kolla-ansible已经为你准备好了OpenStack这边的一切配置。所有有关OpenStack这边的操作都不要做!!!

RadosGW兼容的Swift:实际上没有部署Swift,可以理解为把原本Swift的api重定向到了RadosGW。而RadosGW有着和Swift一样的api。

一. Ceph配置

或 >> (此处需要参考以下给openstack配置密钥)

Proxmox Virtualization Environment (VE) 或vmware workstdtion 是一个出色的虚拟化平台。它具有许多其他企业平台所没有的强大功能。这些功能之一是 Ceph 支持,包括在 Proxmox 节点本身上运行 Ceph 的能力。除了将 Ceph 用于我的 VM 和容器之外,我还想利用 Ceph 对象网关为我的网站获取 S3 兼容存储。

我的 Proxmox 环境由 3 个节点组成:ceph1、ceph2和ceph3,我想在所有三个节点上运行网关以实现高可用性(我在这些节点前面运行 HAProxy 以实现 SSL 终止、HA 和负载平衡)。

我从节点运行了以下命令ceph1,但它可以从任何节点完成。

1. 首先,我创建了密钥环来存储密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建密钥
ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
# 将它们添加到密钥环中:(如果只有一台机器只要执行一条即可,需要自己注意修改)
ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.ceph1 --gen-key
ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.ceph2 --gen-key
ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.ceph3 --gen-key
# 添加适当的功能
ceph-authtool -n client.radosgw.ceph1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
ceph-authtool -n client.radosgw.ceph2 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
ceph-authtool -n client.radosgw.ceph3 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
# 最后,将密钥添加到集群
ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.ceph1 -i /etc/ceph/ceph.client.radosgw.keyring
ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.ceph2 -i /etc/ceph/ceph.client.radosgw.keyring
ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.ceph3 -i /etc/ceph/ceph.client.radosgw.keyring

image-20231210210706324

4. 将密钥环复制到/etc/ceph/priv(可选)

1
2
# 将密钥环复制到/etc/ceph/priv
cp /etc/ceph/ceph.client.radosgw.keyring /etc/ceph/priv

将以下行添加到/etc/ceph/ceph.conf 如果没有解析dns,那就删掉 rgw_dns_name

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[client.radosgw.ceph1]
host = ceph1
keyring = /etc/ceph/priv/ceph.client.radosgw.keyring
rgw_dns_name = s3.example.net

[client.radosgw.ceph2]
host = ceph2
keyring = /etc/ceph/priv/ceph.client.radosgw.keyring
rgw_dns_name = s3.example.net

[client.radosgw.ceph3]
host = ceph3
keyring = /etc/ceph/priv/ceph.client.radosgw.keyring
rgw_dns_name = s3.example.net

5. cephadm与deploy方式部署对象存储及s3swift风格用户创建 >>

  • 部署rgw

    1
    2
    # 部署rgw
    ceph orch apply rgw foo --placement="3 ceph1 ceph2 ceph3" --port=7480
  • 创建用户(创建swift风格用户)

    需要在已有创建用户的基础之上创建用户即在创建的 “testuser” 之上创建创建swift风格用户完整步骤

    生成secret_key如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 创建s3风格用户
radosgw-admin user create --uid=testuser --display-name="testuser" --email=test.user@example.net
# 创建swift风格
radosgw-admin subuser create --uid testuser --subuser=testuser:swift --access=full
radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
//返回
"user_id": "testuser",
"display_name": "testuser",
"email": "test.user@example.net",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "testuser:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "testuser",
"access_key": "XEHCFZQIIE2UNPIMZVDF",
"secret_key": "4A7PLZDV0he398su0lUZuCkjRgW7veE1AGkjAD6P"
}
],
"swift_keys": [
{
"user": "testuser:swift",
"secret_key": "k7NUM52KJUHPJH5LPHN8YCZJamBSs58gUzDjy0jW"
# 查看用户
radosgw-admin user info --uid testuser
# swift使用
swift -A http://10.0.0.30:7480/auth -U testuser:swift -K k7NUM52KJUHPJH5LPHN8YCZJamBSs58gUzDjy0jW list
# 简化使用每次使用的时候使用这个交换比较麻烦 我们在这里定义环境变量的方式
vim admin-swift.sh
#!/bin/bash
export ST_AUTH=http://10.0.0.30:7480/auth
export ST_USER=testuser:swift
export ST_KEY=k7NUM52KJUHPJH5LPHN8YCZJamBSs58gUzDjy0jW

source admin-swift.sh && swift list

image-20231211195718338

image-20231211195627500

image-20231211195701375

此时访问7480应该显示是下方配置

1
2
3
4
5
6
7
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>

效果

image-20231210211509324

三. 检查Ceph.conf(此种为ceph-deploy部署的生效方式)

做完之后你的ceph.conf应该大致如下:

建议取消所有缩进

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[global]
auth_client_required = cephx
auth_cluster_required = cephx
auth_service_required = cephx
cluster_network = 10.10.11.1/24
fsid = 59063611-9b12-4807-bf9d-ecfa60480d94
mon_allow_pool_delete = true
mon_host = 10.10.1.51
ms_bind_ipv4 = true
ms_bind_ipv6 = false
osd_pool_default_min_size = 2
osd_pool_default_size = 2
public_network = 10.10.1.51/24

[client]
keyring = /etc/ceph/priv/$cluster.$name.keyring

[client.radosgw.ceph1]
host = ceph1
keyring = /etc/ceph/priv/ceph.client.radosgw.keyring

[mds]
keyring = /var/lib/ceph/mds/ceph-$id/keyring

[mds.ceph1]
host = ceph1
mds standby for name = ceph

[mon.ceph1]
public_addr = 10.10.1.51

四. 对接Keystone(Keystone 此服务必须已运行)

  • 这里需要先安装一个cli client工具。进入部署机,激活python虚拟环境,source admin授权文件,安装

  • 至于文档怎么找,入口在哪里,请参阅:https://blog.csdn.net/qq_35485875/article/details/128915192

  • 激活环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 激活python环境
    ./path/to/venv/bin/activate
    // 或
    cd ~ && source /root/venv3/bin/activate
    # 激活admin授权文件(后面用到)
    source /etc/kolla/admin-openrc.sh
    # 安装客户端
    pip install python-swiftclient
    pip install python-keystoneclient
    # 使用加速器
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-swiftclient
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-designateclient

    验证安装

    1
    (venv) root@ttt:~# swift --help
  • 获取Auth Token

    1
    2
    3
    (venv) root@ttt:~# swift auth
    export OS_STORAGE_URL=http://10.0.0.30:6780/swift/v1
    export OS_AUTH_TOKEN=gAAAAABj4cEubXFK1PLGUicIMKMft6TiWitNcGhzHJxS2CWbetUEYIHbCJMx3v_iLQ142ZgjQ9KvtwLwoDrP-_RctuP45O9FTVr1dAVWrEKZngXpxX2uRVSELz7FP27vmZqtN0