找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

447

积分

0

好友

59

主题
发表于 前天 03:53 | 查看: 3| 回复: 0

1. 环境准备

以下为本次部署的节点规划与资源配置。

主机名 IP 磁盘 CPU memory
controller 网卡1:10.0.0.10,网卡2:不配置 sda:100G 2C 6G
compute01 网卡1:10.0.0.11,网卡2:不配置 sda:100G ,sdb:20G 2C 4G

基础环境

  • 操作系统:Ubuntu 24.04
  • 虚拟化工具:VMware 17

2. 配置离线环境

在所有节点上配置离线APT源。

# 解压
tar zxvf openstack_c.tar.gz -C /opt/
# 备份文件
cp /etc/apt/sources.list{,.bak}
# 配置离线源
cat > /etc/apt/sources.list << EOF
deb [trusted=yes] file:// /opt/openstack_c/debs/
EOF
# 清空缓存
apt clean all
# 加载源
apt update

3. 系统环境初始化

3.1 配置网络

  • controller节点
cat > /etc/netplan/00-installer-config.yaml << EOF
# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      dhcp4: false
      addresses: [10.0.0.10/24]
      routes:
        - to: default
          via: 10.0.0.254
      nameservers:
        addresses: [114.114.114.114]
    eth1:
      dhcp4: false
  version: 2
EOF
# 生效网络
netplan apply
  • compute01节点
cat > /etc/netplan/00-installer-config.yaml << EOF
# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      dhcp4: false
      addresses: [10.0.0.11/24]
      routes:
        - to: default
          via: 10.0.0.254
      nameservers:
        addresses: [114.114.114.114]
    eth1:
      dhcp4: false
  version: 2
EOF
# 生效网络
netplan apply

3.2 配置主机名并配置解析

  • controller节点更改主机名

    hostnamectl set-hostname controller
    # 切换窗口
    bash
  • compute01节点更改主机名

    hostnamectl set-hostname compute01
    # 切换窗口
    bash
  • 所有节点配置hosts解析

    cat >> /etc/hosts << EOF
    10.0.0.10 controller
    10.0.0.11 compute01
    EOF

3.3 时间同步配置

  • 所有节点执行基础时间配置,这是Linux系统的基础运维操作。

    # 开启可配置服务
    timedatectl set-ntp true
    # 调整时区为上海
    timedatectl set-timezone Asia/Shanghai
  • 控制节点配置为NTP服务器。

    # 安装服务
    apt install -y chrony
    # 配置文件
    vim /etc/chrony/chrony.conf
    20 server controller iburst maxsources 2
    61 allow all
    63 local stratum 10
    # 重启服务
    systemctl restart chronyd
  • 计算节点配置为从控制节点同步。

    # 安装服务
    apt install -y chrony
    # 配置文件
    vim /etc/chrony/chrony.conf
    20 pool controller iburst maxsources 4
    # 重启服务
    systemctl restart chronyd

3.4 安装OpenStack客户端

  • controller节点
    apt install -y python3-openstackclient

3.5 安装部署MariaDB

  • controller节点安装服务

    apt install -y mariadb-server python3-pymysql
  • 配置mariadb配置文件

    cat > /etc/mysql/mariadb.conf.d/99-openstack.cnf << EOF
    [mysqld]
    bind-address = 0.0.0.0
    default-storage-engine = innodb
    innodb_file_per_table = on
    max_connections = 4096
    collation-server = utf8_general_ci
    character-set-server = utf8
    EOF
  • 重启数据库服务使配置生效

    service mysql restart
  • 初始化配置数据库(安全加固)

    mysql_secure_installation
    输入数据库密码:回车
    可以在没有适当授权的情况下登录到MariaDB root用户,当前已收到保护:n
    设置root用户密码:n
    删除匿名用户:y
    不允许远程root登录:n
    删除测试数据库:y
    重新加载数据库:y

3.6 安装部署RabbitMQ消息队列

  • 控制节点安装服务。

    apt install -y rabbitmq-server
  • 创建openstack用户,用户名为:openstack,密码:000000

    rabbitmqctl add_user openstack 000000
  • 授予openstack用户配置、写入和读取的全部权限。

    rabbitmqctl set_permissions openstack ".*" ".*" ".*"

3.7 安装部署Memcache缓存服务

  • 控制节点安装服务。

    apt install -y memcached python3-memcache
  • 配置监听地址为所有网络接口。

    vim /etc/memcached.conf
    35 -l 0.0.0.0
  • 重启服务使配置生效。

    service memcached restart

4. 部署配置Keystone(身份认证服务)

  • 控制节点操作。

  • 创建数据库与用户供keystone使用。

    # 创建数据库
    CREATE DATABASE keystone;
    # 创建用户
    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystoneang';
  • controller节点安装服务

    apt install -y keystone
  • 配置keystone配置文件

    # 备份配置文件
    cp /etc/keystone/keystone.conf{,.bak}
    # 过滤覆盖文件
    grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

    编辑 /etc/keystone/keystone.conf,确保 [database] 部分连接信息正确,这是云原生/IaaS平台的核心配置之一。

    [database]
    connection = mysql+pymysql://keystone:keystoneang@controller/keystone
    ...
    [token]
    provider = fernet
  • 初始化数据库结构

    su -s /bin/sh -c "keystone-manage db_sync" keystone
  • 初始化Fernet密钥(用于令牌加密)

    # 用户
    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    # 组
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
  • 引导Keystone服务(创建初始管理员账户、服务端点等)

    keystone-manage bootstrap --bootstrap-password 000000 \
    --bootstrap-admin-url http://controller:5000/v3/ \
    --bootstrap-internal-url http://controller:5000/v3/ \
    --bootstrap-public-url http://controller:5000/v3/ \
    --bootstrap-region-id RegionOne
  • 配置Apache服务器名称并重启服务

    echo "ServerName controller" >> /etc/apache2/apache2.conf
    service apache2 restart
  • 配置管理员环境变量脚本

    cat > /etc/keystone/admin-openrc.sh << EOF
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=000000
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    EOF
  • 加载环境变量

    source /etc/keystone/admin-openrc.sh
  • 创建一个名为“service”的项目,供其他OpenStack服务使用

    openstack project create --domain default --description "Service Project" service
  • 验证认证服务是否正常工作

    openstack token issue

5. 部署配置Glance(镜像服务)

  • 控制节点操作。

  • 创建数据库与用户供glance使用。

    # 创建数据库
    CREATE DATABASE glance;
    # 创建用户
    GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glanceang';
  • 在Keystone中创建glance用户

    openstack user create --domain default --password glance glance
  • 将admin角色授予glance用户

    openstack role add --project service --user glance admin
  • 创建glance服务实体

    openstack service create --name glance --description "OpenStack Image" image
  • 创建镜像服务的API端点

    openstack endpoint create --region RegionOne image public http://controller:9292
    openstack endpoint create --region RegionOne image internal http://controller:9292
    openstack endpoint create --region RegionOne image admin http://controller:9292
  • 安装glance服务

    apt install -y glance
  • 配置glance-api配置文件

    # 备份配置文件
    cp /etc/glance/glance-api.conf{,.bak}
    # 过滤覆盖配置文件
    grep -Ev "^$|#" /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf

    编辑 /etc/glance/glance-api.conf,配置数据库连接和认证信息。

    [database]
    connection = mysql+pymysql://glance:glanceang@controller/glance
    ...
    [keystone_authtoken]
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = glance
    password = glance
    ...
    [glance_store]
    stores = file,http
    default_store = file
    filesystem_store_datadir = /var/lib/glance/images/
  • 初始化数据库

    su -s /bin/sh -c "glance-manage db_sync" glance
  • 重启glance服务

    service glance-api restart
  • 上传测试镜像进行验证

    # 下载Cirros测试镜像
    wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
    # 上传镜像命令
    glance image-create --name "cirros" \
    --file cirros-0.4.0-x86_64-disk.img \
    --disk-format qcow2 \
    --container-format bare \
    --visibility=public
    # 查看镜像列表
    openstack image list

6. 部署配置Placement(资源追踪服务)

  • 创建数据库与用户供placement使用。

    # 创建数据库
    CREATE DATABASE placement;
    # 创建用户
    GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placementang';
  • 创建placement用户

    openstack user create --domain default --password placement placement
  • 将placement用户添加到service项目的admin角色中

    openstack role add --project service --user placement admin
  • 创建Placement服务实体

    openstack service create --name placement --description "Placement API" placement
  • 创建Placement API服务端点

    openstack endpoint create --region RegionOne placement public http://controller:8778
    openstack endpoint create --region RegionOne placement internal http://controller:8778
    openstack endpoint create --region RegionOne placement admin http://controller:8778
  • 安装placement服务

    apt install -y placement-api
  • 配置placement服务

    # 备份配置文件
    cp /etc/placement/placement.conf{,.bak}
    # 过滤覆盖文件
    grep -Ev "^$|#" /etc/placement/placement.conf.bak > /etc/placement/placement.conf

    编辑 /etc/placement/placement.conf,配置数据库和认证。

    [placement_database]
    connection = mysql+pymysql://placement:placementang@controller/placement
    ...
    [keystone_authtoken]
    auth_url = http://controller:5000/v3
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = placement
    password = placement
  • 初始化数据库

    su -s /bin/sh -c "placement-manage db sync" placement
  • 重启Apache服务加载placement配置

    service apache2 restart
  • 验证placement服务状态

    placement-status upgrade check

7. 部署配置Nova(计算服务)

7.1 控制节点配置

  • 创建数据库与用户供nova使用。

    # 存放nova交互等数据
    CREATE DATABASE nova_api;
    # 存放nova资源等数据
    CREATE DATABASE nova;
    # 存放nova等元数据
    CREATE DATABASE nova_cell0;
    # 创建管理nova_api库的用户
    GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
    # 创建管理nova库的用户
    GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
    # 创建管理nova_cell0库的用户
    GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
  • 创建nova用户

    openstack user create --domain default --password nova nova
  • 将admin角色添加到nova用户

    openstack role add --project service --user nova admin
  • 创建nova服务实体

    openstack service create --name nova --description "OpenStack Compute" compute
  • 创建计算API服务端点

    openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1  
    openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1  
    openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
  • 安装控制节点所需的nova服务

    apt install -y nova-api nova-conductor nova-novncproxy nova-scheduler
  • 配置nova主配置文件

    # 备份配置文件
    cp /etc/nova/nova.conf{,.bak}
    # 过滤提取文件
    grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf

    编辑 /etc/nova/nova.conf,配置消息队列、数据库、认证、Glance、Placement等关键信息。

    [DEFAULT]
    transport_url = rabbit://openstack:000000@controller:5672/
    my_ip = 10.0.0.10
    ...
    [api]
    auth_strategy = keystone
    [api_database]
    connection = mysql+pymysql://nova:novaang@controller/nova_api
    [database]
    connection = mysql+pymysql://nova:novaang@controller/nova
    [glance]
    api_servers = http://controller:9292
    [keystone_authtoken]
    www_authenticate_uri = http://controller:5000/
    auth_url = http://controller:5000/
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = nova
    password = nova
    [placement]
    region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://controller:5000/v3
    username = placement
    password = placement
    [vnc]
    enabled = true
    server_listen = $my_ip
    server_proxyclient_address = $my_ip
  • 初始化nova_api数据库

    su -s /bin/sh -c "nova-manage api_db sync" nova
  • 注册cell0数据库

    su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
  • 创建cell1单元格

    su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
  • 填充nova数据库

    su -s /bin/sh -c "nova-manage db sync" nova
  • 验证cell注册情况

    su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
  • 重启控制节点所有nova服务使配置生效

    service nova-api restart
    service nova-scheduler restart
    service nova-conductor restart
    service nova-novncproxy restart

7.2 计算节点配置

  • compute01节点安装nova-compute服务。

    apt install -y nova-compute
  • 配置nova配置文件,内容与控制节点类似,注意修改my_ip,并正确配置VNC地址指向控制节点。

    # 备份配置文件
    cp /etc/nova/nova.conf{,.bak}
    # 过滤覆盖配置文件
    grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf

    编辑 /etc/nova/nova.conf,关键配置如下:

    [DEFAULT]
    transport_url = rabbit://openstack:000000@controller
    my_ip = 10.0.0.11
    ...
    [vnc]
    enabled = true
    server_listen = 0.0.0.0
    server_proxyclient_address = $my_ip
    novncproxy_base_url = http://10.0.0.10:6080/vnc_auto.html

    其他如 [keystone_authtoken], [glance], [placement] 等部分参照控制节点配置。

  • 检测是否支持硬件虚拟化加速

    # 确定计算节点是否支持虚拟机的硬件加速
    egrep -c '(vmx|svm)' /proc/cpuinfo

    如果返回 0,则需要配置为使用QEMU软件模拟,编辑 /etc/nova/nova-compute.conf

    [libvirt]
    virt_type = qemu
  • 重启计算节点nova服务

    service nova-compute restart

7.3 配置主机发现

  • 控制节点操作。

  • 查看可用的计算节点

    openstack compute service list --service nova-compute
  • 手动发现计算主机

    su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
  • 配置自动发现间隔(可选,设置为每5分钟)

    vim /etc/nova/nova.conf

    [scheduler] 部分添加:

    [scheduler]
    discover_hosts_in_cells_interval = 300
  • 重启nova-api服务使自动发现配置生效

    service nova-api restart
  • 校验所有nova服务状态

    openstack compute service list

8. 配置基于OVN的Neutron网络服务

8.1 控制节点配置

  • 创建数据库与用户供neutron使用。

    # 创建数据库
    CREATE DATABASE neutron;
    # 创建用户
    GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutronang';
  • 创建neutron用户

    openstack user create --domain default --password neutron neutron
  • 向neutron用户添加管理员角色

    openstack role add --project service --user neutron admin
  • 创建neutron服务实体

    openstack service create --name neutron --description "OpenStack Networking" network
  • 创建neutron的API端点

    openstack endpoint create --region RegionOne network public http://controller:9696
    openstack endpoint create --region RegionOne network internal http://controller:9696
    openstack endpoint create --region RegionOne network admin http://controller:9696
  • 安装OVN及相关网络服务组件

    apt -y install neutron-server neutron-plugin-ml2 python3-neutronclient ovn-central openvswitch-switch
  • 配置neutron主配置文件 (/etc/neutron/neutron.conf)

    # 备份配置文件
    cp /etc/neutron/neutron.conf{,.bak}
    # 过滤提取配置文件
    grep -Ev "^$|#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf

    编辑配置文件,核心配置如下:

    [DEFAULT]
    core_plugin = ml2
    service_plugins = ovn-router
    auth_strategy = keystone
    transport_url = rabbit://openstack:000000@controller
    ...
    [database]
    connection = mysql+pymysql://neutron:neutronang@controller/neutron
    [keystone_authtoken]
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = neutron
    password = neutron
    [nova]
    auth_url = http://controller:5000
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    region_name = RegionOne
    project_name = service
    username = nova
    password = nova
  • 配置ML2插件配置文件 (/etc/neutron/plugins/ml2/ml2_conf.ini)

    # 备份配置文件
    cp  /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
    # 过滤覆盖文件
    grep -Ev "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini

    编辑配置文件,启用OVN机制驱动和Geneve隧道。

    [ml2]
    type_drivers = flat,geneve
    tenant_network_types = geneve
    mechanism_drivers = ovn
    extension_drivers = port_security
    [ml2_type_geneve]
    vni_ranges = 1:65536
    [ovn]
    ovn_nb_connection = tcp:10.0.0.10:6641
    ovn_sb_connection = tcp:10.0.0.10:6642
    ovn_metadata_enabled = True
    [securitygroup]
    enable_security_group = True
    firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
  • 在Nova配置中添加Neutron信息(确保 /etc/nova/nova.conf 中已有以下部分,若没有则添加)

    [neutron]
    auth_url = http://controller:5000
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = neutron
    service_metadata_proxy = True
    metadata_proxy_shared_secret = ws
    insecure = false
  • 配置Open vSwitch服务,允许远程管理

    vim /etc/default/openvswitch-switch

    添加或修改:

    OVS_CTL_OPTS="--ovsdb-server-options='--remote=ptcp:6640:127.0.0.1'"
  • 初始化Neutron数据库

    su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
  • 重启nova-api服务以识别新的Neutron配置

    service nova-api restart
  • 重启OVS服务并配置网络

    systemctl restart openvswitch-switch
    # 添加集成网桥
    ovs-vsctl add-br br-int
  • 启动并配置OVN中央服务

    systemctl restart ovn-central ovn-northd
    # 设置OVN北向和南向数据库的连接点
    ovn-nbctl set-connection ptcp:6641:10.0.0.10 --set connection . inactivity_probe=60000
    ovn-sbctl set-connection ptcp:6642:10.0.0.10 --set connection . inactivity_probe=60000
    # 配置外部网络桥接映射 (physnet1 对应 br-eth1,连接 eth1 网卡)
    ovs-vsctl add-br br-eth1
    ovs-vsctl add-port br-eth1 eth1
    ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth1
  • 重启Neutron服务

    service neutron-server restart

8.2 计算节点配置

  • compute01节点安装OVN和Neutron组件。

    apt -y install neutron-common neutron-plugin-ml2 neutron-ovn-metadata-agent ovn-host openvswitch-switch
  • 配置Neutron主配置文件 (/etc/neutron/neutron.conf),内容与控制节点类似,但 [DEFAULT] 部分通常无需 bind_host 等选项。

  • 配置ML2插件配置文件 (/etc/neutron/plugins/ml2/ml2_conf.ini),内容与控制节点完全一致,确保 ovn_nb_connectionovn_sb_connection 指向控制节点IP。

  • 配置Metadata Agent (/etc/neutron/neutron_ovn_metadata_agent.ini)

    # 备份文件
    cp /etc/neutron/neutron_ovn_metadata_agent.ini{,.bak}
    # 过滤提取文件
    grep -Ev "^$|#" /etc/neutron/neutron_ovn_metadata_agent.ini.bak > /etc/neutron/neutron_ovn_metadata_agent.ini

    编辑配置文件:

    [DEFAULT]
    nova_metadata_host = controller
    metadata_proxy_shared_secret = ws
    [ovn]
    ovn_sb_connection = tcp:10.0.0.10:6642
  • 在计算节点的Nova配置中也添加与8.1节相同的 [neutron] 部分。

  • 配置计算节点的Open vSwitch服务(同控制节点步骤)。

  • 重启相关服务以加载网络配置

    systemctl restart openvswitch-switch ovn-controller ovn-host
    systemctl restart neutron-ovn-metadata-agent
    systemctl restart nova-compute
  • 设置计算节点与OVN控制平面的连接

    ovs-vsctl set open . external-ids:ovn-remote=tcp:10.0.0.10:6642
    ovs-vsctl set open . external-ids:ovn-encap-type=geneve
    ovs-vsctl set open . external-ids:ovn-encap-ip=10.0.0.11
  • 在计算节点上也配置外部网络桥接(如果计算节点也需要提供外部网络访问)

    ovs-vsctl add-br br-eth1
    ovs-vsctl add-port br-eth1 eth1
    ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth1
  • 再次重启服务使桥接配置生效

    systemctl restart openvswitch-switch ovn-controller ovn-host
    systemctl restart neutron-ovn-metadata-agent
    systemctl restart nova-compute

8.3 校验Neutron服务

  • 在控制节点查看网络代理状态
    openstack network agent list

8.4 Neutron网关调度问题处理

在某些OVN版本中,可能会遇到路由器外部网关端口状态异常的问题。

8.4.1 临时处理方法

在控制节点手动为路由器端口指定网关 chassis。

# 获取Logical_Router_Port的 _uuid
ovn-nbctl list Logical_Router_Port
# 获取Chassis的UUID
ovn-sbctl show
# 手动关联
ovn-nbctl lrp-set-gateway-chassis <router_port_uuid> <chassis_uuid>
8.4.2 永久处理方法

修改Neutron OVN驱动源码中的网关调度逻辑。编辑文件 /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py,找到 get_candidates_for_scheduling 方法并进行相应修复(具体代码块因版本而异,需参考社区补丁)。

修改后重启Neutron服务:

service neutron-server restart

9. 配置Dashboard仪表盘服务

  • 安装Horizon仪表盘

    apt install -y openstack-dashboard
  • 配置Dashboard (/etc/openstack-dashboard/local_settings.py)

    # 配置仪表板以在控制器节点上使用OpenStack服务
    OPENSTACK_HOST = "controller"
    # 允许所有主机访问Dashboard(生产环境应指定IP)
    ALLOWED_HOSTS = ["*"]
    # 配置memcached会话存储服务
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
    }
    # 启用Identity API版本3
    OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
    # 启用对域的支持
    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    # 配置API版本
    OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
    }
    # 将Default配置为通过仪表板创建的用户的默认域
    OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
    # 将user角色配置为通过仪表板创建的用户的默认角色
    OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
    # 配置时区
    TIME_ZONE = "Asia/Shanghai"
  • 重新加载Web服务器配置

    systemctl reload apache2
  • 通过浏览器访问控制台:http://controller/horizon,使用之前创建的admin用户和密码(000000)登录。

10. 部署配置Cinder(块存储服务)

10.1 控制节点配置

  • 创建数据库与用户供cinder组件使用。

    # 创建cinder数据库
    CREATE DATABASE cinder;
    # 创建cinder用户
    GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinderang';
  • 创建cinder用户

    openstack user create --domain default --password cinder cinder
  • 添加cinder用户到service项目的admin角色

    openstack role add --project service --user cinder admin
  • 创建cinder服务实体 (v3)

    openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
  • 创建cinder服务API端点

    openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/\%\(project_id\)s
    openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/\%\(project_id\)s
    openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/\%\(project_id\)s
  • 安装cinder API和调度服务

    apt install -y cinder-api cinder-scheduler
  • 配置cinder服务 (/etc/cinder/cinder.conf)

    # 备份文件
    cp  /etc/cinder/cinder.conf{,.bak}
    # 过滤覆盖文件
    grep -Ev "^$|#" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf

    编辑配置文件:

    [DEFAULT]
    transport_url = rabbit://openstack:000000@controller
    my_ip = 10.0.0.10
    [database]
    connection = mysql+pymysql://cinder:cinderang@controller/cinder
    [keystone_authtoken]
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = cinder
    password = cinder
  • 初始化Cinder数据库

    su -s /bin/sh -c "cinder-manage db sync" cinder
  • 在Nova配置中指定Cinder区域

    vim /etc/nova/nova.conf

    添加:

    [cinder]
    os_region_name = RegionOne

    重启Nova API服务:

    service nova-api restart
  • 重启Cinder调度器服务

    service cinder-scheduler restart
  • 重新加载Apache以启用Cinder API

    service apache2 reload

10.2 计算/存储节点配置(本例中compute01兼做存储节点)

  • compute01节点安装LVM和存储服务依赖。

    apt install -y lvm2 thin-provisioning-tools
  • 在附加磁盘 /dev/sdb 上创建LVM物理卷和卷组

    pvcreate /dev/sdb
    vgcreate cinder-volumes /dev/sdb
  • 配置LVM过滤器,只允许Cinder使用指定的磁盘

    vim /etc/lvm/lvm.conf

    找到 devices { 部分,修改 filter 行(确保只有 sdb 被接受):

    filter = [ "a/sdb/", "r/.*/"]
  • 安装Cinder Volume服务及iSCSI target工具

    apt install -y cinder-volume tgt
  • 配置Cinder Volume服务 (/etc/cinder/cinder.conf)

    # 备份配置文件
    cp /etc/cinder/cinder.conf{,.bak}
    # 过滤覆盖文件
    grep -Ev "^$|#" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf

    编辑配置文件,启用LVM后端并配置iSCSI:

    [DEFAULT]
    transport_url = rabbit://openstack:000000@controller
    my_ip = 10.0.0.11
    enabled_backends = lvm
    glance_api_servers = http://controller:9292
    [lvm]
    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    volume_group = cinder-volumes
    target_protocol = iscsi
    target_helper = tgtadm
    volume_backend_name = lvm
    # [keystone_authtoken] 等部分配置与控制节点cinder配置一致
  • 配置iSCSI target服务以包含Cinder管理的卷

    vim /etc/tgt/conf.d/tgt.conf

    添加:

    include /var/lib/cinder/volumes/*
  • 重启相关服务

    service tgt restart
    service cinder-volume restart

10.3 校验Cinder服务

  • 在控制节点查看卷服务列表
    openstack volume service list

10.4 解决Cinder卷挂载权限问题(如遇#2088类错误)

确保Nova和Cinder用户在service项目中都具有 service 角色。

  • 创建service角色(如果不存在)

    openstack role create service
  • 检查并添加角色

    
    # 检查用户是否已分配角色
    openstack role assignment list --user cinder --project service --names
    openstack role assignment list --user nova --project service --names
    # 将服务nova、cinder角色默认修改为service(如果检查发现缺失)
    openstack role add --user cinder --project service service
    openstack role add --user nova --project service service



上一篇:Kafka单个Topic数据过期未清理实战排查与解决方案
下一篇:Kubernetes持久化存储实战指南:Volume、PV、PVC与StorageClass核心概念解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 03:26 , Processed in 0.080640 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表