设为首页 收藏本站
查看: 1180|回复: 0

[经验分享] OpenStack - liberty CentOS 7

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-9 09:22:17 | 显示全部楼层 |阅读模式
                      OpenStack私有云部署


Controller Node:       em1(10.6.17.11),em2()

Computer Node:         em1(10.6.17.12),em2()

Block Storage Node:    em1(10.6.17.13)

Object Storage Node:   em1(10.6.17.14)





1. Controller 修改网络配置


em1  =  

IPADDR=10.6.17.11
NETMASK=255.255.255.0
GATEWAY=10.6.17.1


em2  =   (HWADDR  与  UUID 不变)

BOOTPROTO=none
ONBOOT=yes



Computer 修改网络配置


em1  =  

IPADDR=10.6.17.12
NETMASK=255.255.255.0
GATEWAY=10.6.17.1


em2  =   (HWADDR  与  UUID 不变)

BOOTPROTO=none
ONBOOT=yes




2. 修改节点 主机名 方便后续查看

centos 7 使用如下命令修改:

hostnamectl --static set-hostname <主机名>

-----------------------------------------------------

3. 修改 host 文件  四台主机分别修改

vi /etc/hosts

10.6.17.11 controller
10.6.17.12 computer1
10.6.17.13 block1
10.6.17.14 object1

----------------------------------------------------

修改完毕,使用 ping -c 4 openstack.org   以及    controller   computer1   block1   object1 是否可以通


4. controller 安装ntp服务!

centos 7 使用 chrony 来做时间服务器.

[iyunv@controller ~]#  yum install chrony

##修改配置文件
[iyunv@controller ~]# vi /etc/chrony.conf

server cn.pool.ntp.org iburst


allow 10.6.17.0/24



[iyunv@controller ~]# systemctl enable chronyd.service
[iyunv@controller ~]# systemctl start chronyd.service
[iyunv@controller ~]# systemctl stop firewalld.service
[iyunv@controller ~]# systemctl disable firewalld.service

##其他节点 也分别安装 chrony

yum install chrony


##修改 配置文件

vi /etc/chrony.conf

server controller iburst


systemctl enable chronyd.service
systemctl start chronyd.service
systemctl stop firewalld.service
systemctl disable firewalld.service


##验证时间


[iyunv@controller ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* news.neu.edu.cn               2   6    17    44   -795us[ -812us] +/-   31ms




[iyunv@computer1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    17    35  -1007ns[ -300us] +/-   33ms



[iyunv@block1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    37     5     -8ns[ -385us] +/-   30ms



[iyunv@object1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller                    3   6    37     6   -707ns[ -548us] +/-   31ms






5. 添加 yum ELPL 源 以及 openstack-liberty 源


# yum install http://dl.fedoraproject.org/pub/ ... ease-7-5.noarch.rpm

# yum install centos-release-openstack-liberty


# yum upgrade

# reboot

# yum install python-openstackclient

# yum install openstack-selinux




6. controller 安装 mariadb 数据库

使用 yum 安装,或者使用 源码安装

[iyunv@controller ~]# yum install mariadb mariadb-server MySQL-python


my.conf 中添加如下配置 以支持 utf8

[mysqld]
...
bind-address = 10.6.17.11



[mysqld]
...
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8



# systemctl enable mariadb.service
# systemctl start mariadb.service



7. controller 安装 rabbitMQ 消息队列

[iyunv@controller ~]# yum install rabbitmq-server

[iyunv@controller ~]# systemctl enable rabbitmq-server.service
[iyunv@controller ~]# systemctl start rabbitmq-server.service

## 添加 openstack 用户 ( RABBIT_PASS 替换为 自己的密码 )

[iyunv@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...
...done.



## 授权帐号

[iyunv@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...
...done.



二、 配置 Identity service 服务

## 创建 OpenStack Identity service 的 管理员 帐号

[iyunv@controller ~]# mysql -u root -p

MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    -> IDENTIFIED BY 'keystone';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    -> IDENTIFIED BY 'keystone';


## 创建 管理员 token
[iyunv@controller ~]# openssl rand -hex 10
d22ea88344b5d4fa864f


## 安装openstack-keystone 组件

[iyunv@controller ~]# yum install openstack-keystone httpd mod_wsgi memcached python-memcached

[iyunv@controller ~]# systemctl enable memcached.service
[iyunv@controller ~]# systemctl start memcached.service


## 编辑 /etc/keystone/keystone.conf 文件 修改 token

[iyunv@controller ~]# vim /etc/keystone/keystone.conf

#admin_token = ADMIN

修改为 刚才生成的 token

admin_token = d22ea88344b5d4fa864f


[database]
...
connection = mysql://keystone:keystone@controller/keystone


[memcache]
...
servers = localhost:11211


[token]
...
provider = uuid
driver = memcache


[revoke]
...
driver = sql


[DEFAULT]
...
verbose = True


## 同步Identity service 数据库

[iyunv@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

提示 No handlers could be found for logger "oslo_config.cfg"   但是查看keystone.log 日志,发现已经同步完成。




## 配置 httpd 文件

[iyunv@controller ~]# vim /etc/httpd/conf/httpd.conf            修改如下:


ServerName controller


## 创建一个 wsgi-keystone.conf 文件

[iyunv@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf        内容如下:


-------------------------------------------------------------------------------------------------------------------------------------

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>


------------------------------------------------------------------------------------------------------------------------------------

## 启动 httpd
[iyunv@controller ~]# systemctl enable httpd.service
[iyunv@controller ~]# systemctl start httpd.service




## 配置 身份验证 token:              

[iyunv@controller ~]# export OS_TOKEN=d22ea88344b5d4fa864f
[iyunv@controller ~]# export OS_URL=http://controller:35357/v3
[iyunv@controller ~]# export OS_IDENTITY_API_VERSION=3


## 创建API用户

[iyunv@controller ~]# openstack service create \
> --name keystone --description "OpenStack Identity" identity

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | 528702ea888749d8b91cdf303cbec285 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+


## 创建 API访问节点

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> identity public http://controller:5000/v2.0

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 6d1d13e2a74940338337e2faeb404291 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v2.0      |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> identity internal http://controller:5000/v2.0
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1a6e4df9f7fb444f98da5274c4b45916 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v2.0      |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> identity admin http://controller:35357/v2.0
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 08e839319e5143229abc893e413e0dcc |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 528702ea888749d8b91cdf303cbec285 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:35357/v2.0     |
+--------------+----------------------------------+


## 创建 admin 项目

[iyunv@controller ~]# openstack project create --domain default \
> --description "Admin Project" admin
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Admin Project                    |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 0d1a69b17e444cb3b4884529b6bdb372 |
| is_domain   | False                            |
| name        | admin                            |
| parent_id   | None                             |
+-------------+----------------------------------+


## 创建 管理员 用户

[iyunv@controller ~]# openstack user create --domain default \
> --password-prompt admin
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 28c24be804a649cb825a8349ca3e6ce3 |
| name      | admin                            |
+-----------+----------------------------------+


## 创建 管理员 role

[iyunv@controller ~]# openstack role create admin
+-------+----------------------------------+
| Field | Value                            |
+-------+----------------------------------+
| id    | c378be38e9574421a54d90e62ee2d0aa |
| name  | admin                            |
+-------+----------------------------------+


## 关联 管理员用户 到 项目与role 中

[iyunv@controller ~]# openstack role add --project admin --user admin admin



## 创建 service 项目

[iyunv@controller ~]# openstack project create --domain default \
> --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 90b44e1c63104b92a1fadccc2258bbd1 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | None                             |
+-------------+----------------------------------+





## 验证账户

编辑 /usr/share/keystone/keystone-dist-paste.ini 文件

[iyunv@controller ~]# vim /usr/share/keystone/keystone-dist-paste.ini



[pipeline:public_api]

[pipeline:admin_api]

[pipeline:api_v3]

中的

admin_token_auth   删除



## 清除环境变量
[iyunv@controller ~]# unset OS_TOKEN OS_URL


## 以管理员身份 创建一个 token

[iyunv@controller ~]# openstack --os-auth-url http://controller:35357/v3 \
> --os-project-domain-id default --os-user-domain-id default \
> --os-project-name admin --os-username admin --os-auth-type password \
> token issue
Password:
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-12-03T04:03:34.754196Z      |
| id         | cba3fce8d9dc4bc7956f3b4aa566051c |
| project_id | 0d1a69b17e444cb3b4884529b6bdb372 |
| user_id    | 28c24be804a649cb825a8349ca3e6ce3 |
+------------+----------------------------------+



## 创建完成,表示验证通过



## 创建一个 客户端 脚本,方便操作

[iyunv@controller ~]# vim admin-openrc.sh

添加如下环境变量:


export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3



## 导入 脚本,并测试

[iyunv@controller ~]# source admin-openrc.sh

[iyunv@controller ~]# openstack token issue
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-12-03T04:07:26.391998Z      |
| id         | 24a890cc24b443dc9658a34aba8462d8 |
| project_id | 0d1a69b17e444cb3b4884529b6bdb372 |
| user_id    | 28c24be804a649cb825a8349ca3e6ce3 |
+------------+----------------------------------+


## 验证通过



三、安装配置 image server

## 创建并导入数据库

[iyunv@controller ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
    -> IDENTIFIED BY 'glance';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
    -> IDENTIFIED BY 'glance';


## 导入 脚本 创建用户

[iyunv@controller ~]# source admin-openrc.sh


## 创建 glance  用户

[iyunv@controller ~]# openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 19121c440d77403e8b66f197381c68e9 |
| name      | glance                           |
+-----------+----------------------------------+



## 关联到 项目 与 admin 用户

[iyunv@controller ~]# openstack role add --project service --user glance admin



## 创建 glance 服务

[iyunv@controller ~]# openstack service create --name glance \
> --description "OpenStack Image service" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image service          |
| enabled     | True                             |
| id          | bb8f3d6386cb423eb682147cf2b5ab92 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+


## 创建 image API

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> image public http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ac858877305542679883df3afb974a95 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> image internal http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 290dc30efb6b45c9bb654252aaf8b878 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> image admin http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 04fac23ce557445d92d77ca53cf4c620 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bb8f3d6386cb423eb682147cf2b5ab92 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+



## 安装配置 glance 相关软件

[iyunv@controller ~]# yum install openstack-glance python-glance python-glanceclient -y



## 编辑 /etc/glance/glance-api.conf 配置文件

[iyunv@controller ~]# vim /etc/glance/glance-api.conf

[database]
...
connection = mysql://glance:glance@controller/glance


[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glance

[paste_deploy]
...
flavor = keystone


[glance_store]
...
default_store = file
filesystem_store_datadir = /opt/glance/images/


[DEFAULT]
...
notification_driver = noop


[DEFAULT]
...
verbose = True



## 编辑 /etc/glance/glance-registry.conf 配置文件

[iyunv@controller ~]# vim /etc/glance/glance-registry.conf


[database]
...
connection = mysql://glance:glance@controller/glance


[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glance


[paste_deploy]
...
flavor = keystone


[DEFAULT]
...
notification_driver = noop


[DEFAULT]
...
verbose = True


## 同步 glance 数据库

[iyunv@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance



## 启动服务

[iyunv@controller ~]# systemctl enable openstack-glance-api.service \
> openstack-glance-registry.service

[iyunv@controller ~]# systemctl start openstack-glance-api.service \
> openstack-glance-registry.service



## 验证 glance 服务

添加一个环境变量到 脚本中

[iyunv@controller ~]# echo "export OS_IMAGE_API_VERSION=2" \
> | tee -a admin-openrc.sh

[iyunv@controller ~]# source admin-openrc.sh


## 下载一个测试镜像

wget http://download.cirros-cloud.net ... 3.4-x86_64-disk.img


## 上传镜像到 服务中
[iyunv@controller ~]# glance image-create --name "cirros" \
> --file cirros-0.3.4-x86_64-disk.img \
> --disk-format qcow2 --container-format bare \
> --visibility public --progress

[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2015-12-03T05:05:33Z                 |
| disk_format      | qcow2                                |
| id               | 3846ec1a-ad85-4b4d-88d9-17f2374ed41d |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros                               |
| owner            | 0d1a69b17e444cb3b4884529b6bdb372     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2015-12-03T05:05:33Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+


[iyunv@controller ~]# glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 3846ec1a-ad85-4b4d-88d9-17f2374ed41d | cirros |
+--------------------------------------+--------+





四、安装配置 Computer server


## 添加数据库 与 用户

[iyunv@controller ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> CREATE DATABASE nova;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    -> IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    -> IDENTIFIED BY 'nova';


## 创建 nova 用户

[iyunv@controller ~]# source admin-openrc.sh

[iyunv@controller ~]# openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 05dfb9b8091b4d708455281540a030d1 |
| name      | nova                             |
+-----------+----------------------------------+

## 关联 到 role

[iyunv@controller ~]# openstack role add --project service --user nova admin


## 创建 nova service
[iyunv@controller ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 1f73377bd0bc4f208ca6c904a71e6279 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+


## 创建 Compute service API

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> compute public http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | b545b7bd81ed4b64b559b905dd3b4532        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> compute internal http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 5b23e9f26e094f8f99a4416a085b6fc8        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> compute admin http://controller:8774/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 77638cfde23049cd9bf1c06347385562        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 1f73377bd0bc4f208ca6c904a71e6279        |
| service_name | nova                                    |
| service_type | compute                                 |
| url          | http://controller:8774/v2/%(tenant_id)s |
+--------------+-----------------------------------------+



##  controller 安装软件

[iyunv@computer1 ~]# yum install openstack-nova-api openstack-nova-cert \
> openstack-nova-conductor openstack-nova-console \
> openstack-nova-novncproxy openstack-nova-scheduler \
> python-novaclient


## 编辑 /etc/nova/nova.conf  配置文件


[database]
...
connection = mysql://nova:nova@controller/nova


[DEFAULT]
...
rpc_backend = rabbit
my_ip = 10.6.17.11
auth_strategy = keystone
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
enabled_apis=osapi_compute,metadata
verbose = True


[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack


[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = nova



[glance]
...
host = controller



[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp





## 同步数据库

su -s /bin/sh -c "nova-manage db sync" nova


## 启动服务

[iyunv@controller ~]# systemctl enable openstack-nova-api.service \
> openstack-nova-cert.service openstack-nova-consoleauth.service \
> openstack-nova-scheduler.service openstack-nova-conductor.service \
> openstack-nova-novncproxy.service


[iyunv@controller ~]# systemctl start openstack-nova-api.service \
> openstack-nova-cert.service openstack-nova-consoleauth.service \
> openstack-nova-scheduler.service openstack-nova-conductor.service \
> openstack-nova-novncproxy.service




## 安装配置 计算机节点 Compute 节点

yum install openstack-nova-compute sysfsutils


## 编辑 /etc/nova/nova.conf 配置文件



[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.12
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
verbose = True


[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack


[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = nova


[glance]
...
host = controller


[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp



## 查看否支持 虚拟化 大于0 表示支持, 大于0 不需要添加配置支持

[iyunv@computer1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
8


## 如果 硬件不支持虚拟化 则添加虚拟化支持

[iyunv@computer1 ~]# vim /etc/nova/nova.conf

[libvirt]
...
virt_type = qemu




## 启动服务

[iyunv@computer1 ~]# systemctl enable libvirtd.service openstack-nova-compute.service
[iyunv@computer1 ~]# systemctl start libvirtd.service openstack-nova-compute.service



## 验证 服务

[iyunv@controller ~]# nova service-list
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host       | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-consoleauth | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 2  | nova-conductor   | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 5  | nova-cert        | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 6  | nova-scheduler   | controller | internal | enabled | up    | 2015-12-03T07:06:27.000000 | -               |
| 7  | nova-compute     | computer1  | nova     | enabled | up    | 2015-12-03T07:06:31.000000 | -               |
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+


[iyunv@controller ~]# nova endpoints

+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | 5b23e9f26e094f8f99a4416a085b6fc8                           |
| interface | internal                                                   |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+
+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | 77638cfde23049cd9bf1c06347385562                           |
| interface | admin                                                      |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+
+-----------+------------------------------------------------------------+
| nova      | Value                                                      |
+-----------+------------------------------------------------------------+
| id        | b545b7bd81ed4b64b559b905dd3b4532                           |
| interface | public                                                     |
| region    | RegionOne                                                  |
| region_id | RegionOne                                                  |
| url       | http://controller:8774/v2/0d1a69b17e444cb3b4884529b6bdb372 |
+-----------+------------------------------------------------------------+


+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 08e839319e5143229abc893e413e0dcc |
| interface | admin                            |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:35357/v2.0     |
+-----------+----------------------------------+
+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 1a6e4df9f7fb444f98da5274c4b45916 |
| interface | internal                         |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:5000/v2.0      |
+-----------+----------------------------------+
+-----------+----------------------------------+
| keystone  | Value                            |
+-----------+----------------------------------+
| id        | 6d1d13e2a74940338337e2faeb404291 |
| interface | public                           |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:5000/v2.0      |
+-----------+----------------------------------+


+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | 04fac23ce557445d92d77ca53cf4c620 |
| interface | admin                            |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+
+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | 290dc30efb6b45c9bb654252aaf8b878 |
| interface | internal                         |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+
+-----------+----------------------------------+
| glance    | Value                            |
+-----------+----------------------------------+
| id        | ac858877305542679883df3afb974a95 |
| interface | public                           |
| region    | RegionOne                        |
| region_id | RegionOne                        |
| url       | http://controller:9292           |
+-----------+----------------------------------+


[iyunv@controller ~]# nova image-list
+--------------------------------------+--------+--------+--------+
| ID                                   | Name   | Status | Server |
+--------------------------------------+--------+--------+--------+
| 3846ec1a-ad85-4b4d-88d9-17f2374ed41d | cirros | ACTIVE |        |
+--------------------------------------+--------+--------+--------+





五、安装配置 Network server

## 添加数据库、用户

[iyunv@controller ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> CREATE DATABASE neutron;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
    -> IDENTIFIED BY 'neutron';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
    -> IDENTIFIED BY 'neutron';


## 添加 openstack 用户

[iyunv@controller ~]# openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 04b2950e0b96451494a4391c5c7bcd2e |
| name      | neutron                          |
+-----------+----------------------------------+


[iyunv@controller ~]# openstack role add --project service --user neutron admin



## 添加 neutron service

[iyunv@controller ~]# openstack service create --name neutron \
> --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | b9ca3cbea4df4966bbfff153e676d404 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+


## 添加 network server API

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> network public http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | e741a15b8f4f424d8ac605083d079911 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> network internal http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ba9df6bd296f4f42bd24588b292ed54b |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+


[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> network admin http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ba86430058a243da8c50ab9d42178eab |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | b9ca3cbea4df4966bbfff153e676d404 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+


## 安装配置 network 软件  ( 我这里选择的是 Networking Option 1: Provider networks  这种网络方式 )


[iyunv@controller ~]# yum install openstack-neutron openstack-neutron-ml2 \
> openstack-neutron-linuxbridge python-neutronclient ebtables ipset


## 修改配置文件 /etc/neutron/neutron.conf


[database]
...
connection = mysql://neutron:neutron@controller/neutron



[DEFAULT]
...
core_plugin = ml2
service_plugins =
rpc_backend = rabbit
auth_strategy = keystone
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
verbose = True


[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack



## 检查 [keystone_authtoken] 下面配置,注释掉其他所有的选项只使用下面

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron




[nova]
...
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = nova
password = nova



[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp



##  配置 Layer 2 (ML2) 插件

编辑 /etc/neutron/plugins/ml2/ml2_conf.ini  配置文件

[iyunv@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini


[ml2]
...
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security


[ml2_type_flat]
...
flat_networks = public



[securitygroup]
...
enable_ipset = True



## 配置Linux bridge

编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini  配置文件



[linux_bridge]
physical_interface_mappings = public:em2



[vxlan]
enable_vxlan = False



[agent]
...
prevent_arp_spoofing = True



[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver



## 配置 DHCP 服务

编辑 /etc/neutron/dhcp_agent.ini 配置文件


[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
verbose = True



## 配置 metadata 服务

编辑 /etc/neutron/metadata_agent.ini 配置文件  注释掉 [DEFAULT] 下面的选项,添加如下选项
[metadata_proxy_shared_secret = METADATA_SECRET   # METADATA_SECRET 替换为自己的密码 ]

[DEFAULT]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_region = RegionOne
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron
nova_metadata_ip = controller
metadata_proxy_shared_secret = metadata
verbose = True



## 配置 Networking 服务

编辑 /etc/nova/nova.conf 配置文件
[metadata_proxy_shared_secret = METADATA_SECRET   # METADATA_SECRET 替换为自己的密码 ]


[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron

service_metadata_proxy = True
metadata_proxy_shared_secret = metadata



## 创建一些链接

[iyunv@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini


## 同步数据库

[iyunv@controller ~]# 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


INFO  [alembic.runtime.migration] Context impl MySQLImpl.
........
  OK



## 重启 api 服务

[iyunv@controller ~]# systemctl restart openstack-nova-api.service


## 启动 network 服务


[iyunv@controller ~]# systemctl enable neutron-server.service \
> neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
> neutron-metadata-agent.service


[iyunv@controller ~]# systemctl start neutron-server.service \
> neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
> neutron-metadata-agent.service



## 配置 Compute 节点的 network 服务

## 安装 network 软件

[iyunv@computer1 ~]# yum install openstack-neutron openstack-neutron-linuxbridge ebtables ipset



## 编辑 /etc/neutron/neutron.conf 配置文件

注释掉 [database] 部分的所有选项,计算节点 不连接 数据库


[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
verbose = True


[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack



[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = neutron


注释掉 [keystone_authtoken]  其他部分的选项。


[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp



##  安装 network 服务

## 配置 Linux bridge 服务

编辑  /etc/neutron/plugins/ml2/linuxbridge_agent.ini 配置文件


[linux_bridge]
physical_interface_mappings = public:em2


[vxlan]
enable_vxlan = False


[agent]
...
prevent_arp_spoofing = True


[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver



## 配置 Networking 服务

## 编辑 /etc/nova/nova.conf 配置文件


[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron




## 配置链接, 并启动服务

[iyunv@computer1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
[iyunv@computer1 ~]# systemctl restart openstack-nova-compute.service
[iyunv@computer1 ~]# systemctl enable neutron-linuxbridge-agent.service
[iyunv@computer1 ~]# systemctl start neutron-linuxbridge-agent.service



## 最后 验证服务

[iyunv@controller ~]# source admin-openrc.sh

[iyunv@controller ~]# neutron ext-list
+-----------------------+--------------------------+
| alias                 | name                     |
+-----------------------+--------------------------+
| flavors               | Neutron Service Flavors  |
| security-group        | security-group           |
| dns-integration       | DNS Integration          |
| net-mtu               | Network MTU              |
| port-security         | Port Security            |
| binding               | Port Binding             |
| provider              | Provider Network         |
| agent                 | agent                    |
| quotas                | Quota management support |
| subnet_allocation     | Subnet Allocation        |
| dhcp_agent_scheduler  | DHCP Agent Scheduler     |
| rbac-policies         | RBAC Policies            |
| external-net          | Neutron external network |
| multi-provider        | Multi Provider Network   |
| allowed-address-pairs | Allowed Address Pairs    |
| extra_dhcp_opt        | Neutron Extra DHCP opts  |
+-----------------------+--------------------------+


[iyunv@controller ~]# neutron agent-list
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host       | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+
| 3083cb45-f248-4de5-828e-38d9bc961814 | Linux bridge agent | controller | :-)   | True           | neutron-linuxbridge-agent |
| 3b2564c7-e797-4e20-a257-166ade425655 | Linux bridge agent | computer1  | :-)   | True           | neutron-linuxbridge-agent |
| b61a8667-416d-4ed5-b14d-87d568bab59f | Metadata agent     | controller | :-)   | True           | neutron-metadata-agent    |
| f87d6cc0-4277-4259-96ed-638294503236 | DHCP agent         | controller | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+





六、安装配置 dashboard

[iyunv@controller ~]# yum install openstack-dashboard -y

## 编辑/etc/openstack-dashboard/local_settings 配置文件

[iyunv@controller ~]# vim /etc/openstack-dashboard/local_settings

OPENSTACK_HOST = "controller"

ALLOWED_HOSTS = ['*', ]

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': '127.0.0.1:11211',
    }
}


OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

TIME_ZONE = "Asia/Shanghai"


## 启动服务
[iyunv@controller ~]# systemctl enable httpd.service memcached.service

[iyunv@controller ~]# systemctl restart httpd.service memcached.service


## 验证服务

浏览器 访问 http://controller/dashboard

帐号密码为 admin




七、 安装配置 Block Storage service

控制端

## 添加数据库

[iyunv@controller ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> CREATE DATABASE cinder;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
    -> IDENTIFIED BY 'cinder';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
    -> IDENTIFIED BY 'cinder';


## 添加 openstack  cinder用户

[iyunv@controller ~]# source admin-openrc.sh

[iyunv@controller ~]# openstack user create --domain default --password-prompt cinder
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 212ced82b0a844f099a80a712786740c |
| name      | cinder                           |
+-----------+----------------------------------+


[iyunv@controller ~]# openstack role add --project service --user cinder admin


## 添加 cinder v2 service 服务

[iyunv@controller ~]# openstack service create --name cinder \
> --description "OpenStack Block Storage" volume
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 6af1b2a1843f42058b03368960ae6b09 |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+


[iyunv@controller ~]# openstack service create --name cinderv2 \
> --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 3e42f0d7868745579ce658d88eef4c67 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+


## 添加 Block Storage service API

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volume public http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 14ee6bd40f08489bb314e5cc5fa39a80        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volume internal http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 5895f13f971a4ee390ef104ddbe7422b        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volume admin http://controller:8776/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | e4993535c6504f95862cab4f7ab7cccb        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 6af1b2a1843f42058b03368960ae6b09        |
| service_name | cinder                                  |
| service_type | volume                                  |
| url          | http://controller:8776/v1/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 public http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 8696e7142c17488e973c653713c14379        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | da6b9e902a4d413dadd951ec751b1082        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> volumev2 admin http://controller:8776/v2/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 0cfa27d0a5b946e8b35901d242ac165f        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | 3e42f0d7868745579ce658d88eef4c67        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+



## 安装以及配置

[iyunv@controller ~]# yum install openstack-cinder python-cinderclient -y


## 编辑 /etc/cinder/cinder.conf 配置文件

[iyunv@controller ~]# vim /etc/cinder/cinder.conf



[database]
...
connection = mysql://cinder:cinder@controller/cinder



[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.11
verbose = True



[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack



注释掉 [keystone_authtoken] 其他部分的选项。添加如下内容:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder



[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp





## 同步数据库

[iyunv@controller ~]# su -s /bin/sh -c "cinder-manage db sync" cinder



## 编辑  /etc/nova/nova.conf 配置文件

[cinder]
os_region_name = RegionOne



## 启动服务

[iyunv@controller ~]# systemctl restart openstack-nova-api.service


[iyunv@controller ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[iyunv@controller ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service




## Storage 节点操作

## 安装软件
[iyunv@block1 ~]# yum install lvm2



## 启动 LVM2 服务
[iyunv@block1 ~]# systemctl enable lvm2-lvmetad.service
[iyunv@block1 ~]# systemctl start lvm2-lvmetad.service


## 创建分区

[iyunv@block1 ~]# fdisk -l

磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e0185

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   211814399   104857600   83  Linux
/dev/sda3       211814400   211830783        8192   82  Linux swap / Solaris


## 使用 parted 软件,查看分区
[iyunv@block1 ~]# parted /dev/sda
GNU Parted 3.1
使用 /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                               
Model: Dell Virtual Disk (scsi)
Disk /dev/sda: 600GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     标志
1      1049kB  1075MB  1074MB  primary  xfs             启动
2      1075MB  108GB   107GB   primary  xfs
3      108GB   108GB   8389kB  primary  linux-swap(v1)


## 使用 parted 软件, 创建分区

(parted) mkpart primary 108GB 208GB                                       
(parted) p                                                               
Model: Dell Virtual Disk (scsi)
Disk /dev/sda: 600GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     标志
1      1049kB  1075MB  1074MB  primary  xfs             启动
2      1075MB  108GB   107GB   primary  xfs
3      108GB   108GB   8389kB  primary  linux-swap(v1)
4      108GB   208GB   99.5GB  primary


[iyunv@block1 ~]# fdisk -l

磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e0185

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   211814399   104857600   83  Linux
/dev/sda3       211814400   211830783        8192   82  Linux swap / Solaris
/dev/sda4       211830784   406249471    97209344   83  Linux


[iyunv@block1 ~]# pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created


[iyunv@block1 ~]# vgcreate cinder-volumes /dev/sda4
  Volume group "cinder-volumes" successfully created


## 编辑 /etc/lvm/lvm.conf  配置文件,添加分区

devices {
...
filter = [ "a/sda4/", "r/.*/"]





## 安装 openstack 软件

[iyunv@block1 ~]# yum install openstack-cinder targetcli python-oslo-policy -y



## 编辑 /etc/cinder/cinder.conf 配置文件



[database]
...
connection = mysql://cinder:cinder@controller/cinder


[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 10.6.17.13
enabled_backends = lvm
glance_host = controller
verbose = True
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm


[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack



# 注释掉[keystone_authtoken]下其他所有的选项 只使用下面

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder




[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp




## 启动 服务

[iyunv@block1 ~]# systemctl enable openstack-cinder-volume.service target.service

[iyunv@block1 ~]# systemctl start openstack-cinder-volume.service target.service



## 验证服务

[iyunv@controller ~]# source admin-openrc.sh

[iyunv@controller ~]# cinder service-list
+------------------+------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |    Host    | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller | nova | enabled |   up  | 2015-12-04T07:35:57.000000 |        -        |
|  cinder-volume   | block1@lvm | nova | enabled |   up  | 2015-12-04T07:36:03.000000 |        -        |
+------------------+------------+------+---------+-------+----------------------------+-----------------+



八、 安装配置 Object Storage 服务


## 创建 openstack 帐号

[iyunv@controller ~]# openstack user create --domain default --password-prompt swift
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 7a2915af03464268ab80ef732aa5ba93 |
| name      | swift                            |
+-----------+----------------------------------+


[iyunv@controller ~]# openstack role add --project service --user swift admin


## 创建 swift service

[iyunv@controller ~]# openstack service create --name swift \
> --description "OpenStack Object Storage" object-store
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Object Storage         |
| enabled     | True                             |
| id          | f7b97bc04bd24d67b12694bb3004843b |
| name        | swift                            |
| type        | object-store                     |
+-------------+----------------------------------+


## 创建 Object Storage service API

[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | f8d7a017753947d981e0f42aa5fe4bde             |
| interface    | public                                       |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | f7b97bc04bd24d67b12694bb3004843b             |
| service_name | swift                                        |
| service_type | object-store                                 |
| url          | http://controller:8080/v1/AUTH_%(tenant_id)s |
+--------------+----------------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | 6d125e48860b4f948300b412f744b23f             |
| interface    | internal                                     |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | f7b97bc04bd24d67b12694bb3004843b             |
| service_name | swift                                        |
| service_type | object-store                                 |
| url          | http://controller:8080/v1/AUTH_%(tenant_id)s |
+--------------+----------------------------------------------+



[iyunv@controller ~]# openstack endpoint create --region RegionOne \
> object-store admin http://controller:8080/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | cdbea58743c946cca41c98682ea98793 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f7b97bc04bd24d67b12694bb3004843b |
| service_name | swift                            |
| service_type | object-store                     |
| url          | http://controller:8080/v1        |
+--------------+----------------------------------+



## 安装配置软件

[iyunv@controller ~]# yum install openstack-swift-proxy python-swiftclient \
> python-keystoneclient python-keystonemiddleware \
> memcached



## 下载swift配置文件

[iyunv@controller ~]# curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/o ... le?h=stable/liberty


##编辑 /etc/swift/proxy-server.conf 配置文件


[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift


[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server


[app:proxy-server]
use = egg:swift#proxy
...
account_autocreate = true


[filter:keystoneauth]
use = egg:swift#keystoneauth
...
operator_roles = admin,user


#注释掉[filter:authtoken] 其他所有的选项只使用下面

[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = swift
delay_auth_decision = true



[filter:cache]
use = egg:swift#memcache
...
memcache_servers = 127.0.0.1:11211



## Object storage 节点配置

## 安装配置软件

[iyunv@object1 ~]# yum install xfsprogs rsync -y


[iyunv@object1 ~]# fdisk -l

磁盘 /dev/sda:599.6 GB, 599550590976 字节,1170997248 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bbc86

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   204802047   102400000   83  Linux
/dev/sda2       204802048   221186047     8192000   82  Linux swap / Solaris
/dev/sda3       221186048   611327999   195070976   83  Linux
/dev/sda4       611328000  1170997247   279834624   83  Linux


[iyunv@object1 ~]# mkfs.xfs -f /dev/sda3
[iyunv@object1 ~]# mkfs.xfs -f /dev/sda4

[iyunv@object1 ~]# mkdir -p /opt/node/sda3
[iyunv@object1 ~]# mkdir -p /opt/node/sda4


## 编辑 /etc/fstab  让系统启动自动加载

/dev/sda3 /opt/node/sda3 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sda4 /opt/node/sda4 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2


## 挂载硬盘
[iyunv@object1 ~]# mount -a



[iyunv@object1 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        98G  1.2G   97G    2% /
devtmpfs        7.8G     0  7.8G    0% /dev
tmpfs           7.8G     0  7.8G    0% /dev/shm
tmpfs           7.8G  8.4M  7.8G    1% /run
tmpfs           7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/sda3       186G   33M  186G    1% /opt/node/sda3
/dev/sda4       267G   33M  267G    1% /opt/node/sda4




## 编辑 /etc/rsyncd.conf 配置文件

[iyunv@object1 ~]# vim /etc/rsyncd.conf

--------------------------------------------------------
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 10.6.17.14

[account]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/account.lock

[container]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/container.lock

[object]
max connections = 2
path = /opt/node/
read only = false
lock file = /var/lock/object.lock

--------------------------------------------------------




## 启动服务

[iyunv@object1 ~]# systemctl enable rsyncd.service
[iyunv@object1 ~]# systemctl start rsyncd.service



## 安装配置软件
[iyunv@object1 ~]# yum install openstack-swift-account openstack-swift-container \
> openstack-swift-object


## 下载配置文件
[iyunv@object1 ~]# curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/o ... le?h=stable/liberty

[iyunv@object1 ~]# curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/o ... le?h=stable/liberty

[iyunv@object1 ~]# curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/o ... le?h=stable/liberty


## 编辑/etc/swift/account-server.conf 配置文件


[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6002
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true


[pipeline:main]
pipeline = healthcheck recon account-server


[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift




## 编辑/etc/swift/container-server.conf 配置文件


[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true



[pipeline:main]
pipeline = healthcheck recon container-server



[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift





## 编辑/etc/swift/object-server.conf 配置文件


[DEFAULT]
...
bind_ip = 10.6.17.14
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /opt/node
mount_check = true


[pipeline:main]
pipeline = healthcheck recon object-server


[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock



## 授权目录

[iyunv@object1 ~]# chown -R swift:swift /opt/node



## 创建 swift 缓存 目录 cache/swift

[iyunv@object1 ~]# mkdir -p /var/cache/swift
[iyunv@object1 ~]# chown -R swift:swift /var/cache/swift



## 在controller 上创建 ring 帐号


## 创建 account.builder 文件

[iyunv@controller ~]# cd /etc/swift/

[iyunv@controller swift]# swift-ring-builder account.builder create 10 2 1





## 添加 object 节点

[iyunv@controller swift]# swift-ring-builder account.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6002 --device sda3 --weight 100

输出:
Device d0r1z1-10.6.17.14:6002R10.6.17.14:6002/sda3_"" with 100.0 weight got id 0


[iyunv@controller swift]# swift-ring-builder account.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6002 --device sda4 --weight 100

输出:
Device d1r1z2-10.6.17.14:6002R10.6.17.14:6002/sda4_"" with 100.0 weight got id 1



## 验证ring

[iyunv@controller swift]# swift-ring-builder account.builder

account.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6002      10.6.17.14              6002      sda3 100.00          0 -100.00
             1       1     2      10.6.17.14  6002      10.6.17.14              6002      sda4 100.00          0 -100.00


# 平衡 ring
[iyunv@controller swift]# swift-ring-builder account.builder rebalance

.......
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00




## 创建容器 ring


[iyunv@controller ~]# cd /etc/swift/

[iyunv@controller swift]# swift-ring-builder container.builder create 10 2 1



## 创建存储节点ring

[iyunv@controller swift]# swift-ring-builder container.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6001 --device sda3 --weight 100

输出:
Device d0r1z1-10.6.17.14:6001R10.6.17.14:6001/sda3_"" with 100.0 weight got id 0





[iyunv@controller swift]# swift-ring-builder container.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6001 --device sda4 --weight 100

输出:
Device d1r1z2-10.6.17.14:6001R10.6.17.14:6001/sda4_"" with 100.0 weight got id 1



## 验证容器 ring

[iyunv@controller swift]# swift-ring-builder container.builder

container.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6001      10.6.17.14              6001      sda3 100.00          0 -100.00
             1       1     2      10.6.17.14  6001      10.6.17.14              6001      sda4 100.00          0 -100.00


# 平衡 容器 ring
[iyunv@controller swift]# swift-ring-builder container.builder rebalance

....
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00




## 创建 object ring

[iyunv@controller ~]# cd /etc/swift/

[iyunv@controller swift]# swift-ring-builder object.builder create 10 2 1

[iyunv@controller swift]# swift-ring-builder object.builder add \
> --region 1 --zone 1 --ip 10.6.17.14 --port 6001 --device sda3 --weight 100


输出:
Device d0r1z1-10.6.17.14:6001R10.6.17.14:6001/sda3_"" with 100.0 weight got id 0





[iyunv@controller swift]# swift-ring-builder object.builder add \
> --region 1 --zone 2 --ip 10.6.17.14 --port 6001 --device sda4 --weight 100


输出:
Device d1r1z2-10.6.17.14:6001R10.6.17.14:6001/sda4_"" with 100.0 weight got id 1




## 验证 object ring

[iyunv@controller swift]# swift-ring-builder object.builder

object.builder, build version 2
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1
The overload factor is 0.00% (0.000000)
Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta
             0       1     1      10.6.17.14  6001      10.6.17.14              6001      sda3 100.00          0 -100.00
             1       1     2      10.6.17.14  6001      10.6.17.14              6001      sda4 100.00          0 -100.00





## 平衡 object ring

[iyunv@controller swift]# swift-ring-builder object.builder rebalance

...
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00



## 查看生成的文件

[iyunv@controller swift]# ls
account.builder  backups            container-reconciler.conf  container-server       object.builder       object.ring.gz  proxy-server.conf
account.ring.gz  container.builder  container.ring.gz          container-server.conf  object-expirer.conf  proxy-server    swift.conf



## 复制 account.ring.gz  container.ring.gz    object.ring.gz  到 其他 运行 代理服务 的节点/etc/swift 目录中  ,然后启动 openstack-swift-proxy.service 服务





## Object Storage 下载 swift.conf 配置文件

[iyunv@object1 swift]# curl -o /etc/swift/swift.conf \
> https://git.openstack.org/cgit/o ... le?h=stable/liberty



## 编辑 /etc/swift/swift.conf 配置文件

[iyunv@object1 swift]# vim /etc/swift/swift.conf



[swift-hash]
...
swift_hash_path_suffix = changeme
swift_hash_path_prefix = changeme


[storage-policy:0]
...
name = Policy-0
default = yes




## 授权 目录

[iyunv@object1 swift]# chown -R root:swift /etc/swift




## 在controller 以及 其他代理节点中 启动 代理服务


[iyunv@controller ~]# systemctl enable openstack-swift-proxy.service memcached.service

[iyunv@controller ~]# systemctl start openstack-swift-proxy.service memcached.service



## 在 Object Storage 节点中 启动服务

[iyunv@object1 ~]# systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service \
> openstack-swift-account-reaper.service openstack-swift-account-replicator.service


[iyunv@object1 ~]# systemctl start openstack-swift-account.service openstack-swift-account-auditor.service \
> openstack-swift-account-reaper.service openstack-swift-account-replicator.service


[iyunv@object1 ~]# systemctl enable openstack-swift-container.service \
> openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
> openstack-swift-container-updater.service


[iyunv@object1 ~]# systemctl start openstack-swift-container.service \
> openstack-swift-container-auditor.service openstack-swift-container-replicator.service \
> openstack-swift-container-updater.service



[iyunv@object1 ~]# systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service \
> openstack-swift-object-replicator.service openstack-swift-object-updater.service

[iyunv@object1 ~]# systemctl start openstack-swift-object.service openstack-swift-object-auditor.service \
> openstack-swift-object-replicator.service openstack-swift-object-updater.service




## 验证服务

[iyunv@controller ~]# echo "export OS_AUTH_VERSION=3" \
> | tee -a admin-openrc.sh

[iyunv@controller ~]# source admin-openrc.sh


## 查看 swift 状态

[iyunv@controller ~]# swift stat


        Account: AUTH_0d1a69b17e444cb3b4884529b6bdb372
     Containers: 0
        Objects: 0
          Bytes: 0
X-Put-Timestamp: 1449222121.42343
    X-Timestamp: 1449222121.42343
     X-Trans-Id: tx20d0064672a74cd88723f-0056615fe9
   Content-Type: text/plain; charset=utf-8




## 测试 上传 文件

[iyunv@controller ~]# touch FILE


[iyunv@controller ~]# swift upload container1 FILE

                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-148615-1-1.html 上篇帖子: centos 7 安装openstack kilo in three node 下篇帖子: openstack devstack Bad md5 hash for package
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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