手动搭建openstack

双节点手动搭建openstack

## 一、环境规划

    控制节点:controller 8G、2cpu、100G、双网卡
            网卡1:NAT 192.168.100.144/24
            网卡2:仅主机 暂不配置
    
    计算节点:controller 4G、2cpu、200G、双网卡
            网卡1:NAT 192.168.100.145/24       
            网卡2:仅主机 暂不配置

密码规划

## 二、基础系统环境配置

安装常用包

    yum -y install vim net-tools    #安装vim和ifconfig的安装包

### 1、网络配置

    两个节点的配置如下
    虚拟机的配置文件
    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
    将配置文件改为以下就行
    TYPE=Ethemet
    PROXY_METHOD=none
    BROWSER_ONLY=noBOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE FATAL=no
    IPV6INIT=yes
    IPV_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILUREFATAL=nO
    IPV6_ADD_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=c5ee193b-4ef7-46b5-b251-a2218e302bf2
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.100.144        #自己本机的IP
    PREFIX=24
    GATEWAY=192.168.100.2        #自己本机的网关
    DNS1=114.114.114.114         #DNS服务器
    DNS2=223.5.5.5
    PEERDNS=no

### 2、关闭NetworkManager(系统网络配置服务)

    两个节点的配置如下
    systemctl disable NetworkManager
    systemctl stop NetworkManager
    systemctl status NetworkManager    #查看网络状态

### 3、关闭防火墙

    两个节点的配置如下
    systemctl disable firewalld
    systemctl stop firewalld
    systemctl status firewalld     #查看防火墙状态

### 4、关闭sellnux

    两个节点的配置如下
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && setenforce 0
    sed -i "s/需要替换的内容/替换成什么内容/g" /执行替换操作的文件名
    这里要将主机重启才能生效命令,但打了setenforce 0这条命令则不用重启
    getenforce            #检查
    结果是disabled(永久关闭)或permissive(临时关闭)

### 5、修改主机名

    两个节点的配置如下
    控制节点:hostnamectl set-hostname controller
    计算节点:hostnamectl set-hostname compute
    完后成执行:bash        #刷新

### 6、修改hosts文件

    两个节点的配置如下
    cat <<EOF>> /etc/hosts
    192.168.100.144 controller
    192.168.100.145 compute
    EOF
    这里的EOF是检测结束的
    > 表示覆盖
    >> 追加
    验证:
    ping -c 2 controller
    ping -c 2 compute

### 7、配置NTP时间同步

    两个节点的配置如下
    yum install chrony        #安装时间同步的软件包
    
    vim /etc/chrony.conf      #修改配置文件
    server ntp.aliyun.com iburst    #删除原有服务器,添加这个(控制节点才配置这个)
    server controller iburst        #计算节点配置
    allow 192.168.0.0/16      #打开允许同步的网段  计算节点不用改,控制节点要改
    local stratum 10          #打开允许连接数     计算节点不用改,控制节点要改
    
    systemctl start chronyd     
    systemctl enable chronyd    
    systemctl status chronyd    #检查
    chronyc sources             #带*号则同步成功,反之没有
    date        #查看时间

### 8、安装软件包

    两个节点的配置如下
    这里描述的OpenStack软件包的设置需要哦在所有节点:控制器、计算和块存储节点。

#### 8.1配置国内Yum源

    两个节点的配置如下
    备份系统Yum源配置文件
    cd /etc/yum.repos.d/ && mkdir backup && mv *.repo backup/
    下载阿里云的Yum源配置文件
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    安装T版OpenStack的Yum源配置文件
    yum -y install centos-release-openstack-train
    
    检查
    yum clean all && yum repolist
    
    安装T版的OpenStack客户端
    yum -y install python-openstackclient
    yum -y install openstack-selinux

## 三、安装OpenStack基础组件

### 1、安装并配置数据库

    在控制节点上安装
    安装软件包
    yum -y install mariadb mariadb-server python2-PyMySQL
    
    创建并修改配置文件
    vim /etc/my.cnf.d/openstack.cnf
    将以下内容添加到文件里
    
    [mysqld]
    bind-address = 192.168.100.144        改为自己的本机Ip
    default-storage-engine = innodb
    innodb_file_per_table = on
    max_connections = 4096
    collation-server = utf8_general_ci
    character-set-server = utf8
    
    启动并自启服务
    systemctl enable mariadb.service 
    systemctl start mariadb.service
    
    初始化数据库配置
    mysql_secure_installation
    验证
    登陆到mysql数据库,并成功查看到数据库内容
    mysql -u root -p000000
    show databases        用这条命令看数据库是否成功显示

### 2、安装并配置消息队列服务

    这里只在控制节点安装
    安装软件包
    yum -y install rabbitmq-server
    
    启动消息队列服务并将其配置为在 系统引导:
    systemctl enable rabbitmq-server.service
    systemctl start rabbitmq-server.service
    
    添加用户:openstack
    rabbitmqctl add_user openstack RABBIT_PASS
    
    Creating user "openstack" ... RABBIT_PASS
    替换为合适的密码。RABBIT_PASS
    
    允许用户的配置、写入和读取访问权限:openstack
    rabbitmqctl set_permissions openstack ".*" ".*" ".*"
    
    Setting permissions for user "openstack" in vhost "/" ...
    验证
    lsof -i:5672

### 3、安装配置Mencache服务

    这里只在控制节点安装
    安装软件包
    yum -y install memcached python-memcached    #适用于 CentOS 7 和 RHEL 7
    yum -y install memcached python3-memcached   #适用于 CentOS 8 和 RHEL 8
    
    修改配置文件
    vim /etc/sysconfig/memcached
    将里面的配置文件最后一行改为
    OPTIONS="-l 127.0.0.1,::1,controller"
    
    启动自启服务
    systemctl enable memcached.service
    systemctl start memcached.service
    
    查看状态
    systemctl status memcached
    
    

### 4、安装配置Etcd

    这里只在控制节点安装
    安装软件包
    yum -y install etcd
    
    修改配置文件
    vim /etc/etcd/etcd.conf
    删除原有内存,添加如下
    #[Member]
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"
    ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"
    ETCD_NAME="controller"
    #[Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
    ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
    ETCD_INITIAL_CLUSTER_STATE="new"
    
    替换IP位自己的虚拟机的IP地址
    sed -i "s#10.0.0.11#192.168.100.144#g" /etc/etcd/etcd.conf
    
    启动自启服务
    systemctl enable etcd
    systemctl start etcd
    

## 四、OpenStack业务组件安装

### 1、安装配置keystone认证服务

    这里只在控制节点安装
    mysql -u root -p000000
    创建keystone数据库
    MariaDB [(none)]> CREATE DATABASE keystone;
    
    授予对数据库的适当访问权限:clkeystone
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
    
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
    替换为合适的密码。KEYSTONE_DBPASS;
    
    退出数据库访问客户端。
    
    安装软件包
    yum -y install openstack-keystone httpd mod_wsgi
    
    编辑配置文件
    cd /etc/keystone/
    cp keystone.conf keystone.conf.source
    grep -Ev "^#|^$" keystone.conf.source > keystone.conf
    
    vim /etc/keystone/keystone.conf
    
    [database]
    # ...##指定数据库连接信息
    connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
    
    [token]
    # ...
    provider = fernet
    替换为您为数据库选择的密码。KEYSTONE_DBPASS
    
    填充数据库
    su -s /bin/sh -c "keystone-manage db_sync" keystone
    
    检查填充结果(使用mysql命令进行查看即可)
    mysql
    
    初始化fernet密钥存储库
    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    
    
    执行身份引导
    keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
      --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 HTTP服务
    编辑配置文件
    vim /etc/httpd/conf/httpd.conf
    在#SeirverName www.example.com:80下插入行:
    ServerName controller
    如果该条目尚不存在,则需要添加
    创建指向该文件的链接到
    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
    
    启动自启httpd服务 
    systemctl enable httpd.service
    systemctl start httpd.service
    
    查看状态
    systemctl status httpd
    
    设置环境变量并导入系统:
    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    
    env | grep OS         #查看环境变量是否导入成功
    
    创建域、项目、用户和角色
    创建example域
    openstack domain create --description "An Example Domain" example
    
    创建service项目
    openstack project create --domain default --description "Service Project" service
    
    创建myproject项目
    openstack project create --domain default --description "Demo Project" myproject
    
    创建myuser用户
    openstack user create --domain default --password-prompt myuser
    
    创建myrole角色
    openstack role create myrole
    
    将myuser、myrole和myproject关联
    openstack role add --project myproject --user myuser myrole
    
    验证操作
    取消设置临时和环境变量:OS_AUTH_URLOS_PASSWORD
    $ unset OS_AUTH_URL OS_PASSWORD
    以用户身份请求身份验证令牌:admin
    
    $ openstack --os-auth-url http://controller:5000/v3 \
      --os-project-domain-name Default --os-user-domain-name Default \
      --os-project-name admin --os-username admin token issue
    
    Password:        #输入admin密码
    以myuser用户请求身份验证令牌:myuser
    
    $ openstack --os-auth-url http://controller:5000/v3 \
      --os-project-domain-name Default --os-user-domain-name Default \
      --os-project-name myproject --os-username myuser token issue
    
    Password:        #输入admin密码
    以myuser用户请求身份验证令牌:myuser
    
    创建用户配置脚本
    admin用户
    vi /root/admin-openrc
    
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    
    myuser用户
    vi /root/demo-openrc
    
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=myproject
    export OS_USERNAME=myuser
    export OS_PASSWORD=myuser
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    
    验证:openstack token issue

### 2、安装配置Glance镜像服务

    创建数据库
    使用root用户连接到数据库
    mysql -u root -p000000
    创建数据库:glance
    MariaDB[(none)> CREATE DATABASE glance;
    
    授予对数据库的适当访问权限:glance
    MariaDB [(none)> GRANT ALL PRIVILEGES ON glance.* TO glance@'locahost' IDENTIFIED BY "GLANCE_DBPASS";
    
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO glance@'%' IDENTIFIED BY "GLANCE_DBPASS";
    退出数据库
    访问客户端
    获取凭据以获取访问权限 仅限管理员的 CLI 命令: admin
    cd
    source admin-openrc
    
    要创建服务凭据,请完成以下步骤
    创建用户: glance
    openstack user create --domain default --password GLANCE_PASS glance
    
    GLANCE_PASS
    
    User Password:
    Repeat User Password:
    --password-prompt 该参数要求命令执行后输入两次密码确认
    password [password]使用该参数直接在命令中输入设置的密码
    
    将角色添加到用户和项目:
    openstack role add --project service --user glance admin
    
    创建服务实体:glance
    openstack service create(创建服务) --name(指定服务的名称) glance --description(指定服务的描述信息) "OpenStack lmage" image(指定服务的类型)
    openstack service create --name glance --description "OpenStack lmage" image
    
    创建影像服务API端点
    openstack endpoint(创建服务端点) create --region(指定端点区域) RegionOne image(指定端点的服务) public(指定端点接口类型) http://controller:9292(指定端点的URL)
    
    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
    
    查看服务目录
    openstack catalog list
    
    安装软件包
    yum -y install openstack-glance
    
    编辑配置文件
    vim /etc/glance/glance-api.conf
    搜索要修改的地方
    /\[database]
    connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
    
    cd /etc/glance/
    cp glance-api.conf glance-api.conf.source
    cat glance-api.conf.source | grep -Ev "#|^$" > /etc/glance/glance-api.conf
    
    vim glance-api.conf
    注意替换密码: GLANCE_DBPASS
    配置身份服务访问:[keystone_authtoken][paste_deploy]
    [keystone_authtokenj
    #-
    www_authenticate uri = http://controller:5000    #指定身份认证的URL
    auth_url = http://controller:5000                #指定身份认证的URL
    memcached_servers = controller:11211             #指定memcached服务器地址
    auth_type = password                             #指定身份认证类型
    project_domain_name = Default                    #指定项目域名称
    user_domain_name = Default                       #指定用户域名称
    project_name = service                           #指定服务使用的项目名称
    username = glance                                #指定身份认证的用户名
    password = GLANCE_PASS                           #指定身份认证的密码
    
    [paste_deploy]
    flavor = keystone                                #指定提供认证的服务器为keystone
    
    注意
    注释掉或删除该部分中的任何其他选项。[keystone_authtoken]
    在部分中,配置本地文件 系统存储和映像文件的位置: 
    [glance_store]
    stores = file,http                               #指定存储类型:file:文件;http:基于apr调用的方式,把镜像放到其他存储上
    default_store = file                             #指定默认存储方式
    filesystem_store_datadir = /var/lib/glance/images/    #指定镜像存放的本地目录
    
    填充数据库
    su -s /bin/sh -c "glance-manage db_sync" glance
    验证是否同步成功
    mysql -uroot -p000000 -e "show tables from glance"
    
    启动服务并将其配置位跟随兄台你引导启动:
    systemctl enable openstack-glance-api.service 
    systemctl start openstack-glance-api 或 registry
    
    验证
    查看是否启动成功
    ss -tnl
    1、查看glance服务状态
    systemctl status openstack-glance-api.service
    2、获取cirros镜像文件并创建镜像
    yum install -y wget
    验证操作
    wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
    
    创建镜像
    openstack image create --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 cirros
    查看结果
    openstack image list
    openstack image show cirros
    

## 五、部署放置服务Plancement

### 1、placement 简介:

    Placement服务是从 S 版本,从nova服务中拆分出来的组件,作用是收集各个node节点的可用资源(比如计算节点,存储资源池,网络资源池等),把node节点的资源统计写入到mysql
    Placement服务会被nova scheduler服务进行调用 
    Placement服务的监听端口是8778
    Placement提供了placement-apiWSGI脚本,通过nginx或apache实现python入口代理,用于部署OpenStack的打包解决方案

### 2、创建数据库并授权

    连接数据库
    mysql -uroot -p000000
    
    创建Placment数据库
    MariaDB [(none)]> create database placement;
    
    创建用户并对placement拥有适当权限
    MariaDB [(none)]> grant all privileges on placement.* to 'placement'@'%' identified by "PLACEMENT_DBPASS";
    验证用户权限
    MariaDB [(none)]> show grants for placement@'%';
    验证用户连接数据库
    mysql -uplacenment -pPLACEMENT_DBPASS
    

### 3、使用admin用户登录OpenStack

    使用admin用户登录OpenStack
    source admin-openrc
    验证是否导入成功
    env | grep OS

### 4、创建服务凭据

    先进入这里
    . admin-openrc
    创建placement用户
    openstack user create --domain default --password PLACEMENT_PASS placement
    
    将角色添加到用户和项目
    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 admin http://controller:8778
    openstack endpoint create --region RegionOne placement public http://controller:8778
    openstack endpoint create --region RegionOne placement internal http://controller:8778

### 5、编辑配置文件并同步数据库

    安装openstack-placement相关软件包
    yum -y insatll openstack-placement-api
    
    编辑placement配置文件
    cp /etc/placement/placement.conf /etc/placement/placement.conf.bak
    grep -Ev "#|^$" /etc/placement/placement.conf.bak > /etc/placement/placement.conf
    
    vim /etc/placement/placement.conf
    [api]
    auth_strategy = keystone                #启用keystone进行认证
    
    [keystone_authtoken]
    auth_url=http://controller:5000
    memcached_servers=controller:11211
    auth_type=password
    project_domain_name=Default
    user_domain_name=Default
    project_name=service
    username=placement
    password=PLACEMENT_PASS
    
    [placement_database] 
    connection=mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
    
    同步数据库
    su -s /bin/sh -c "placement-manage db sync" placement
    
    验证是否同步
    mysql -uroot -p000000 placement -e "show tables"
    

### 6、修复plancement服务BUG

    echo >> /etc/httpd/conf.d/00-placement-api.conf << EOF
    ><Directory /usr/bin>            #此处是bug,必须添加以下的配置来启用对placement api的访问否则在访问apache的api时会报403
    > <lfVersion >= 2.4>
    > Require all granted
    > </lfVersion>
    > <lfVersion <2.4>
    > Order allow,deny               #允许apache访问/usr/bin目录; 否则/usr/bin/placement-api将不允许被访问
    > Allow from all
    > </lfVersion>
    ></Directony>
    >EOF
    
    <Directory /usr/bin>
    <IfVersion >= 2.4>
            Require all granted
    </IfVersion>
    <IfVersion < 2.4>
            Order allow,deny
            Allow from all
    </IfVersion>
    </Directory>
    
    
    

### 7、重新启动服务

    systemctl restart httpd
    
    验证服务是否开启
    systemctl status httpd

### 8、验证安装

    curl测试访问
    curl controller:8778
    
    检查palcement的状态
    placement-status upgrade check
    
    

### 9、查看端口

    [root@controller ~]# ss -tnl                #可以将端口显示出来
    
    [root@controller ~]# ss -tl                #可以将一些端口服务给显示出来
    
    

## 六、部署 计算服务Nova

### 1、Nova简介

    Nova是OpenStack最核心的服务之一,负责管理和维护云环境的计算资源,负责虚拟机生命周期的管理
    Nova没有虚拟化的能力,靠的是自己的虚拟化驱动,通过驱动和底层虚拟化技术,进行交互和调用操作
    Nova需要keystone、glance、neutron等服务支持,可与这些服务集成
    
    
    Nova架构
    nova-api:用来接收客户端请求,并将请求信息放到对应的消息队列中,同时将用户的请求写入到nova数据库中
    nova-scheduler:决策一个虚拟机应该调度到某物理节点
    1.过滤(filter):过滤出可以创建虚拟机的主机
    2.计算权重(weight):根据权重大小进行分配,默认根据资源可用空间进行权重排序
    
    nova-compute:
    (1)定时向OpenStack报告计算节点的状态
    (2)实现实例生命周期的管理
    
    nova-conductor:数据库操作、复杂流程控制
    1.    更高的系统安全性
    2.    更好的系统伸缩性
    nova-novncproxy:VNC代理,用于显示虚拟机操作终端
    
    
    Nova的工作原理
    Nova api接受用户的Cli命令或horizon创建实例请求,以消息队列的形式将请求发送给Nova scheduler,Nova scheduler通过Nova conductor与数据库进行交互,计算当前节点的负载及使用情况,将虚拟机实例分配到当前节点负载最小且满足启动虚拟机实例的节点上,而最终的实例还是要通过Nova compute来创建,而Nova compute将会与Nova volume、Nova network等等一些组件通过消息队列的方式实现相互的协作,最终完成虚拟机实例的创建.
    
    
    cell的功能
    (1)Messages的路由,即父cell通过nova-cell将Messages路由到子cell的AMQP(消息队列)模块。
    (2)分级调度功能,即调度某个instances的时候先要进行cell的选择,目前只支持随机调度,后续会增加基于filter和weighing策略的调度。
    (3)资源统计,子cell定时的将自己的资源信息上报给父cell,用来给分级调度策略提供决策数据和基于cell的资源监控。
    (4)cell之间的通信(通过rpc远程调用完成)
    
    cell的功能
    从架构图看,位于最上层的cell0,也就是api-cell, 而下层的cell1与cell2则是平行对等的关系,他们之间无交互,相互独立,还可以继续增加cell3,cell4 。 而上层的api cell主要包括了
    
    Nova API, Nova Scheduler, Nova Conductor 这3个 Nova 服务 ,同时在 API Cell 中还需要 MQ 提供组件内的通信服务。API Cell 中的 DB 包含两个数据库,分别是 api数据库 和 cell数据库,api 数据库保存了全局数据,比如 flavor 信息。此外 api 数据库中还有一部分表是用于 placement 服务的;而 cell数据库则是用于保存创建失败且还没有确定位于哪个 cell 的虚机数据,比如当虚拟机调度失败时,该虚拟机数据就会被保存到cell数据库中。也就是cell0数据库中。在每个 Cell 中,都有自己独立使用的数据库、消息队列和 Nova Conductor 服务,当前 Cell 中的所有计算节点,全部将数据发送到当前 Cell 中的消息队列,由 Nova Conductor 服务获取后,保存至当前 Cell 的 Nova 数据库中。整个过程都不会涉及到 API Cell 中的消息队列。因此通过对计算节点进行 Cell 划分,可以有效降低 API Cell 中消息队列和数据库的压力。假如一个 MQ 能支持200个计算节点,则在划分 Cell 以后,每个 Cell 都可以支持200个计算节点,有 N 个 Cell 就可以支持 N X 200 个计算节点,因此可以极大提升单个 OpenStack 的集群管理规模。
    
    

### 2、Nova-controller服务部署(控制节点所作)

#### 2.1、创建数据库并授权

    连接数据库服务器
    mysql -uroot -p000000
    
    创建Nova-api、Nova、Nova-cell0数据库
    MariaDB [(none)]> create database nova_api;
    MariaDB [(none)]> create database nova;
    MariaDB [(none)]> create database nova_cell0;
    
    创建用户并对Nova-api、Nova、Nova-cell0拥有适当权利
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> grant all privileges on nova_api.* to 'nova'@'%' identified by "NOVA_DBPASS";
    
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> grant all privileges on nova.* to 'nova'@'%' identified by "NOVA_DBPASS";
    
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> grant all privileges on nova_cell0.* to 'nova'@'%' identified by "NOVA_DBPASS";
    
    查看Nova用户权限
    MariaDB [(none)]> show grants for 'nova'@'%';
    
    测试使用Nova用户连接数据库服务器
    mysql -unova -pNOVA_DBPASS
    
    

#### 2.2、使用admin用户登录OpenStack

    使用admin用户登录OpenStack
    source admin-openrc
    验证是否导入成功
    env | grep OS

#### 2.3、创建计算服务凭据

    创建Nova用户
    openstack user create --domain default --password NOVA_PASS nova
    
    将角色添加到用户和项目
    openstack role add --project service --user nova admin
    
    创建nova服务实体
    openstack service create --name nova --description "OpenStack Compute" compute
    
    创建nova服务API端点
    openstack endpoint create --region RegionOne nova admin http://controller:8774/v2.1
    openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1
    openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1
    
    

#### 2.4、编辑配置文件并同步数据库

    安装openstack-nova相关软件包
    yum -y install openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
    
    编辑nova配置文件
    cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
    grep -Ev "#|^$" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
    
    vim /etc/nova/nova.conf
    
    [DEFAULT]
    enabled_apis=osapi_compute,metadata                                            #启用计算和元数据API   
    transport_url=rabbit://openstack:RABBIT_PASS@controller:5672                   #配置rabbit连接信息
    use_neutron=true        #通过neutron的方式获取IP地址            
    firewall_driver=nova.virt.firewall.NoopFirewallDriver                          #关闭nova防火墙
    
    [api]
    auth_strategy=keystone        
    
    [api_database]
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api                #配置数据库连接信息
    
    [database]
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova                  #配置数据库连接信息
    
    [glance]
    api_servers=http://controller:9292                                             #指定镜像服务API端点
    
    [keystone_authtoken]
    www_authenticate_uri=http://controller:5000                                    #指定身份认证的url
    auth_url=http://controller:5000                                                #指定身份认证的url
    memcached_server=controller:11211                                              #指定memcached服务器地址
    auth_type=password                                                             #指定身份认证类型
    project_domain_name=default                                                    #指定项目域名称
    user_domain_name=default                                                       #指定用户域名称
    project_name=service                                                           #指定服务使用的项目名称
    username=nova                                                                  #指定身份认证的用户名
    password=NOVA_PASS                                                             #指定身份认证的密码
    
    [oslo_concurrency]
    lock_path=/var/lib/nova/tmp                                                    #指定锁路径(作用:创建虚拟机时必须一步一步来,无法并行操作,只有上一步操作执行完才能进行下一步)
    
    [vnc]
    enabled=true                                                                   #启用vnc模块,用于连接虚拟机的控制台
    server_listen=192.168.100.144                                                  #指定vnc的监听地址
    server_proxyclient_address=192.168.100.144                                                    #指定server的客户端地址
    
    [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_PASS
    
    cat /etc/selinux/config 
    将SELINUX=disable改为SELINUX=disabled
    

#### 2.5、同步数据库

    su -s /bin/sh -c "nova-manage api_db sync" nova                                #同步nova-api数据库
    su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova                          #创建cell0数据库
    su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova #创建cell1数据库
    0                                    #同步nova数据库
    
    验证nova cell0和cell1是否已正确注册
    su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
    

#### 2.6、启动服务

    systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
    systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
    ---------------------------------------------------------------------------
    查看服务是否开启
    curl http://controller:8774

### 3、Nova-compute服务部署(计算节点所作)

#### 3.1、安装openstack-nove相关软件包

    yum -y install openstack-nova-compute

#### 3.2、修改nova配置文件

    cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
    grep -Ev "#|^$" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
    
    vim /etc/nova/nova.conf
    [DEFAULT]
    enabled_apis=osapi_compute,metadata
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    use_neutron=true
    firewall_driver=nova.virt.firewall.NoopFirewallDriver
    
    [api]
    auth_strategy=keystone
    
    [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_PASS
    
    [oslo_concurrency]
    lock_path=/var/lib/nova/tmp
    
    [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_PASS
    
    [vnc]
    enabled=true
    server_listen=0.0.0.0
    server_proxyclient_address=$my_ip
    novncproxy_base_url=http://192.168.100.144:6080/vnc_auto.html    #比较特殊的地方,需要手动添加IP地址,否则之后搭建成功后,无法通过UI控制台访问到内部虚拟机    #启用并配置远程控制台访问
    

#### 3.3、确定计算节点是否支持硬件加速

    grep -Ec "(vmx|svm)" /proc/cpuinfo
    -----------------------------------------------------------------------
    0
    #-c用于过滤统计    
    #如果返回值不是0,则计算节点支持硬件加速,则不需要额外操作
    #如果返回值是0,则计算节点不支持硬件加速,则使用qemu虚拟化类型
    
    #计算节点不支持KVM虚拟化(添加):
    vim /etc/nova/nova.conf
    [libvirt]
    virt_type=emu
    

#### 3.4、启动服务

    systemctl enable libvirtd openstack-nova-compute
    systemctl start libvirtd openstack-nova-compute

### 4、验证安装

#### 4.1、验证计算服务

    openstack compute service list

#### 4.2、检查Cells和placement API是否正常运行

    nova-status upgrade check

#### 4.3、发现计算主机

    su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

## 七、部署网络服务Neutron

### 1、Neutron简介

    Neutron在OpenStack中实现SDN的功能软件定义网络
    OpenStack网络服务提供一个API让用户在云中建立和定义网络连接。该网络服务的项目名称是Neutron, OpenStack网络负责创建和管理虚拟网络基础架构包括网络、交换机、子网和路由器,这些设备由OpenStack计算服务Nova管理。同时,网络服务还提供防火墙和VPN这样的高级服务。可以将网络服务部署到特定主机上。OpenStack网络组件与身份服务、计算服务和仪表板等多个OpenStack组件进行整合
    
    Neutron架构
    Neutron-server:对外提供OpenStack网络API,接收请求,并调用Plugin处理请求
    resetflu API:接收客户端的http请求
    (1) Core API:对外提供管理网络、子网和端口核心资源的resetful API
    (2) Extension APl: 对外提供网络管理、路由器、负载均衡、防火墙、安全组等扩展资源的resetful API2Commnon Service:负责对API的请求进行检验认证并授权
    Neutron Core:核心处理程序,调用相应的API插件来处理上层API的请求
    (1)Core Plugin APl: 定义了Core Plugin的抽象功能集合,Neutron Core通过该API调用相应的Core Plugin
    (2) Extension Plugin APl: 定义了Service Plugin的抽象功能集合,Neutron Core通过该AP1调用相应的Service Plugin
    Neutron plugin: 处理neutron server的请求,维护网络状态,并调用Agent处理请求
    (1) Core Plugin: 维护neutron的netowrk, subnet和port相关资源的信息,与core plugin对应的agent包括linux bridge,open vswitch等
    (2) Service Plugin: 提供dhcp、routing,firewall, load balance等服务,也有相应的agent
    
    Neutron provider:提供网络服务的虚拟或物理网络设备,例如Linux Bridge,Open vSwitch等
    Neutron agent:处理plugin的请求,调用底层虚拟或物理网络设备实现各种网络功能
    ML2 plugin: 可以在不同节点上分别部署inux bridge agent, open vswitch agent, hyper-v agent以及其他第三方agent
    (1)type driver:负责维护网络类型的状态,执行验证,创建网络等
    1、local: 该网络中的虚拟机实例只能与位于同一节点上同一网络的虚拟机实例通信
    2、flat: 该网络能与位于同一网络的虚拟机实例进行通信(扁平网络结构,即局域网结构且不会使用vlan)
    3、vlan:该网络能与位于同一vlan中的实例进行通信,不同vlan只能通过router通信
    4、xvlan:扩展vlan (A、使用stp防止环路,B、vxlan的隧道技术)
    5、gre:(通用路由封装)是用一种网络层协议去封装另一种网络层协议的隧道技术(2) mechanism driver: 负责获取由type driver维护的网络状态
    1、Agent-based: 包括linux bridge.open vswitch等
    2、Controller-based: 包括OpenDaylight,VMWare NSX等
    3、基于物理交换机:包括 Cisco Nexus,Arista,Mellanox 等3@
    Service Plugin/agent: 提供更丰富的扩展功能,包括dhcp、路由,load balance,firewall等
    1、dhcp: dhcp agent通过dnsmasg为实例提供dhcp服务
    2、Routing: I3 agent可以为项目创建router,提供子网之间的路由功能(路由功能默认通过iptables实现)
    3、Firewall:I3agent可以在router上配置防火墙策略,提供网络安全防护
    4、Load Balance: lbaas agent通过调用HAProxy为项目中的多个实例提供load balance服务
    
    Neutron基本概念
    (1)network: 是一个隔离的二层广播域。neutron支持多种类型的network,包括local, flat, VLAN,VxLAN和GRE
    (2)subnet: 是一个Pv4或者IPV6地址段。实例的IP地址从subnet中分配。每个subnet需要定义IP地址的范围和掩码
    (3)pot:可以看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当实例的虚拟网卡连接到端口时port会把ip地址和mac地址分配给虚拟网卡。
    
    

### 2、Neutron-controller服务部署(控制节点)

#### 2.1、创建数据库并授权

    连接数据库服务器
    mysql -uroot -p000000
    
    创建neutron数据库
    MariaDB [(none)]> create database neutron;
    
    创建用户并对neutron拥有适当权限
    MariaDB [(none)]> grant all privileges on neutron.* to 'neutron'@'%' identified by "NEUTRON_DBPASS";

#### 2.2、使用admin用户登录OpenStack

    使用admin用户登录OpenStack
    source keystonerc_admin
    验证是否导入成功
    env | grep OS

#### 2.3、创建网络服务凭据

    创建neutron用户
    openstack user create--domain default --password NEUTRON_PASS 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 neutron admin http://controller:9696
    openstack endpoint create --region RegionOne neutron public http://controller:9696
    openstack endpoint create --region RegionOne neutron internal http://controller:9696
    

#### 2.4、配置提供商网络

    安装openstack-neutron相关软件包
    yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge entables
    
    编辑neutron配置文件
    cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
    grep -Ev "#|^$" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
    vim /etc/neutron/neutron.conf
    
    [DEFAULT]
    core_plugin=ml2                #启动二层网络插件
    service_plugins=               #不启动其他网络插件
    transport_url=rabbit://openstack:RABBIT_PASS@controller    #配置消息队列连接
    auth_strategy=keystone        #当网络接口发生时,通知计算节点
    notify_nova_on_port_status_changes=true        #当端口数据发生变化时,通知计算节点
    notify_nova_on_port_data_changes=true           #当端口数据发生变化时,通知计算节点
    
    [database]
    connection=mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron        #配置数据库连接
    
    [keystone_authtoken]        #配置keystone认证信息
    www_auth_uri=http://controller:5000
    auth_url=http://controller:5000
    memcached_server=controller:11211
    auth_type=password
    project=domain_name=default
    user_dommain_name=default
    project_name=service
    username=neutron
    password=NEUTRON_PASS
    
    [oslo_concurrency]
    lock_path=/var/lib/neutron/tmp          #指定锁路径
    
    [nova]                                  #指定neutron服务与nova服务进行交互的信息
    auth_url=http://controller:5000
    auth_type=password
    region_name=RegionOne
    project_domain_name=default
    user_domain_name=default
    project_name=service
    username=nova
    password=NOVA_PASS
    
    编辑ML2配置文件
    cp /etc/neutron/plugins/ml2/ml2_conf.ini /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
    vim /etc/neutron/plugins/ml2/ml2_conf.ini
    
    [ml2]
    type_drivers=flat,vlan            #指定支持的驱动类型:桥接,vlan
    tenant_network_types=             #不启动租户的网络类型
    mechanism_dirvers=linuxbridge     #启用linux桥接机制
    extension_drivers=port_security   #启用端口安全扩展驱动程序
    
    [ml2_type_flat]                   #指定公共虚拟网络为flat
    flat_networks=provider            #指定flat网络名为provider
    
    [securitygroup]    
    enable_ipset=true                 #启用ipset增加安全组规则的效率
    
    编辑linuxbridge配置文件
    cp /etc/neutron/ml2/linuxbridge_agent.ini /etc/neutron/ml2/linuxbridge_agent.ini.bak
    grep -Ev "#|^$" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    
    [linux_bridge]
    physical_interface_mappings=provider:eth0        #指定虚拟网络映射到物理网络接口
    
    [vxlan]
    enabled_vxlan=false                #禁用VXLAN覆盖网络
    
    [securitygroup]
    enable_securlity_group=true        #启用安全组
    firewall_driver=neutron.agent.linux.iptables_firewall.lptableesFirewallDriver            #指定安全组驱动文件
    
    修改内核参数
    echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf    #二层的网桥在转发包时会被iptables的forward规则过滤,使得虚拟机得数据能通过物理机出去
    echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
    modprobe br_netfilter            #向内核加入参数
    sysctl -p                        #重新加载内核配置
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    
    编辑dhcp配置文件
    cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak
    grep -Ev "#|^$" /etc/neutron/dhcp_agent.ini.bak > /etc/neutron/dhcp_agent.ini
    vim /etc/neutron/dhcp_agent.ini
    
    [DEFAULT]
    interface_driver=linuxbridge        #指定linux网桥接口驱动程序
    dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq        #指定dhcp驱动文件
    enable_isolated_metadata=true        #启用隔离得元数据
    
    

#### 2.5、配置元数据代理

    配置元数据代理
    cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.bak
    grep -Ev "#|^$" /etc/neutron/metadata_agent.ini.bak > /etc/neutron/metadata_agen.ini
    vim /etc/neutron/metadata_agent.ini
    
    [DEFAULT]
    nova_metadata_host=controller        #指定元数据代理服务器
    metadata_proxy_shared_secret=METADATA_SECRET        #指定元数据共享秘密

#### 2.6、将计算服务配置为使用网络服务

    vim /etc/nova/nova.conf
    
    [neutron]                            #指定nova服务与neutron服务进行交互得信息
    auth_url=http://controller:5000
    auth_type=password
    region_name=RegionOne
    project_domain_name=default
    user_domain_name=default
    project_name_service
    username=neutron
    password=NEUTRON_PASS
    service_metadata_proxy=true
    metadata_proxy_shared_secret=METADATA_SECRET
    

#### 2.7、完成安装:

    创建ML2插件文件符号连接
    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
    
    同步数据库
    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
    
    重启计算服务
    systemctl restart openstack-nova-api
    
    启动neutron服务
    systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
    systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
    
    验证端口是否起来
    ss -tnl
    

### 3、Neutron-compute服务部署

#### 3.1、安装openstack-neutron相关软件包

    yum -y -install -y openstack-neutron-linuxbridge ebtables ipset

#### 3.2、编辑neutron配置文件

    cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
    grep -Ev "#|^$" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
    vim /etc/neutron/neutron.conf
    
    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    auth_strategy=keystone
    
    [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_PASS
    
    [oslo_concurrency]
    lock_path= /var/lib/neutron/tmp
    
    

#### 3.3、配置提供商网络

    编辑linuxbridge配置文件
    cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak
    grep -Ev "#|^$" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    
    [linux_bridge]
    physical_interface_mappings=provider.eht0
    
    [vxlan]
    enable_vxlan=false
    
    [securitygroup]
    enable_security_group=true
    firewall_driver=neutron.agent.linux.iptables_firewall.lptablesFirewallDriver
    
    修改内核参数
    echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
    echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
    modprobe br_netfilter
    sysctl -p
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    
    

#### 3.4、将计算服务配置为使用网络服务

    vim /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_PASS
    
    

#### 3.5、完成安装

    重启计算服务 
    systemctl restart openstack-nova-compute
    
    启动neutron网桥代理服务
    systemctl enable neutron-linuxbridge-agent
    systemctl start neutron-linuxbridge-agent
    
    

#### 3.6、验证安装

    查看API扩展列表
    openstack extension list --network
    
    验证组件是否安装好
    openstack network agent list
    

## 八、部署存储服务Cinder

### 1、Cinder简历

    操作系统得到存储空间一般有两种方式:
    ① 块存储:挂接裸硬盘,分区,格式化,创建文件系统;或者直接使用裸硬盘存储数据
    ② 文件系统存储:通过nfs等方式挂载远程的文件系统
    在块存储中,裸硬盘通常被称为volume(卷)。
    cinder是OpenStack平台中负责提供块存储服务的组件,它的任务就是管理volume从创建到删除的整个生命周期。
    

#### 1.1、Cinder架构

    Cinder-api:接收API 请求,调用cinder-volume执行操作
    (1)检查客户端传入的参数是否有效
    (2)调用cinder其他子组件处理客户端请求
    (3)将其他子组件处理的结果返回客户端
    
    Cinder-scheduler:在多个存储节点根据调度算法和权重值上选出一个用于创建volume的最佳节点
    
    Cinder-volume:负责具体的 volume 请求处理,由不同后端存储提供 volume 存储空间
    (1)通过 Driver 架构支持多种 Volume Provider
    (2)定期向 OpenStack 报告计算节点的状态。cinder-volume 会定期向 Cinder 报告存储节点的空闲容量来做筛选启动volume
    (3)实现 volume 生命周期管理。Cinder 对 volume 的生命周期的管理最终都是通过 cinder-volume 完成的,包括 volume 的 create、extend、attach、snapshot、delete 等
    
    Cinder-provider:数据存储设备,为volume提供物理存储空间。
    
    Cinder-backup:用于将volume备份到其他存储系统上,目前支持的备份存储系统有swift、ceph、IBM Tivoli storage manager(TSM)、glusterFS等,默认是swift
    
    
    

### 2、cinder -controller服务部署

#### 2.1、创建数据库并授权

    连接数据库服务器
    mysql -uroot -p
    
    创建cinder数据库
    create database cinder;
    
    创建用户并对cinder拥有适当权限
    grant all privileges on cinder.* to 'cinder'@'%' identified by "CINDER_DBPASS";
    
    查看cinder用户权限
    show grants for cinder@'%'
    
    验证cinder用户登陆
    mysql -ucinder -pCINDER_DBPASS
    

#### 2.2、使用admin用户登录OpenStack

    使用admin用户登录OpenStack
    source keystonerc_admin
    
    验证是否导入成功
    env | grep OS

#### 2.3、创建块存储服务凭据

    创建cinder用户
    openstack user create --domain default --password CINDER_PASS cinder
    
    将角色添加到用户和项目
    openstack role add --project service --user cinder admin
    
    创建cinder服务实体
    openstack service create --name volumev2 --descriptlon "OpenStack Block Storage" volumev2
    openstack service create --name volumev3 --description "OpenStack Block Storage" volumev3
    
    创建cinder服务API端点
    openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
    
    openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
    
    openstack endpoint create --region RegionOne volumev2 intemal http://controller:8776/v2/%\(project_id\)s
    
    openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
    
    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/%\(projevt_id\)s
    

#### 2.4、编辑配置文件并同步数据库

    安装openstack-cinder相关软件包
    yum -y install openstack-cinder
    
    编辑cinder配置文件
    cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
    
    grep -Ev "#|^$" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf
    
    vim /etc/cinder/cinder.conf
    [DEFAULT]
    transport=rabbit://openstack:RABBIT_PASS@controller
    auth_strategy=keystone
    
    [database]
    connection=mysql+pymysql://cinder:CINDER_DBPASS@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_PASS
    
    [oslo_concurrency]
    lock_path=/var/lib/cinder/tmp
    
    同步数据库
    su -s /binsh -c "cinder -manage db sync" cinder
    
    验证是否同步
    mysql cinder -e "show tables"
    
    编辑nova配置文件
    vim /etc/nova/nova.conf
    
    [cinder]
    os_regon_name=RegionOne             #指定cinder服务所在区域名称   
    

#### 2.5、完成安装

    重新启动计算API服务
    systemctl restart openstack-nova-api
    
    启动cinder服务
    systemctl enable openstack-cinder-api openstack-cinder-scheduler
    systemctl start openstack-cinder-api openstack-cinder-scheduler
    
    验证端口是否起来(8776)
    ss -tnl
    

### 3、cinder-compute服务部署

#### 3.1、新建一块空白硬盘

    查看硬盘是否添加成功
    lsblk

#### 3.2、逻辑卷管理

    安装LVM软件包
    yum -y install lvm2 device-mapper-persistent-data
    
    启动服务
    systemctl start lvm2-lvmetad
    systemctl enable lvm2-lvmetad
    
    创建LVM物理卷
    pvcreate /dev/sdb
    
    创建LVM卷组
    vgcreate cinder-volumes /dev/sdb
    
    验证是否创建成功
    vgdisplay cinder-volumes
    
    编辑配置文件
    vim /etc/lvm/lvm.conf
    141 filter=["a/sdb/","r/.*/"]        允许lvm服务扫描sdb设备,拒绝其他设备(a:表示允许,r:表示拒绝)
    
    

#### 3.3、安装openstack-cinder相关软件包

    安装openstack-cinder相关软件包
    yum -y install openstack-cinder targetcli python-keystone
    

#### 3.4、编辑cinder配置文件

    编辑cinder配置文件
    cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
    
    grep -Ev "#|^$" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf
    
    vim /etc/cinder/cinder.conf
    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    auth_strategy=keystone
    enabled_backends=lvm                #开启后端:指定lvm,防止访问其他卷的数据
    glance_api_servers=http:controller:9292            #指定镜像服务的API端点
    
    [database]
    connection=mysql+pymysql://cinder:CINDET_DBPASS@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_PASS
    
    [oslo_concurrency]
    lock_path=/var/lib/cinder/tmp
    
    [lvm]
    volume_driver=cinder.volume.drivers.lvm.LVMColumeDriver        #指定lvm驱动程序
    volume_group=cinder-volumes        #指定用于存储cinder卷的卷组
    target_protocol=iscsi              #指定pv卷使用iscsi协议
    target_helper=lioadm               #指定lioadm帮助程序
    

#### 3.5、启动服务

    systemctl enable openstack-cinder-volume target
    systemctl start openstack-cinder-volume target

### 4、验证安装

    openstack volume service list

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值