seemebaby 发表于 2018-5-31 09:04:45

手把手教你安装OpenStack——Ocata安装指南(上)

  本文参考:https://docs.openstack.org/ocata/install-guide-rdo/index.html官方文档来手把手教你安装Ocata,安装文档中有漏洞的地方,本文都会提及。本指南不会给出所有命令的输出结果,只给出部分必要的解释,因此在安装时最好对照着官方文档进行。
  本文目录:

[*]  安装环境
[*]  认证服务
[*]  镜像服务
[*]  计算服务
[*]  网络服务
[*]  Dashboard
  一、安装环境 1、示例架构
  根据官方文档,本文架构采用一个控制节点和一个计算节点。
  (The example architecture requires at least twonodes (hosts) to launch a basic virtual machine or instance. )
  控制节点运行认证服务、镜像服务、计算服务的管理部分、网络服务的管理部分、各种网络代理以及Dashboard,还包括一些基础服务如数据库、消息队列以及NTP。
  计算节点上运行计算服务中管理实例的管理程序部分。默认情况下,计算服务使用 KVM。还运行网络代理服务,用来连接实例和虚拟网络以及通过安全组给实例提供防火墙服务。
  2、网络

[*]  公有网络
  公有网络选项以尽可能简单的方式通过layer-2(网桥/交换机)服务以及VLAN网络的分割来部署OpenStack网络服务。实际上,它将虚拟网络桥接到物理网络,并依靠物理网络基础设施提供layer-3服务(路由)。另外,DHCP服务为实例提供IP地址。

[*]  私有网络
  私有网络选项扩展了公有网络选项,增加了layer-3(路由)服务,使用VXLAN类似的方式。本质上,它使用NAT路由虚拟网络到物理网络。另外,这个选项也提供高级服务的基础,比如LBaas和FWaaS。
  这里我们选择私有网络。
  3、安全
  下面是各个需要密码的服务以及解释,建议这些密码使用同一个,以免混淆。

  4、主机网络配置
  控制节点

[*]  配置网络接口
  Controller:IP:192.168.0.112/24 GATEWAY:192.168.0.1
  网络配置完之后需要将防火墙和selinux关闭。

[*]  关闭防火墙:
  systemctl stop firewalld.service


[*]  禁止防火墙开机启动
  systemctl disable firewalld.service


[*]  关闭selinux
  vim /etc/selinux/config,配置selinux=disabled
  # setenforce 0,使配置立即生效


[*]  配置地址解析
  编辑/etc/hosts
  # controller
  192.168.0.112 controller
  # compute1
  192.168.0.113 compute1
  计算节点

[*]  配置网络接口。
  Compute:IP:192.168.0.113/24 GATEWAY:192.168.0.1
  同样需要配置地址解析,参考控制节点。
  配置完成之后需要进行验证:

[*]  与外网连通性:
  分别在控制节点和计算节点上:
  # ping -c 4 www.baidu.com


[*]  控制节点和计算节点连通性:
  控制节点上输入# ping -c 4 compute1
  计算节点上输入# ping -c 4 controller
  5、NTP
  控制节点

[*]  安装相关包
  # yum install chrony


[*]  编辑 /etc/chrony.conf
  server NTP_SERVER iburst
  可以根据需要将NTP_SERVER替换为合适的NTP服务器,建议不用改。然后添加:
  allow 192.168.0.0/24
  即允许计算节点同步。(计算节点IP网段属于192.168.0.0)
  # systemctl enable chronyd.service
  # systemctl start chronyd.service
  启动服务。
  计算节点
  编辑/etc/chrony.conf,可以将其他的几个同步地址注释掉。
  server controller iburst
  同步控制节点。
  # systemctl enable chronyd.service
  # systemctl start chronyd.service
  启动服务。(如果发现同步的不是控制节点,那么重启一下NTP服务即可。)
  # systemctl restart chronyd.service
  验证操作:
  在控制节点上同步时间。
  # chronyc sources
  带星号的是NTP当前同步的地址。
  计算节点上同步。
  # chronycsources
  210 Number of sources = 1
  MS Name/IP address
  Stratum Poll Reach LastRx Last sample
  ======================================================
  ^* controller 3 9 377 421 +15us[ -87us] +/- 15ms
   6、安装OpenStack包
  以下操作在所有节点上进行。

[*]  启用OpenStack库:
  # yum install centos-release-openstack-ocata


[*]  完成安装
  1)在所有节点上升级包
# yum upgrade   2)安装OpenStack 客户端
  # yum install python-openstackclient
  3)CentOS默认启用了SELinux,安装openstack-selinux来自动管理OpenStack服务的安全策略。
  # yum install openstack-selinux
  
  7、安装数据库
  数据库一般运行在控制节点上。
  安装并配置组件。

[*]  安装相关包。
  # yum install mariadb mariadb-server python2-PyMySQL
  创建并编辑/etc/my.cnf.d/openstack.cnf 文件,并完成以下操作。在配置文件中添加以下配置:
  
  bind-address=192.168.0.112
  default-storage-engine=innodb
  innodb_file_per_table=on
  max_connections=4096
  collation-server=utf8_general_ci
  character-set-server=utf8
  其中bind-address为控制节点IP地址。

[*]  完成安装
  1)启动数据库并设置开机启动
  # systemctl enable mariadb.service
  # systemctl start mariadb.service
  2)运行mysql_secure_installation脚本来保证数据库安全,为root账户设置一个合适的密码
  # mysql_secure_installation
  
  8、消息队列
  OpenStack使用消息队列来协调服务之间的状态和操作,消息队列服务一般运行在控制节点上。,OpenStack支持RabbitMQ,Qpid以及ZeroMQ等消息队列服务。本指南使用RabbitMQ消息队列服务。

[*]  安装相关包
  # yum 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

[*]  允许openstack用户的配置、写、读权限
  
  #rabbitmqctl set_permissions openstack ".*" ".*" ".*"
  Setting permissions for user "openstack" in vhost "/" ...
  9、缓存令牌
  认证服务的认证机制使用Memcached来缓存令牌,一般运行在控制节点上。

[*]  安装相关包
  # yum install memcached python-memcached
  编辑 /etc/sysconfig/memcached文件并配置IP地址,将127.0.0.1改为控制节点IP。

[*]  完成安装
  启动 Memcached服务并设置开机启动。
  # systemctl enable memcached.service
  # systemctl start memcached.service
  二、认证服务
  在 控制节点上配置。 1、前提条件

[*]  创建数据库
  以root身份登录数据库
$ mysql -u root -p   创建keystone数据库
  MariaDB[(none)]> CREATE DATABASE keystone;
  给数据库赋予适当的权限;
  MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'localhost'
  IDENTIFIED BY 'KEYSTONE_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'%'
  IDENTIFIED BY 'KEYSTONE_DBPASS';
  用合适的密码替换KEYSTONE_DBPASS
  2、安装并配置组件

[*]  运行命令安装相关包
  # yum install openstack-keystone httpd mod_wsgi
  编辑文件/etc/keystone/keystone.conf
  在选项配置数据库连接
  
  # ...
  connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
  替换掉KEYSTONE_DBPASS
  在选项中,配置,Fernet令牌提供者:
  
  # ...
  provider=fernet


[*]  同步认证服务数据库
  # su -s/bin/sh -c "keystone-manage db_sync" keystone


[*]  初始化Fernetkey仓库
  # keystone-manage fernet_setup --keystone-user keystone --keystone-
  groupkeystone
  # keystone-manage credential_setup --keystone-user keystone--keystone-groupkeystone


[*]  引导认证服务
  # keystone-manage bootstrap --bootstrap-password ADMIN_PASS
  --bootstrap-admin-urlhttp://controller:35357/v3/
  --bootstrap-internal-urlhttp://controller:5000/v3/
  --bootstrap-public-urlhttp://controller:5000/v3/
  --bootstrap-region-id RegionOne
  替换掉ADMIN_PASS

[*]  配置Apache服务器

[*]  编辑/etc/httpd/conf/httpd.conf并配置ServerName选项,使之参考控制节点
[*]  给/usr/share/keystone/wsgi-keystone.conf文件创建一个链接
  # ln -s/usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/


[*]  完成安装
  1.启动Apache服务器并设置开机启动
  # systemctlenable httpd.service
  # systemctl start httpd.service
  2.配置管理账户
  $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:35357/v3
  $export OS_IDENTITY_API_VERSION=3
  3、创建一个域、项目、用户和角色

[*]  本指南有一个service 项目,你添加的每一个服务都有唯一的用户。
  $ openstack project create --domain default
  --deion "Service Project"service


[*]  普通的任务不应该使用具有特权的项目和用户。作为示例,本指南创建一个demo项目和用户。
  1、创建demo项目:
  $ openstack project create --domain default
  --deion "Demo Project"demo
  2、创建demo用户:
  $ openstack user create --domain default
  --password-prompt demo
  3、创建user角色:
  $ openstack role create user
  4、将user角色添加到demo项目和用户中。
  $ openstack role add --project demo --user demo user
  4、验证操作

[*]  出于安全性的原因,禁用掉暂时的认证令牌机制。
  编辑/etc/keystone/keystone-paste.ini文件,并从, , 和选项中删除admin_token_auth


[*]  取消设置临时的OS_AUTH_URL和OS_PASSWORD环境变量:
  $unset OS_AUTH_URL OS_PASSWORD


[*]  使用admin用户,请求一个认证令牌;
  $ openstack --os-auth-url http://controller:35357/v3
  --os-project-domain-name default--os-user-domain-name default
  --os-project-name admin --os-username admintoken issue
  这里遇到错误

  由于是Http错误,所以返回Apache HTTP 服务配置的地方,重启Apache 服务,并重新设置管理账户:
  # systemctlrestart httpd.service
  $ 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:35357/v3
  $ export OS_IDENTITY_API_VERSION=3

  错误解决!

[*]  使用demo用户,请求认证令牌:
  $ openstack--os-auth-url http://controller:5000/v3
  --os-project-domain-namedefault --os-user-domain-name default
  --os-project-namedemo --os-username demo token issue
  Password:
  密码为创建demo用户时的密码。
  5、创建OpenStack客户端环境脚本:
  在前面章节中,我们使用环境变量和命令的组合来配置认证服务,为了更加高效和方便,我们创建一个脚本方便以后的操作。这些脚本包括一些公共的操作,但是也支持自定义的操作。

[*]  创建脚本
  创建并编辑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=root
  export OS_AUTH_URL=http://controller:35357/v3
  export OS_IDENTITY_API_VERSION=3
  export OS_IMAGE_API_VERSION=2
  替换掉OS_PASSWORD的密码。
  创建并编辑demo-openrc文件,并添加以下内容:
  export OS_PROJECT_DOMAIN_NAME=Default
  export OS_USER_DOMAIN_NAME=Default
  export OS_PROJECT_NAME=demo
  export OS_USERNAME=demo
  export OS_PASSWORD=DEMO_PASS
  export OS_AUTH_URL=http://controller:5000/v3
  export OS_IDENTITY_API_VERSION=3
  export OS_IMAGE_API_VERSION=2


[*]  使用脚本
  加载脚本文件更新环境变量:
  $ . admin-openrc
  请求一个认证令牌;
  $ openstack token issue
  三、镜像服务
  1、前提条件

[*]  创建数据库
  连接数据库,使用root登录。
  $ mysql -u root -p
  创建 glance 数据库
  MariaDB [(none)]> CREATE DATABASEglance;
  赋予权限:
  MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'localhost'
  IDENTIFIED BY 'GLANCE_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'%'
  IDENTIFIED BY 'GLANCE_DBPASS';
  替换GLANCE_DBPASS为合适的密码;
  退出数据库连接。

[*]  导入admin证书来获取只有admin才能执行的命令行权限;
  $ . admin-openrc


[*]  创建服务认证:
  创建glance用户
  $ openstack user create --domain default --password-prompt glance
  添加管理员角色到glance用户和service项目中:
  $ openstack role add --project service --user glance admin


[*]  创建glance服务实体
  创建镜像服务API端口:
  $ openstack endpoint create --region RegionOne
  imagepublic http://controller:9292
  $ openstack endpoint create --region RegionOne
  image internal http://controller:9292
  $ openstack endpoint create --region RegionOne
  image admin http://controller:9292
  2、安装并配置组件

[*]  安装相关包:
  # yum install openstack-glance


[*]  编辑/etc/glance/glance-api.conf文件,完成以下操作;
  在和选项中,配置认证服务权限:
  
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=glance
  password=GLANCE_PASS
  
  # ...
  flavor=keystone
  替换掉GLANCE_PASS密码。删除或注释掉其他参数。
  在选项中,配置本地文件系统存储和镜像文件位置。
  
  # ...
  stores=file,http
  default_store=file
  filesystem_store_datadir=/var/lib/glance/images/
  编辑/etc/glance/glance-registry.conf文件,并完成以下操作:
  在选项中,配置数据库权限:
  
  # ...
  connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
  替换掉 GLANCE_DBPASS密码。
  在和选项中,配置认证服务权限:
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=glance
  password=GLANCE_PASS
  
  # ...
  flavor=keystone
  替换掉GLANCE_DBPASS密码。
  4、更新镜像服务数据库
  完成安装

[*]  启动镜像服务并设置开机启动。
  # systemctl enable openstack-glance-api.service
  openstack-glance-registry.service
  # systemctl start openstack-glance-api.service
  openstack-glance-registry.service
  5、验证操作

[*]  获取admin权限
  $ . admin-openrc


[*]  下载源镜像
  $ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img


[*]  上传镜像
  $ openstack image create "cirros"
  --file cirros-0.3.4-x86_64-disk.img
  --disk-format qcow2 --container-format bare
  --public


[*]  验证上传镜像:
  openstack image list
  四、计算服务 1、安装和配置控制节点

[*]  准备条件
  创建数据库,与之前步骤类似,这里不再详细列出
  $ mysql -u root -p
  MariaDB [(none)]> CREATE DATABASEnova_api;
  MariaDB [(none)]> CREATE DATABASE nova;
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'localhost'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'%'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'localhost'
  IDENTIFIED BY 'NOVA_DBPASS';
  MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'%'
  IDENTIFIED BY 'NOVA_DBPASS';


[*]  获取admin权限:
  $ . admin-openrc
  创建nova用户
  $ openstack user create --domain default
  --password-prompt nova
  设置合适的密码
  向nova用户中添加admin角色。
  $ openstack role add --project service --user nova admin
  创建nova服务实体
  $ openstack service create --name nova
  --deion "OpenStack Compute" compute
  2、创建计算服务API端口
  $ openstack endpoint create --region RegionOne
  compute public http://controller:8774/v2.1/%(tenant_id)s
  $ openstack endpoint create --region RegionOne
  compute internal http://controller:8774/v2.1/%(tenant_id)s
  $ openstack endpoint create --region RegionOne
  compute admin http://controller:8774/v2.1/%(tenant_id)s


[*]  安装并配置组件
  安装相关包
  # yum install openstack-nova-api openstack-nova-conductor
  openstack-nova-console openstack-nova-novncproxy
  openstack-nova-scheduler


[*]  编辑 /etc/nova/nova.conf文件
  在选项中,开启计算和元数据API
  
  # ...
  enabled_apis=osapi_compute,metadata
  在 和选项中,配置数据库连接
  
  # ...
  connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
  
  # ...
  connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova
  替换NOVA_DBPASS密码。
  在选项中,配置消息队列连接。
  
  # ...
  transport_url=rabbit://openstack:RABBIT_PASS@controller
  替换掉RABBIT_PASS
  在和选项中,
  
  # ...
  auth_strategy=keystone
  
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=nova
  password=NOVA_PASS
  替换掉NOVA_PASS
  在选项中,配置my_ip
  
  # ...
  my_ip=10.0.0.11
  开启对网络服务的支持
  
  # ...
  use_neutron=True
  firewall_driver=nova.virt.firewall.NoopFirewallDriver
  在选项中,配置VNC代理
  
  enabled=true
  # ...
  vncserver_listen=$my_ip
  vncserver_proxyclient_address=$my_ip
  在选项中,配置镜像服务API的位置。
  
  # ...
  api_servers=http://controller:9292
  在选项中,配置锁定路径
  
  # ...
  lock_path=/var/lib/nova/tmp
  更新数据库
  #su -s /bin/sh -c"nova-manage api_db sync"nova
  #su -s /bin/sh -c "nova-manage db sync"nova


[*]  完成安装
  开启计算服务并设置开机启动;
  # systemctl enable openstack-nova-api.service
  openstack-nova-consoleauth.service openstack-nova-scheduler.service
  openstack-nova-conductor.service openstack-nova-novncproxy.service
  # systemctl start openstack-nova-api.service
  openstack-nova-consoleauth.service openstack-nova-scheduler.service
  openstack-nova-conductor.service openstack-nova-novncproxy.service
  3、安装并配置计算节点

[*]  安装并配置组件
  安装相关包
  # yum install openstack-nova-compute
  编辑/etc/nova/nova.conf文件
  在选项中,开启计算和元数据API
  
  # ...
  enabled_apis=osapi_compute,metadata
  在选项中,配置消息队列权限
  
  # ...
  transport_url=rabbit://openstack:RABBIT_PASS@controller
  替换掉RABBIT_PASS
  在和选项中,配置认证服务权限
  
  # ...
  auth_strategy=keystone
  
  # ...
  auth_uri=http://controller:5000
  auth_url=http://controller:35357
  memcached_servers=controller:11211
  auth_type=password
  project_domain_name=default
  user_domain_name=default
  project_name=service
  username=nova
  password=NOVA_PASS
  替换掉NOVA_PASS
  在选项中,配置my_ip参数
  
  # ...
  my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
  替换MANAGEMENT_INTERFACE_IP_ADDRESS为计算节点IP
  在选项中,开启网络服务支持
  
  # ...
  use_neutron=True
  firewall_driver=nova.virt.firewall.NoopFirewallDriver
  在选项中,开启并配置远程控制台权限
  
  # ...
  enabled=True
  vncserver_listen=0.0.0.0
  vncserver_proxyclient_address=$my_ip
  novncproxy_base_url=http://controller:6080/vnc_auto.html
  在选项中,配置镜像服务API地址
  
  # ...
  api_servers=http://controller:9292
  在选项,配置锁定路径
  
  # ...
  lock_path=/var/lib/nova/tmp
  4、完成安装

[*]  检查你的计算节点是否支持硬件虚拟化
  $ egrep -c '(vmx|svm)' /proc/cpuinfo
  如果输出值大于等于1,那么不需要配置,否则,需要做一下配置
  编辑/etc/nova/nova.conf文件,配置
  
  # ...
  virt_type=qemu


[*]  开启计算服务并设置开机启动
  # systemctl enable libvirtd.serviceopenstack-nova-compute.service
  # systemctl start libvirtd.service openstack-nova-compute.service


[*]  验证操作
  在控制节点上进行操作。
  获取admin权限
  $ . admin-openrc
  列出服务组件来验证每个组件都成功运行了
  $ openstack compute service list
  这里遇到问题:发现计算节点上服务没有启动


  查看计算节点日志:/var/log/nova/nova-compute.log发现

  里面提到需要配置placement,而官方文档并没有提到这一点。解决办法是安装openstack-nova-placement-api,并配置相关选项。
  在控制节点上,然后创建用户把用户placement添加到项目中去并创建placement类型的服务目录:


  最终创建端口:
  openstack endpoint create --regionRegionOne placement public http://192.168.0.112:8778
  openstack endpoint create --regionRegionOne placement admin http://192.168.0.112:8778
  openstack endpoint create --regionRegionOne placement intenal http://192.168.0.112:8778
  在计算节点上编辑文件:/etc/nova/nova.conf
  在placement选项中添加:
  auth_uri = http://controller:5000
  auth_url = http://controller:35357
  memcached_servers = controller:11211
  auth_type = password
  project_domain_name = default
  user_domain_name = default
  project_name = service
  username = nova
  password = root
  os_region_name = RegionOne
  替换掉password,重启计算服务:
  # systemctl restartopenstack-nova-compute.service
  可以看到服务已经启动:

  控制节点上也显示正常:

  在此参考了
  http://superbigsea.blog.51cto.com/6862263/1901216,特别感谢!
  下面接着验证操作:
  3、列出认证服务中的API端口以检查连通性
  $ openstack catalog list

  4、列出镜像服务中的镜像以验证连通性;
  $ openstack image list

  
页: [1]
查看完整版本: 手把手教你安装OpenStack——Ocata安装指南(上)