OpenStack 学习笔记

作者: 糯米藕 | 来源:发表于2017-08-10 19:19 被阅读409次

    OpenStack简介

    OpenStack版本发展

    OpenStack版本系列字母以A~Z命名,从2010年发布的第一个版本"Austin"到当前稳定版本"ocata"一共经历了15个版本,第16个版本"pike"正在开发中。

    官网图片.png

    这七年中OpenStack在不断的更新迭代,虽然还未完全歩入商用化,但是已经受到很多厂商的青睐,很多厂商基于OpenStack做公有云或私有云的云计算操作系统。容器的出现为OpenStack的发展又加了一管血,OpenStack与容器协作可以有效提高开发团队的速度和效率,尤其是在OpenStack私有云环境中。随着容器与OpenStack结合,容器的应用范围将会进一步扩大,另一方面容器也将会对OpenStack市场深化产生助推作用。

    OpenStack架构

    OpenStack 是一个开源云计算操作系统,通过一个数据中心管理大量的计算、存储、网络资源。管理员通过dashboard高效地管控这些资源,用户则通过web接口使用这些资源。


    官网图片.png

    OpenStack支持多种类型的云环境,试图打造一个部署简单、操作灵活、可大规模扩展、标准统一的云计算管理平台。OpenStack通过各种各样的服务灵活地提供基础设施即服务(IaaS)解决方案,并且每种服务都提供了API接口以便更加灵活的集成。OpenStack的服务主要包括:

    • dashboard
      a) horizon:提供了一个基于web的自服务门户,与OpenStack底层服务交互,用户无需通过命令,直接在dashboard界面上就能够完成创建实例、分配IP地址以及配置访问控制等操作。

    • 计算服务
      a) nova:在OpenStack环境中计算实例的生命周期管理。按需响应完成生成、调度、回收虚拟机等操作。除了管理虚拟机外还可以管理网络,如分配网络地址、vlan和隔离等。

    • 网络服务
      a) neutron:neutron之前被称为quantum,主要负责为其它OpenStack服务提供网络连接即服务,neutron基于插件架构因此可以支持众多的网络提供商和技术。基于neutron服务,用户可以在openstack上建立负载平衡、VPN、route、配置网络地址和网段等。

    • 存储服务:
      a) 对象存储swift: swift的实现方式像是一个文件服务器需要挂载目录,在这样的方式下,swift将对象和文件写到多个存储装置中。swift上存储的一般是图片、文字和多媒体等,基于数据复制和可扩展架构的swift具有很高的容错性,当一台存储装置故障时,其他存储装置中仍然保留着资料。
      b) 块存储cinder:为运行实例而提供的持久性块存储。可插拔驱动的架构有助于创建和管理块存储设备。管理员可以通过cinder创建volume、创建虚拟机快照等。

    • 共享服务:
      a) identity(keystone):为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。keystone本身无法提供身份验证,但是可以集成各种其他目录服务实现多种形式的身份验证。
      b) image(glance):存储和检索虚拟机磁盘镜像,OpenStack计算服务会在部署实例时使用glance服务。
      c) telemetry:为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。

    • 高层次服务:
      a) 编排:Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持:term:HOT <Heat Orchestration Template (HOT)>格式模板或者AWS CloudFormation格式模板。

    OpenStack架构图如下所示:

    官网图片.png
    • 位于最上面的dashboard是图形用户界面,底层服务提供ui接口给dashboard,dashboard可以与底层服务交互从而为用户提供web自服务。
    1. network不仅向dashboard提供ui,还需要为compute服务提供网络连接。
    2. compute被认为是OpenStack的核心,负责处理工作负载流程。compute服务不仅依赖network服务为其提供网络连接,还需要block存储服务提供volumes。此外compute服务会将镜像存储在镜像服务中。
    3. image服务负责存储和检索虚拟机磁盘镜像,compute服务会将镜像存储在image中,并且需要依赖image中的镜像部署vm。
    4. image将disk文件存储在object存储中,vm通过restful API将对象数据存储在swift中,cinder也可以将volumes备份到swift中。
    5. block存储为compute服务提供volumes, 在VM看来block存储提供的volume就像是虚拟硬盘,可以用来存储数据
    6. identity为所有服务提供认证和权限管理,简而言之,OpenStack上的每一个操作都需要通过keystone的审核。

    OpenStack Ocata版本安装

    1 安装环境

    从官网文档获悉,安装一套openstack环境至少需要两台虚拟机,一台作为controller节点,一台作为compute节点,block存储节点和object节点可以选择性安装。本次仅安装controller节点和compute节点。


    官网图片.png

    即使是搭建概念验证环境,OpenStack也对环境有一定的要求,最低标准如下所示:

    • Controller Node: 1 processor, 4 GB memory, and 5 GB storage
    • Compute Node: 1 processor, 2 GB memory, and 10 GB storage

    2 安装准备

    2.1 设置hostname

    1. 编辑控制节点上的/etc/hosts文件,修改控制器节点的hostname。
    2. 编辑计算节点上的/etc/hosts文件,修改计算节点的hostname。

    2.2 设置网络接口

    1、将控制节点上的第二个网口设置为provide interface,无需为其分配IP。编辑/etc/network/interface文件,添加下面内容后重启控制节点。

      auto ens192(第二块网口名称)
      iface ens192 inet manual
      up ip link set dev $IFACE up
      down ip set dev $IFACE down
    

    2、将计算节点上的第二个网口设置为provide interface,具体操作与上面相同。

    2.3 网络时间协议NTP

    在各个节点上安装chrony,确保各个节点能够准确同步服务。
    控制节点
    1、安装chrony

    apt install chrony
    

    2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:

    server NTP_SERVER iburst
    allowe 172.171.0.0/24(计算节点网段) 
    

    3、重启NTP服务

    service chrony restart  
    

    计算节点
    1、安装chrony

    apt install chrony
    

    2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:

    server NTP_SERVER iburst
    

    注释下述内容 :

    pool 2.debian.pool.ntp.org  iburst
    

    3、重启NTP服务

    service chrony restart  
    

    验证
    1、在控制节点上执行下述命令,结果中带星号的是NTP当前同步的地址。

    chronyc sources
    

    2、 在计算节点上执行下述命令,结果中“Name/IP address”一栏显示的应该是控制节点的hostname。

    chronyc sources
    

    2.4 启用openstack库

    在所有节点执行下列操作,启用openstack库:

    apt install software-properties-common
    add-apt-repository cloud-archive:ocata
    apt update
    apt dist-upgrade    # 升级包
    apt install python-openstackclient   #安装openstack客户端 
    

    2.5安装数据库

    1、在控制节点安装数据库

    apt install mariadb-server python-pymysql
    

    2、创建/etc/mysql/mariadb.conf.d/99-openstack.cnf,并编辑内容如下

    bind-address = [controller-ip]
    default-storage-engine = innodb
    innodb_file_per_table = on
    max_connections = 4096
    collation-server = utf8_general_ci
    character-set-server = utf8
    

    3、运行mysql_secure_installation脚本来保证数据库安全,为root账户设置一个合适的密码

     mysql_secure_installation
    

    2.6 安装消息队列服务

    1、使用RabbitMQ消息队列服务,在controller安装消息队列服务

    apt install rabbitmq-server
    

    2、添加用户,用合适的密码替代‘RABBIT_PASS’。

    rabbitmqctl add_user openstack RABBIT_PASS
    

    3、用户权限配置

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

    2.7 安装memcache

    1、认证服务的认证机制使用Memcached来缓存token,一般运行在控制节点上。在控制节点上执行:

    apt install memcached python-memcache
    

    2、编辑/etc/memcached.conf,将”-i 127.0.0.1“中的IP改成控制节点IP。
    3、重启memcache服务

    service memcached restart
    

    3 认证服务

    用户使用OpenStack时,通常第一个接触的服务就是认证服务,只有经过认证服务认证,用户才能使用其他OpenStack服务。另外认证服务还可以和一些外部用户管理系统(如LDAP)进行集成。认证服务的主要组成包括:

    • Server:通过RESTful接口提供认证、授权服务的中央服务器;
    • Drivers:集成到中央服务器中,负责获取OpenStack外部仓库中的认证信息。
    • Modules:运行于使用认证服务的OpenStack组件的地址空间中,负责拦截服务请求,提取用户证书后发往中央服务器请求授权。

    认证服务安装在控制节点,以下就是具体安装步骤。

    3.1 先决条件

    1、使用root用户进入数据库,创建keystone数据库,并赋予适当的权限:

    mysql -u root -p
     >  CREATE DATABASE keystone;
     >  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
     >  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
    

    其中 'KEYSTONE_DBPASS'是自己设置的密码,由于安装过程中设置的密码较多,建议设置成易记的密码。

    3.2安装配置组件

    1、安装keystone

    apt install keystone
    

    2、编辑/etc/keystone/keystone.conf:

    [database]
    connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone   
    #KEYSTONE_DBPASS是创建keystone数据库时设置的密码
    [token]
    provider=fernet
    

    3、同步认证服务数据库

    su -s /bin/sh –c "keystone-manage db_sync" keystone
    

    4、初始化Fernet key仓库

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    

    5、bootstrap认证服务

    keystone-manage bootstrap --bootstrap-password ADMIN_PASS  --bootstrap-admin-url http://controller:35357/v3/  --bootstrap-internal-url http://controller:5000/v3/  --bootstrap-public-url http://controller:5000/v3/  --bootstrap-region-id RegionOne
    

    其中‘ADMIN_PASS’是admin用户的密码,请自行定义。

    3.3. 配置Apache HTTP服务器

    1、 编辑/etc/apache2/apache2.conf,添加

    ServerName controller
    

    3.4 完成安装

    1、 重启Apache服务,删除默认的SQL数据库

    service apache2 restart
    rm -f /var/lib/keystone/keystone.db
    

    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
    

    ADMIN_PASS是bootstrap认证服务时设置的密码。
    3、Identity service为其他OpenStack服务提供认证服务,而认证服务需要domains, projects, users和roles。因此安装好keystone后先创建service项目:

    openstack project create --domain default --description "Service Project" service
    

    4、一般的操作无需使用admin用户,创建一个demo项目和用户,作为普通用户使用。

    #创建一个demo项目
    openstack project create --domain default   --description "Demo Project" demo
    #创建一个demo 用户
    openstack user create --domain default  --password-prompt demo
    

    6、创建user角色,并且将user角色添加到demo项目和用户中:

    openstack role create user
    openstack role add --project demo --user demo user
    

    认证服务到此安装完成,在安装其他服务前先验证认证服务。

    3.5. 验证操作

    1、安全起见,禁用暂时的认证令牌机制。编辑/etc/keystone/keystone-paste.ini,将[pipeline:public_api]、 [pipeline:admin_api]、 [pipeline:api_v3] sections 中的admin_token_auth删除。
    2、取消设置临时的OS_AUTH_URL和 OS_PASSWORD环境变量
    unset OS_AUTH_URL OS_PASSWORD:

    unset OS_AUTH_URL OS_PASSWORD
    

    3、admin用户请求认证token

    openstack --os-auth-url http://controller:35357/v3  --os-project-domain-name default --os-user-domain-name default  --os-project-name admin --os-username admin token issue
    

    4、demo用户请求认证token

    openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default    --os-project-name demo --os-username demo token issue
    

    3.6. 创建脚本

    1、创建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=ADMIN_PASS  #admin用户的密码
    export OS_AUTH_URL=http://controller:35357/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    

    2、为demo用户创建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  #demo用户的密码
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    

    3、加载admin-openrc文件,作为admin用户运行客户端,请求认证token:

    . admin-openrc
    openstack token issue
    
    图片.png

    4 镜像服务

    镜像服务是IaaS的核心服务,可以接受disk镜像或server镜像的API请求,也可以接受终端用户和OpenStack计算组件的metadata定义,并且支持存储镜像到多种类型的仓库中,包括OpenStack的对象存储中。用户可以使用镜像服务发现、注册、获取虚拟机镜像,而且可以通过镜像服务提供的rest api查询虚拟机镜像的metadata并获取镜像。镜像服务的主要组件包括:

    • glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。
    • glance-registry:存储、处理、获取镜像的metadata,镜像的metadata中包含镜像的大小、类型等信息。
    • Database:存储镜像metadata,可以根据喜好选择数据库,通常用户会选用MySQL 或 SQLite。
    • Storage repository for image files:支持多种类型的仓库,包括普通文件系统、对象存储、RADOS块设备、VMware datastore以及HTTP。需要注意,其中一些仓库仅支持只读方式使用。
    • Metadata definition service:为厂商、admin、服务、用户提示的通用API,用于自定义metadata,定义的metadata可以用于各种各样的资源,例如镜像、卷、配额等。

    镜像服务也安装在控制节点上,以下是镜像服务的具体安装过程。

    4.1. 先决条件

    1、 进入数据库,创建glance数据库,并赋权限

    mysql -u root -p
    > CREATE DATABASE glance;
    > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
    > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
    

    将'GLANCE_DBPASS'替换成自定义的密码。
    2、 导入admin证书,获取admin权限。

    . admin-openrc
    

    3、 创建glance用户,并设置密码

    openstack user create --domain default --password-prompt glance
    

    4、 添加管理员角色到glance用户和service项目中

    openstack role add --project service --user glance admin
    

    5、添加glance服务实体

    openstack service create --name glance --description "openstack image"  image
    

    6、添加image服务api endpoint

    openstack endpoint create --region RegionOne image public http://controller:9292
    openstack endpoint create --region RegionOne image internal http://controller:9292
    openstack endpoint create --region RegionOne image admin  http://controller:9292
    

    4.2. 安装配置组件

    1、安装glance

    apt install glance
    

    2、编辑/etc/glance/glance-api.conf文件

    [database]
    connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
    #glance数据库密码
    [keystone_authtoken]
    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   #glance用户密码
    
    [paste_deploy]
    flavor = keystone
    
    [glance_store]
    stores = file,http
    default_store = file
    filesystem_store_datadir = /var/lib/glance/images/
    

    3、编辑/etc/glance/glance-registry.conf

    [database]
    connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance 
    #glance数据库密码
    
    [keystone_authtoken]
    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   #glance用户密码
    
    [paste_deploy]
    flavor = keystone
    

    3、更新镜像服务数据库

    su -s /bin/sh -c "glance-manage db_sync" glance
    

    4、重启镜像服务

    service glance-registry restart
    service glance-api restart
    

    4.3. 验证操作

    1、以admin用户身份运行客户端,并下载cirros镜像

     . admin-openrc
    wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
    

    2、以qcow2格式上传镜像到镜像服务,设置为public确保其他服务可以使用该镜像。

    openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img  --disk-format qcow2 --container-format bare --public
    
    图片.png

    3、查看上传好的镜像

    openstack image list
    
    图片.png

    5 计算服务

    5.1. 安装配置控制节点

    5.1.1 先决条件

    1、进入mysql,创建数据库nova_api、nova、nova_cell0,并赋予一定的权限。

    create database nova_api;
    create database nova;
    create database nova_ce110;
    grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
    grant all privileges on nova_api.* to 'nova'@'%' identified by 'NOVA_DBPASS';
    grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
    grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
    grant all privileges on nova_ce110.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
    grant all privileges on nova_ce110.* to 'nova'@'%' identified by 'NOVA_DBPASS';
    

    其中'NOVA_DBPASS'是自定义的数据库密码。操作完成后则退出数据库。
    2、创建计算服务证书

    #以admin身份运行客户端
    . admin-openrc
    #创建nova用户
    openstack user create --domain default --password-prompt nova
    #将admin角色添加到nova用户
    openstack role add --project service --user nova admin
    #创建nova服务体
    openstack service create --name nova --description "openstack  compute" compute
    

    3、创建Compute API service endpoints:

    openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
    openstack endpoint create --region RegionOne compute internal  http://controller:8774/v2.1
    openstack endpoint create --region RegionOne compute admin  http://controller:8774/v2.1
    

    4、创建placement服务用户,并自行设置密码

    openstack user create --domain default --password-prompt placement
    

    5、添加placement用户到service项目中,并赋予admin角色。

    openstack role add --project service --user placement admin
    

    创建placement api实体
    openstack service create --name placement --description "placement api" placement
    创建placement api服务endpoint
    openstack endpoint create --region RegionOne placement public http://controller:8778
    openstack endpoint create --region RegionOne placement internal http://controller:8778
    openstack endpoint create --region RegionOne placement admin http://controller:8778

    5.1.2安装配置组件

    1、安装nova组件

    apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler nova-placement-ap
    

    2、编辑/etc/nova/nova.conf文件

    [api_database]
    connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
    #NOVA_DBPASS是nova数据库的密码
    
    [database]
    connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova
    
    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    #RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
    
    [api]
    auth_strategy=keystone
    
    [keystone_authtoken]
    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是nova用户对应的密码
    
    [DEFAULT]
    my_ip=10.0.0.11
    use_neutron=True
    firewall_driver=nova.virt.firewall.NoopFirewallDriver
    #注释掉[default]中的log_dir
    
    [vnc]
    enabled=true
    vncserver_listen=$my_ip
    vncserver_proxyclient_address=$my_ip
    
    [glance]
    api_servers=http://controller:9292
    
    [oslo_concurrency]
    lock_path=/var/lib/nova/tmp
    
    [placement]
    os_region_name=RegionOne
    project_domain_name=Default
    project_name=service
    auth_type=password
    user_domain_name=Default
    auth_url=http://controller:35357/v3
    username=placement
    password=PLACEMENT_PASS
    #PLACEMENT_PASS是placement用户对应的密码
    

    3、更新nova-api数据库

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

    报错如下所示:

    错误1
    解决方法:
    编辑/etc/nova/nova.conf文件,注释[database]和[api_database]中“connection=sqlite:////var/lib/nova/nova.sqlite”。再次执行更新数据库命令。

    4、注册cell0数据库

    su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
    

    5、创建cell1 cell

    su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
    

    6、 更新nova数据库

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

    7、确认cell0和cell1注册成功

    nova-manage cell_v2 list_cells
    
    图片.png

    8、重启计算服务

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

    5.2. 安装配置计算节点

    5.2.1. 安装配置组件

    1、安装nova组件

    apt install nova-compute
    

    2、编辑/etc/nova/nova.conf文件

    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    #RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
    
    [api]
    auth_strategy=keystone
    
    [keystone_authtoken]
    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是 nova用户的密码
    
    [DEFAULT]
    my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
    use_neutron=True
    firewall_driver=nova.virt.firewall.NoopFirewallDriver
    #MANAGEMENT_INTERFACE_IP_ADDRESS是计算节点上管理网络的IP。
    #注释掉[default]中的log_dir
    
    [vnc]
    enabled=true
    vncserver_listen=0.0.0.0
    vncserver_proxyclient_address=$my_ip
    novncproxy_base_url=http://controller:6080/vnc_auto.html
    
    [glance]
    api_servers=http://controller:9292
    
    [oslo_concurrency]
    lock_path=/var/lib/nova/tmp
    
    
    [placement]
    os_region_name=RegionOne
    project_domain_name=Default
    project_name=service
    auth_type=password
    user_domain_name=Default
    auth_url=http://controller:35357/v3
    username=placement
    password=PLACEMENT_PASS
    #PLACEMENT_PASS是placement用户的密码
    

    3、检查硬件是否支持虚拟化,返回值大于0则硬件支持虚拟化,否则需要进行额外的配置。

    egrep -c '(vmx|svm)' /proc/cpuinfo
    

    当返回值为0时,表明硬件不支持虚拟机,则编辑/etc/nova/nova-compute.conf文件,将libvirt类型从kvm改成qemu。

    4、重启服务

    service nova-compute restart
    

    5.2.2. 添加计算节点到cell数据库

    在控制节点执行以下操作步骤
    1、获取admin权限,确认数据库中有计算节点

    . admin-openrc
    openstack hypervisor list
    

    2、发现计算节点,新增计算节点时都需要执行该操作。

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

    5.2.3. 确认操作

    1、确认操作也在控制节点执行,获取admin权限,查看服务组件,应该运行着4个服务,“nova-consoleauth”、“nova-scheduler”、“nova-conductor”在控制节点,"nova-compute"在计算节点。

    . admin-openrc
    openstack compute service list
    

    nova-conductor服务起不来,查看日志发现一直报错:“AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN”。
    解决方法:分析发现可能是因为openstack用户创建不成功,查看rabbitmqctl中的用户,发现确实没有用户,重新创建openstack用户。

    #查看rabbitmq中的用户
    rabbitmqctl list_users
    #添加用户,RABBIT_PASS是openstack用户的密码,须与之前配置的保持一致
    rabbitmqctl add_user openstack RABBIT_PASS
    #再次查看rabbitmq中的用户
    rabbitmqctl list_users
    

    创建用户后,重启nova服务,再次执行以上步骤确认nova服务安装完成。
    2、列出认证服务中的API endpoints,确认认证服务的连接性

    openstack catalog list
    
    图片.png

    3、列出镜像,确认镜像服务的连接性

    openstack image list
    
    图片.png

    4、检查cells和placement api正常运行

    nova-status upgrade check
    
    图片.png

    6 网络服务

    neutron允许创建、插入其他OpenStack服务管理的接口设备,采用插件式结构因此可以容纳各种类型的网络设备和软件,提供了OpenStack架构和部署的灵活性。neutron主要包括以下模块:

    • neutron-server:接收和路由API请求到合适的OpenStack网络插件。
    • OpenStack网络插件和代理:负责插、拔port,创建网络和子网,以及提供IP地址。
    • 消息队列:通常安装OpenStack的时候都会遇到,负责在neutron-server和各种各样的代理进程之间路由信息,也可以作为数据库存储一些插件的网络状态。

    6.1. 安装配置控制节点

    6.1.1. 先决条件

    1、登录数据库,创建neutron数据库,并赋予权限:

    create database neutron;
    #NEUTRON_DBPASS是数据库密码,自行定义即可
    grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'NEUTRON_DBPASS';
    grant all privileges on neutron.* to 'neutron'@'%' identified by 'NEUTRON_DBPASS';
    

    2、获取admin权限,创建网络服务相关credentials:

    . admin-openrc
    #创建neutron用户
    openstack user create --domain default --password-prompt neutron
    #添加admin角色到neutron用户
    openstack role add --project service --user neutron admin
    #创建neutron服务体
    openstack service create --name neutron --description "openstack networking" network
    

    3、创建网络服务api endpoint:

    openstack endpoint create --region ReginOne network public http://controller:9696
    openstack endpoint create --region ReginOne network internal  http://controller:9696
    openstack endpoint create --region ReginOne network admin  http://controller:9696
    

    部署Self-service 网络

    部署网络服务有两种选择:
    1)采用简单的结构部署网络服务,仅支持实例连接provider 网络(外部网络),不支持私有网络、路由服务、浮动IP等。另外,只有admin或其他管理员用户才能管理provide网络;
    2)选项2在选项1的基础上添加了三层服务,支持实例连接私有网络。普通用户可以管理自己的私有网络,以及连接公网和私有的路由器。另外,外部网络可以借助浮动IP地址访问私有网络。

    本次安装中,选择选项2:部署Self-service networks。
    1、在控制节点安装服务组件。

    apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
    

    2、编辑/etc/neutron/neutron.conf文件

    [database]
    connection=mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
    #NEUTRON_DBPASS是neutron数据库密码
    
    [DEFAULT]
    core_plugin=ml2
    service_plugins=router
    allow_overlapping_ips=true
    
    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    auth_strategy=keystone
    #RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
    
    [keystone_authtoken]
    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=neutron
    password=NEUTRON_PASS
    #NEUTRON_PASS是neutron用户密码
    
    [DEFAULT]
    notify_nova_on_port_status_changes = true
    notify_nova_on_port_data_changes = true
    
    [nova]
    auth_url=http://controller:35357
    auth_type=password
    project_domain_name=default
    user_domain_name=default
    region_name=RegionOne
    project_name=service
    username=nova
    password=NOVA_PASS
    #NOVA_PASS是nova用户密码
    

    3、配置ML2插件,编辑/etc/neutron/plugins/ml2/ml2_conf.ini

    [ml2] 
    #配置支持的网络类型
    type_drivers=flat,vlan,vxlan    
    #self-service网络支持vxlan
    tenant_network_types=vxlan
    mechanism_drivers=linuxbridge,l2population
    #注释掉type_drivers的值
    
    [ml2]
    extension_drivers=port_security
    
    [ml2_type_flat]
    flat_networks=provider
    
    [ml2_type_vxlan]
    vni_ranges=1:1000
    
    [securitygroup]
    enable_ipset=true
    

    4、配置Linux bridge代理,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini:

    [linux_bridge]
    #映射provider虚拟网络到provider物理网络接口,PROVIDER_INTERFACE_NAME是第二块网卡名称
    physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
    
    #OVERLAY_INTERFACE_IP_ADDRESS是物理网络接口的IP地址
    [vxlan]
    enable_vxlan=true
    local_ip=OVERLAY_INTERFACE_IP_ADDRESS
    l2_population=true
    
    [securitygroup]
    enable_security_group=true
    firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    

    5、配置三层代理,编辑/etc/neutron/l3_agent.ini

    [DEFAULT]
    interface_driver=linuxbridge
    

    6、配置DHCP代理,编辑/etc/neutron/dhcp_agent.ini

    [DEFAULT]
    interface_driver=linuxbridge
    dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata=true
    

    7、配置metadata agent,编辑/etc/neutron/metadata_agent.ini

    #METADATA_SECRET是metadata proxy的密码,自行定义
    [DEFAULT]
    nova_metadata_ip=controller
    metadata_proxy_shared_secret=METADATA_SECRET
    

    8、配置计算服务使用网络服务,编辑/etc/nova/nova.conf

    #NEUTRON_PASS是neutron用户的密码,METADATA_SECRET是metadata proxy的密码
    [neutron]
    url=http://controller:9696
    auth_url=http://controller:35357
    auth_type=password
    project_domain_name=default
    user_domain_name=default
    region_name=RegionOne
    project_name=service
    username=neutron
    password=NEUTRON_PASS
    service_metadata_proxy=true
    metadata_proxy_shared_secret=METADATA_SECRET
    

    9、更新数据库

    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
    

    10、重启计算API服务和网络服务

    service nova-api restart
    service neutron-server restart
    service neutron-linuxbridge-agent  restart
    service neutron-dhcp-agent  restart
    service neutron-metadata-agent  restart
    #选择网络服务二,还需要重启3层服务
    service neutron-l3-agent restart
    

    6.2. 安装配置计算节点

    计算节点负责处理实例的连接和安全组。

    6.2.1. 安装配置组件

    1、安装组件

    apt install neutron-linuxbridge-agent
    

    2、配置通用组件,编辑/etc/neutron/neutron.conf

    [database]
    [DEFAULT]
    transport_url=rabbit://openstack:RABBIT_PASS@controller
    
    [DEFAULT]
    auth_strategy=keystone
    
    [keystone_authtoken]
    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=neutron
    password=NEUTRON_PASS
    

    6.2.2.部署Self-service网络

    1、在计算节点上也配置网络选项2:Self-service networks,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge]
    #PROVIDER_INTERFACE_NAME是底层provider物理网络接口,网卡2的名称
    physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
    
    #OVERLAY_INTERFACE_IP_ADDRESS是物理网络地址,即计算节点的IP地址
    [vxlan]
    enable_vxlan = true
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    l2_population = true
    
    [securitygroup]
    # ...
    enable_security_group = true
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    

    2、配置计算服务使用网络服务,编辑/etc/nova/nova.conf

    [neutron]
    url=http://controller:9696
    auth_url=http://controller:35357
    auth_type=password
    project_domain_name=default
    user_domain_name=default
    region_name=RegionOne
    project_name=service
    username=neutron
    password=neutron
    

    3、完成安装,重启计算服务

    service nova-compute restart
    service neutron-linuxbridge-agent restart
    

    4、验证安装,在控制节点执行:

    . admin-openrc
    openstack extension list --network
    
    图片.png

    查看neutron服务的agent是否都启动,理论上控制节点上有4个agent,计算节点上各有1个:

    . admin-openrc
    openstack network agent list
    
    图片.png

    7 Dashboard

    7.1. 安装配置

    1、将 Dashboard安装在控制节点上,执行以下命令安装组件:

    apt install openstack-dashboard
    

    2、编辑/etc/openstack-dashboard/local_settings.py

    OPENSTACK_HOST="controller"
    ##所有主机都可以访问
    ALLOWED_HOSTS=‘*’   
    
    SESSION_ENGINE='django.contrib.sessions.backends.cache'
    CACHES={
    'default': {
    'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION':'controller:11211',
        }
    }
    
    #启用第三版认证API
    OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
    
    #配置为支持域
    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    
    #配置API版本
    OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
    }
    
    #通过dashboard创建的用户的默认域为default
    OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
    
    #通过dashboard创建的用户默认角色为user
    OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
    
    

    3、重新加载web 服务器配置

    service apache2 reload
    

    7.2. 验证

    1、登录http://controller/horizon,查看dashboard页面,确认dashboard安装成功。默认域为default,可以使用admin用户登录,也可以实验demo用户登录。

    访问horizon,报错500,网上解决方法如下

    cd /var/lib/openstack-dashboard/
    ls –ltrh
    chown www-data:www-data /var/lib/openstack-dashboard/secret_key
    ls –ltrh
    service apache2 reload
    

    2、horizon页面出来,输入用户名和密码,报错如下:

    图片.png
    查看/var/log/apache2/error.log日志,错误信息“RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable”
    解决方法:
    1)、修改/etc/openstack-dashboard/local_settings.py,
    将‘SESSION_ENGINE = 'django.contrib.sessions.backends.cache'改成
    ’SESSION_ENGINE = 'django.contrib.sessions.backends.file'
    2)、重新加载web 服务器配置
    service apache2 reload
    

    3、登录控制面板后创建flavor、创建实例,访问实例控制器,发现无法连接。因为vnc地址是127.0.0.1,而不是controller IP。
    解决方法:

    1)、修改controller上的/etc/nova/nova.conf 
    novncproxy_base_url=http://$my_ip:6080/vnc_auto.html
    2)、修改computer上的/etc/nova/nova.conf
    novncproxy_base_url=http://172.171.3.20:6080/vnc_auto.html
    3)、重启nova相关服务
    #控制节点
    service nova-api restart
    service nova-consoleauth restart 
    service nova-scheduler restart
    service nova-conductor restart
    service nova-novncproxy restart
    #计算节点
    service nova-compute restart
    

    安装参考文档链接:
    http://www.10tiao.com/html/625/201703/2652502241/1.html
    http://www.10tiao.com/html/625/201703/2652502241/3.html
    https://docs.openstack.org/ocata/install-guide-ubuntu/InstallGuide.pdf
    http://wangzhijian.blog.51cto.com/6427016/1912487
    http://wangzhijian.blog.51cto.com/6427016/1913082?utm_source=tuicool&utm_medium=referral
    https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron.html

    相关文章

      网友评论

        本文标题:OpenStack 学习笔记

        本文链接:https://www.haomeiwen.com/subject/tbfaqxtx.html