阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

云计算 Openstack介绍及实战部署

163次阅读
没有评论

共计 40137 个字符,预计需要花费 101 分钟才能阅读完成。

Openstack 是目前比较流行的一个实现云计算平台的项目,本文通过云计算概述、Openstack 简介、Openstack 核心模块、Openstack 实战部署这几个方面来介绍 Openstack。

一、云计算概述

1.1、云计算是一个资源池,它为我们提供了诸如水、电、煤气一样的基础服务。

1.2、云计算是一种按使用量付费的模式,这种模式可以快速、高效地提供网络,服务器,存储,应用软件,服务等,我们不必关心如何实现,所以只需投入很少的管理工作,只需和服务供应商进行很少的交互。

1.3、云计算从广义上可以分为如下几种模式:IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)

1)IaaS:Amazon、阿里云、腾讯云提供的云主机即 IaaS,我们拿到的是一台机器,可以自定义操作系统。

2)PaaS:面向开发者,直接给用户提供一个平台来运行用户的程序,早期的 idc 服务商卖的主机、新浪的 sae、阿里云的云数据库等。

3)SaaS:卖的是服务,比如腾讯企业邮箱、印象笔记等

二、Openstack 简介

2.1、官网:www.openstack.org 

2.2、由 NASA(美国国家航空航天局)和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目,用 Python 语言开发,可以实现私有云或者公有云。

2.3、主要有三个最基础组件:计算服务、网络服务、存储服务。

云计算 Openstack 介绍及实战部署

2.4、发布版本 http://releases.openstack.org,目前稳定版本为:Mitaka

云计算 Openstack 介绍及实战部署

三、Openstack 核心模块

3.1、6 个核心服务

1)nova:计算中心,对比阿里云的 ESC,支持 kvm,xen 等虚拟化技术

2)keystone:认证中心

3)neutron:网络服务中心

4)swift:对象存储服务,存储图片,附件等文件,对比腾讯云的 COS

5)cinder:块存储服务,对比云盘

6)glance:镜像管理中心

云计算 Openstack 介绍及实战部署

3.2、其他可选组件

云计算 Openstack 介绍及实战部署

1)HORIZON:控制面板

2)CEILOMETER:提供监控和数据采集

3)HEAT:自动化部署

4)TROVE:数据库应用服务

5)SAHARA:大数据处理

6)IRONIC:物理机管理服务

7)ZAQAR:消息服务

8)MANILA:文件共享服务

9)DESIGNATE:DNS 服务

10)BARBICAN:key 管理中心

11)MAGNUM:容器

12)MURANO:应用目录

13)CONGRESS:策略即服务

四、Openstack 实战部署

4.1、前期准备

1)实验环境:至少两台机器

2)在 RHEL7/CentOS7 上安装 openstack  libertyl

官方文档:http://docs.openstack.org/liberty/install-guide-rdo

3)两台虚拟机,安装 centos7 系统(准备两个网卡,一个 NAT,另一个仅主机)

4)nat 网卡设置 ip,可以联网,仅主机的网卡只要我们 windows 可以通就行,主要是用于 xshell 远程连接

5)关闭 selinuxl、关闭 iptables

systemctl stop firewalld

systemctl disable firewalld

6)关闭 NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager

7)CentOS 7 配置 iptables

参考文档:http://www.linuxidc.com/Linux/2017-04/142964.htm

8)定义密码,在部署 openstack 过程中会在多个地方使用到密码,为了方便管理和安全设置,我们需要提前先定义好密码,使用命令 mkpasswd -s 0 生成随机字符串

账号 描述 密码
Database passwordRoot password for the databasetn1Pi6Ytm
ADMIN_PASSPassword of user admin3qiVpzU2x
CEILOMETER_DBPASSDatabase password for the Telemetry serviceCzn3bF1hm
CEILOMETER_PASSPassword of Telemetry service userceilometerabquh12GU
CINDER_DBPASSDatabase password for the Block StorageserviceO3bwbpoZ3
CINDER_PASSPassword of Block Storage service usercinderhf8LX9bow
DASH_DBPASSDatabase password for the dashboard5qBZxnn1g
DEMO_PASSPassword of user demo9TtbgaA1q
GLANCE_DBPASSDatabase password for Image serviceZznky4tP0
GLANCE_PASSPassword of Image service user glanceWuyaf4cV6
HEAT_DBPASSDatabase password for the Orchestrationserviceb7Fk5wjLg
HEAT_DOMAIN_PASSPassword of Orchestration domain7Gotb3eoH
HEAT_PASSPassword of Orchestration service userheateqQ2jLgz0
KEYSTONE_DBPASSDatabase password of Identity servicef6zx0gURv
NEUTRON_DBPASSDatabase password for the Networking service  quidyOC50
NEUTRON_PASSPassword of Networking service userneutronmdcGVl29i
NOVA_DBPASSDatabase password for Compute serviceRYgv0rg7p
NOVA_PASSPassword of Compute service user novahsSNsqc43
RABBIT_PASSPassword of user guest of RabbitMQo3NXovnz5
SWIFT_PASSPassword of Object Storage service userswift6ci5xWOdk
METADATA_SECRET m8uhmQTu2

9)设置主机名

两台机器都设置 hostname

hostnamectl set-hostname controller

hostnamectl set-hostname compute

编辑 /etc/hosts:

192.168.16.111  controller

192.168.16.112  compute

10)同步时间

controller 上:

yum install -y chrony 

vim /etc/chrony.conf                     // 增加或更改

allow 192.168.16.0/24

保存后,执行

systemctl enable chronyd.service

systemctl start chronyd.service

compute 上:

yum install -y chrony

vim /etc/chrony.conf                     // 增加或更改

server controller iburst

保存后,执行

systemctl enable chronyd.service

systemctl start chronyd.service

4.2、安装 openstack

1)安装 openstack 的 yum 源(两个机器上都操作)

yum install -y centos-release-openstack-liberty

2)升级所有的包(两个机器上都操作)

yum upgrade                              // 结束后重启系统

3)安装 openstack 客户端和 openstack-selinux

yum install -y python-openstackclient openstack-selinux

以下 4.3-4.12 步骤若无特殊说明则默认表示在  controller 机器上执行操作

4.3、安装 sql 服务

1)安装

yum install -y mariadb mariadb-server MySQL-python

2)编辑配置文件

vim /etc/my.cnf.d/mariadb_openstack.cnf  // 加入下面内容

[mysqld]

bind-address= 192.168.16.111

default-storage-engine= innodb

innodb_file_per_table

collation-server= utf8_general_ci

init-connect= ‘SET NAMES utf8’

character-set-server= utf8

3)启动 mariadb:

systemctl enable mariadb.service

systemctl start mariadb.service

4)安全配置,设置 root 密码

mysql_secure_installation

设置 root 密码为:tn1Pi6Ytm

4.4、安装 nosql

1)nosql 数据库被 Telemetry service 用到,在这里我们安装的是 mongodb

yum install -y mongodb-server mongodb

2)编辑配置文件

vim /etc/mongod.conf   // 更改如下配置

bind_ip= 192.168.16.111

smallfiles= true

3)启动服务

systemctl enable mongod.service

systemctl start mongod.service

4.5、安装消息队列

1)rabbitmq 消息队列服务在 openstack 中起到非常关键的作用,它好比是一个交通枢纽,各个组件之间的通信由它来完成。

yum install -y rabbitmq-server

2)启动 rabbitmq-server 服务

systemctl enable rabbitmq-server

systemctl start rabbitmq-server

3)添加 openstack 用户

rabbitmqctl add_user openstack o3NXovnz5        // 用户名为 openstack,密码为 o3NXovnz5

4)为 openstack 用户授权

rabbitmqctl set_permissions openstack “.*” “.*” “.*”

允许 openstack 用户可以配置,可以写,可以读

4.6、增加 identity 

1、keystone 介绍

1)identity 即 keystone,它是 openstack 的验证中心,所有的服务都由它来认证。

参考: http://www.linuxidc.com/Linux/2017-04/142972.htm

2)在 keyston 中有以下角色:tenants(租户或项目)、用户、角色、服务目录和端点

3)如果把宾馆比作为 Tenant,住宿的人就是 User,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的 VIP 等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。

4)以创建一个虚拟机(server)为例,keystone 在 openstack 的访问流程大致如下:

a、用户 Alice 通过自己的户名和密码向 keystone 申请 token,keystone 认证用户名和密码后,返回 token1

b、Alice 通过 token1 发送 keystone 查询他所拥有的租户,keystone 验证 token1 成功后,返回 Alice 的所有 Tenant

c、Alice 选择一个租户,通过用户名和密码申请 token,keystone 认证用户名、密码、tenant 后,返回 token2。(其实 1、2 步仅仅是为了查询 tenant,如果已经知道 tenant,可以忽略 1、2 步)

d、Alice 通过 token2 发送创建 server 的请求,keystone 验证 token2(包括该 token 是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到 nova,最终创建虚拟机

2、前期准备

1)登陆 mysql,创建数据库
mysql -uroot -ptn1Pi6Ytm

>createdatabase keystone;

>GRANTALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘f6zx0gURv’;

>GRANTALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘f6zx0gURv’;

说明:创建一个 keystone 库,并且授权给 keystone 用户所有权限,密码为 f6zx0gURv

2)安装相关的包

yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached

3)启动 memcached 服务

systemctl enable memcached.service

systemctl start memcached.service

3、编辑配置文件

编辑 keystone 配置文件

vim /etc/keystone/keystone.conf      // 修改或增加配置如下

[DEFAULT]

admin_token= 3qiVpzU2x

verbose= true

[database]

connection= mysql://keystone:f6zx0gURv@controller/keystone

[memcache]

servers= localhost:11211

[token]

provider= uuid

driver= memcache

[revoke]

driver= sql

 

4、导入数据

1)导入 keystone 相关的数据

su -s /bin/sh -c “keystone-manage db_sync” keystone

注意:这里会有个提示 Nohandlers could be found for logger “oslo_config.cfg” 忽略它,不影响

2)检查有没有正常导入数据:

mysql -ukeystone -pf6zx0gURv -hcontroller -t keystone -e  “show tables”

看是否有列出表来,如果是空,说明没有成功导入数据

5、配置 httpd

1)先编辑 apache 配置文件

vim /etc/httpd/conf/httpd.conf    // 增加或更改

ServerName controller

2)编辑配置文件

vim /etc/httpd/conf.d/wsgi-keystone.conf    // 内容如下

Listen5000

Listen35357

<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

Allowf rom all

</IfVersion>

</Directory>

</VirtualHost>

 

3)启动 apache

systemctl enable httpd.service

systemctl start httpd.service

 

6、创建服务实例

1)设置环境变量:

export OS_TOKEN=3qiVpzU2x

export OS_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

2)创建服务实例

openstack service create –name keystone–description “OpenStack Identity” identity

3)创建端点

openstack endpoint create –region RegionOne identity public http://controller:5000/v2.0

openstack endpoint create –region RegionOne identity internal http://controller:5000/v2.0

openstack endpoint create –region RegionOne identity admin http://controller:35357/v2.0

4)创建 admin 租户

openstack project create –domain default –description “Admin Project” admin

5)创建 admin 用户(密码为 3qiVpzU2x)

openstack user create –domain default –password-prompt admin 

 

6)创建 admin 角色

openstack role create admin

7)添加 admin 角色到 admin 租户和用户

openstack role add –project admin –user admin admin

8)创建 service 租户

openstack project create –domain default –description “Service Project” service

9)创建 demo 租户

openstack project create –domain default –description “Demo Project” demo

10)创建 demo 用户(密码 9TtbgaA1q)

openstack user create –domain default –password-prompt demo

11)创建角色 user

openstack role create user

12)添加 user 角色到 demo 租户和 demo 用户

openstack role add –project demo –user demo user

 

7、验证操作

验证 admin 用户和 demo 用户是否能正常登陆

1)首先做一个安全设置:

vim /usr/share/keystone/keystone-dist-paste.ini

搜索 admin_token_auth,[pipeline:public_api],[pipeline:admin_api][pipeline:api_v3] 中,把 admin_token_auth 去掉

例如

pipeline= sizelimit url_normalize request_id build_auth_context token_auth admin_token_auth json_body ec2_extension user_crud_extension public_service

改为:

pipeline= sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension user_crud_extension public_service

2)取消环境变量 OS_TOKEN 和 OS_URL

unset OS_TOKEN OS_URL

3)然后再登陆 admin 和 demo 用户

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

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

4)创建两个 openstack 客户端脚本

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=3qiVpzU2x

export OS_AUTH_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

执行脚本

source admin-openrc.sh

申请认证令牌

openstack token issue

vim demo-openrc.sh  // 内容

export OS_PROJECT_DOMAIN_ID=default

export OS_USER_DOMAIN_ID=default

export OS_PROJECT_NAME=demo

export OS_TENANT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=9TtbgaA1q

export OS_AUTH_URL=http://controller:5000/v3

export OS_IDENTITY_API_VERSION=3

执行脚本

source demo-openrc.sh

申请认证令牌

openstack token issue

 

4.7、增加 image

1、前期准备

image 又叫做 glance,是用来管理镜像的一个组件,我们用镜像来安装操作系统。glance 支持让用户自己管理自定义镜像。

1)创建 glance 库和用户

mysql -uroot -ptn1Pi6Ytm

>CREATE database glance;

>GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’localhost’ IDENTIFIED BY ‘Zznky4tP0’;

>GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’%’ IDENTIFIED BY ‘Zznky4tP0’;

2)执行 admin-openrc.sh 脚本

source admin-openrc.sh

3)创建 glance 用户(密码为 hf8LX9bow)

openstack user create –domain default –password-prompt glance

4)把 admin 角色添加到 glance 用户和 service 租户

openstack role add –project service –user glance admin

5)创建 glance 服务实体

openstack service create –name glance –description “OpenStack Image service” image

6)创建 image 服务 api 端点

openstack endpoint create –region RegionOne image public http://controller:9292

openstack endpoint create –region RegionOne image internal http://controller:9292

openstack endpoint create –region RegionOne image admin http://controller:9292

2、安装和配置

1)安装包

yum install -y openstack-glance python-glance python-glanceclient

2)编辑配置文件

vim /etc/glance/glance-api.conf          // 更改或增加

[database]

connection= mysql://glance:Zznky4tP0@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= hf8LX9bow

 

[paste_deploy]

flavor= keystone

[glance_store]

default_store= file

filesystem_store_datadir= /var/lib/glance/images/

[DEFAULT]

notificaction_driver= noop

verbose=True

vim /etc/glance/glance-registry.conf          // 更改或增加

[DEFAULT]

notificaction_driver= noop

verbose=True

[database]

connection= mysql://glance:Zznky4tP0@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= hf8LX9bow

[paste_deploy]

flavor= keystone

3)同步 glance 数据库数据

su -s /bin/sh -c “glance-manage db_sync” glance

4)启动服务

systemctl enable openstack-glance-api.service openstack-glance-registry.service

systemctl start openstack-glance-api.service openstack-glance-registry.service

3、验证操作

1)添加环境变量

echo”export OS_IMAGE_API_VERSION=2″  | tee -a admin-openrc.sh demo-openrc.sh

2)执行 admin-openrc.sh

source admin-openrc.sh

3)下载镜像

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

4)把刚刚下载的镜像上传到镜像服务中心

glance image-create –name “cirros” \

–file cirros-0.3.4-x86_64-disk.img \

–disk-format qcow2 –container-format bare \

–visibility public –progress

然后我们可以在 /var/lib/glance/images/ 目录下看到一个文件,这个就是刚刚上传的镜像,你会发现这个文件的名字和 id 是一致的。使用命令:

glance image-list                // 可以查看镜像列表

 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-04/142972p2.htm

 

4.8、增加 compute

1、前期准备

1)compute 又叫 nova,是 OpenStack 中的计算组织控制器。OpenStack 中实例(instances)生命周期的所有活动都由 Nova 处理。这样使得 Nova 成为一个负责管理计算资源、网络、认证、所需可扩展性的平台。但是,Nova 自身并没有提供任何虚拟化能力,相反它使用 libvirtAPI 来与被支持的 Hypervisors(kvm、xen、vmware 等)交互。

2)创建 nova 库,并创建 nova 用户

mysql -uroot -ptn1Pi6Ytm

>CREATE DATABASE nova;

>GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘RYgv0rg7p’;

>GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’%’ IDENTIFIED BY ‘RYgv0rg7p’;

3)初始化环境变量

source admin-openrc.sh

4)创建 nova 用户,密码为 hsSNsqc43

openstack user create –domain default–password-prompt nova

5)添加 admin 角色到 nova 用户

openstack role add –project service –usernova admin

6)创建 nova 服务实例

openstack service create–name nova –description”OpenStack Compute” compute

7)创建 api 端点

openstack endpoint create –region RegionOne compute public http://controller:8774/v2/%\(tenant_id\)s

openstack endpoint create –region RegionOne compute internal http://controller:8774/v2/%\(tenant_id\)s

openstack endpoint create –region RegionOne compute admin http://controller:8774/v2/%\(tenant_id\)s

 

2、安装包并配置(controller 上操作

1)安装包

yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler Python-novaclient

2)编辑配置文件

vim /etc/nova/nova.conf     // 更改或增加配置

[database]

connection= mysql://nova:RYgv0rg7p@controller/nova

[DEFAULT]

rpc_backend=rabbit

my_ip=192.168.16.111

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

 

[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= hsSNsqc43

[oslo_messaging_rabbit]

rabbit_host= controller

rabbit_userid= openstack

rabbit_password= o3NXovnz5

[vnc]

vncserver_listen= $my_ip

vncserver_proxyclient_address= $my_ip

[glance]

host= controller

[oslo_concurrency]

lock_path= /var/lib/nova/tmp

3)同步数据创建 nova 库

su -s /bin/sh -c “nova-manage db sync” nova

4)启动服务

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

systemctlstart openstack-nova-api.service \

openstack-nova-cert.service openstack-nova-consoleauth.service \

openstack-nova-scheduler.service openstack-nova-conductor.service \

openstack-nova-novncproxy.service

 

3、安装包并配置(compute 上操作

1)安装 nova-compute 包

yum install -y openstack-nova-compute sysfsutils

2)编辑配置文件

vim /etc/nova/nova.conf          // 更改或增加如下配置

[DEFAULT]

rpc_backend= rabbit

auth_strategy= keystone

my_ip= 192.168.16.112

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= o3NXovnz5

[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= hsSNsqc43

[vnc]

enabled= True

vncserver_listen= 0.0.0.0

vncserver_proxyclient_address= $my_ip

novncproxy_base_url= http://controller:6080/vnc_auto.html

[glance]

host= controller

[oslo_concurrency]

lock_path= /var/lib/nova/tmp

3)开启支持虚拟化

使用如下命令检查你的机器 cpu 是否支持虚拟化

egrep -c ‘(vmx|svm)’ /proc/cpuinfo

如果得到的数字大于 0,说明是支持的,否则说明不支持,若为 0,需要编辑如下配置文件

vim /etc/nova/nova.conf           // 编辑

[libvirt]

virt_type= qemu

4)启动服务

systemctl enable libvirtd.service openstack-nova-compute.service

systemctl start libvirtd.service openstack-nova-compute.service 

 

4、验证操作

1)执行脚本

source admin-openrc.sh

2)列出服务组件

nova service-list

共有 5 个:nova-consoleauth、nova-conductor、nova-scheduler、nova-cert、nova-compute

3)列出 api 端点,一共有 9 组:nova 三组,glance 三组,keystone 三组

nova endpoints

注意:如果有提示:WARNING:nova has no endpoint in ! Available endpoints for this service

可以忽略掉,也可以编辑 admin-openrc.sh 增加一行 export OS_REGION_NAME=RegionOne

4)列出镜像

nova image-list

 

 

4.9、增加 networking

1、前期准备

1)Networking 又叫做 Neutron,是 Openstack 必不可少的组件,它其实是网络虚拟化的实现工具,可以让我们模拟出路由器、交换机、网卡等网络设备。关于 Neutron 的电书:

 https://yeasy.gitbooks.io/openstack_understand_neutron/content/

Neutron 支持两种网络模式,第一种是非常简单的网络架构,它仅支持是让实例连接外网,不支持自定义网络、路由器以及浮动 ip。只有管理员或者授权的用户有权限去管理网络。第二种网络功能比较强大,支持自定义网络管理,支持自建路由器并且也支持浮动 ip。即使没有授权的用户也可以管理网络,支持用户自己配置和管理。

2)创建库、授权账号

mysql -uroot -ptn1Pi6Ytm

>CREATE DATABASE neutron;

>GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’localhost’ IDENTIFIED BY ‘quidyOC50’;

>GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’%’ IDENTIFIED BY ‘quidyOC50’;

3)执行脚本

source admin-openrc.sh

4)创建 neutron 用户(密码为 mdcGVl29i)

openstack user create –domain default –password-prompt neutron

5)把 admin 角色添加到 neutron 用户里

openstack role add –project service –userneutron admin

6)创建 neutron 实例

openstack service create –name neutron –description “OpenStack Networking” network

7)创建 networking 服务 api 终端

openstack endpoint create –region RegionOne network public http://controller:9696

openstack endpoint create –region RegionOne network internal http://controller:9696

openstack endpoint create –region RegionOne network admin http://controller:9696

2、配置

1)安装组件

yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge python-neutronclient ebtables ipset

2)配置服务端组件

vim /etc/neutron/neutron.conf           // 更改或增加

[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

[database]

connection= mysql://neutron:quidyOC50@controller/neutron

[oslo_messaging_rabbit]

rabbit_host= controller

rabbit_userid= openstack

rabbit_password= o3NXovnz5

[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= mdcGVl29i

[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= hsSNsqc43

[oslo_concurrency]

lock_path= /var/lib/neutron/tmpl

3)配置 ml2 插件

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

4)编辑 linux 桥接 agent

vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini                 // 增加或更改

[linux_bridge]

physical_interface_mappings= public:eno16777736

[vxlan]

enable_vxlan= False

[agent]

prevent_arp_spoofing= True

[securitygroup]

enable_security_group= True

firewall_driver= neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

 

5)配置 dhcp agent

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

3、配置元数据 agent

编辑配置文件

vim /etc/neutron/metadata_agent.ini                // 更改或增加

[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= mdcGVl29i

nova_metadata_ip= controller

metadata_proxy_shared_secret= m8uhmQTu2

verbose= True

说明:需要删除掉配置文件里原有的 auth_url  auth_region admin_tenant_name  admin_user admin_password 

4、compute 使用 网络(controller 上操作)

vim /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= mdcGVl29i

 

service_metadata_proxy= True

metadata_proxy_shared_secret= m8uhmQTu2

 

5、启动服务

1)创建 ml2 插件配置文件创建软连接

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

 

2)生成数据

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

 

3)重启 compute api 服务

systemctl restart openstack-nova-api.service

 

4)启动服务

systemctl enable neutron-server.service \

neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

neutron-metadata-agent.servicelsystemctlstart neutron-server.service \

neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

neutron-metadata-agent.servicelsystemctlenable neutron-l3-agent.service

systemctl start neutron-l3-agent.service

 

6、配置 compute 节点(compute 上操作

1)安装组件

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

2)配置普通组件

vim /etc/neutron/neutron.conf        // 更改或增加

[DEFAULT]

rpc_backend= rabbit

auth_strategy= keystone

verbose= True

[oslo_messaging_rabbit]

rabbit_host= controller

rabbit_userid= openstack

rabbit_password= o3NXovnz5

[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= mdcGVl29i

[oslo_concurrency]

lock_path= /var/lib/neutron/tmp

 

3)配置 linux 桥接 agent

vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]

physical_interface_mappings =public:eno16777736

[vxlan]

enable_vxlan = False

[agent]

prevent_arp_spoofing = True

[securitygroup]

enable_security_group = True

firewall_driver =neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

 

4)配置 compute 使用网络

vim /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= mdcGVl29i

5)启动服务

systemctl restart openstack-nova-compute.service

systemctl enable neutron-linuxbridge-agent.service

systemctl start neutron-linuxbridge-agent.service

7、验证配置

1)执行环境变量脚本

source admin-openrc.sh

2)列出所有的扩展

neutron ext-list

3)列出所有 agent

neutron agent-list                    //agenttype 如下:

Linuxbridge agent

Linuxbridge agent

DHCP agent

Metadata agent

必须要有 4 个,否则说明上面的某个步骤配置有问题。

 

 

4.10、增加 dashboard

1、horizon

1)安装包 

yum install -y openstack-dashboard

2)编辑配置文件

vim /etc/openstack-dashboard/local_settings        // 更改或增加

OPENSTACK_HOST= “controller”

ALLOWED_HOSTS= [‘*’,]

CACHES= {

‘default’:{

‘BACKEND’:’django.core.cache.backends.locmem.LocMemCache’,

‘LOCATION’:’127.0.0.1:11211′,

} }

OPENSTACK_KEYSTONE_DEFAULT_ROLE= “user”

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT= True

OPENSTACK_API_VERSIONS= {

“identity”:3,

“volume”:2,

}

TIME_ZONE= “Asia/Chongqing”

3)重启服务

systemctl restart httpd.service memcached.service

此时可以去访问 http://controller/dashboard 了,使用账号 admin 或者 demon 用户登陆即可,域为 default

 

 

4.11、增加 block storage

1、前期准备

blockstorage 又叫做 cinder,用来给 openstack 提供存储服务,比如我们在阿里云购买一台云主机,同时想购买容量大的磁盘,通常叫做云盘,这个云盘就是 blockstorage。

1)创建库并授权 cinder 用户

mysql -uroot -ptn1Pi6Ytml

>CREATE DATABASE cinder;

>GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’localhost’ IDENTIFIED BY ‘O3bwbpoZ3’;

>GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’%’ IDENTIFIED BY ‘O3bwbpoZ3’;

2)执行初始化脚本

source admin-openrc.sh

3)创建 cinder 用户(密码为 hf8LX9bow)

openstack user create –domain default –password-prompt cinder

4)添加 admin 角色

openstack role add –project service –user cinder admin

5)创建 cinder 和 cinderv2 实例

openstack service create –name cinder \

–description “OpenStack Block Storage” volume

openstack service create –name cinderv2 \

–description “OpenStack Block Storage” volumev2

6)创建块存储服务 api 终端

openstack endpoint create –region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s

openstack endpoint create –region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s

openstack endpoint create –region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s

openstackendpoint create –region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s

openstack endpoint create –region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s

openstack endpoint create –region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

 

2、安装和配置

1)安装包

yum install -y openstack-cinder python-cinderclient

2)编辑配置文件

vim /etc/cinder/cinder.conf           // 更改或增加

[database]

connection= mysql://cinder:O3bwbpoZ3@controller/cinder

[DEFAULT]

rpc_backend= rabbit

auth_strategy= keystone

my_ip= 192.168.16.111

verbose= True

[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= hf8LX9bow

[oslo_messaging_rabbit]

rabbit_host= controller

rabbit_userid= openstack

rabbit_password= o3NXovnz5

[oslo_concurrency]

lock_path= /var/lib/cinder/tmp

3)同步数据

su -s /bin/sh -c “cinder-manage db sync” cinder

4)配置 compute 使用块存储

vim /etc/nova/nova.conf

[cinder]

os_region_name=RegionOne

5)启动服务

systemctl restart openstack-nova-api.service

systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

3、配置 storage 节点(compute 上操作

我们理应需要再准备一台单独的机器来做 storage 服务的,但是为了节省资源,我们就那 compute 节点和 storage 节点共用。这里需要为 compute(storage)节点再增加一块磁盘(/dev/sdb)作为存储磁盘。

1)安装 lvm

yum install -y lvm2

2)启动服务

systemctl enable lvm2-lvmetad.service

systemctl start lvm2-lvmetad.service

3)创建物理卷

pvcreate /dev/sdb

4)创建卷组

vgcreate cinder-volumes /dev/sdb

5)编辑配置文件

vim /etc/lvm/lvm.conf

devices{

       filter = [“a/sdb/”,”r/.*/”]

说明:如果还有第三块磁盘,应该再加上

filter= [“a/sda/”, “a/sdb/”, “r/.*/”]

 

6)安装包

yum install -y openstack-cinder targetclipython-oslo-policy

7)编辑配置文件

vim /etc/cinder/cinder.conf

[DEFAULT]

rpc_backend= rabbit

auth_strategy= keystone

my_ip= 192.168.16.112

enabled_backends= lvm

glance_host= controller

verbose= True

[database]

connection= mysql://cinder:O3bwbpoZ3@controller/cinder

[oslo_messaging_rabbit]

rabbit_host= controller

rabbit_userid= openstack

rabbit_password= o3NXovnz5

[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= hf8LX9bow

[lvm]

volume_driver= cinder.volume.drivers.lvm.LVMVolumeDriver

volume_group= cinder-volume

liscsi_protocol= iscsi

iscsi_helper= lioadm

[oslo_concurrency]

lock_path= /var/lib/cinder/tmp

4、启动和验证

1)启动服务(compute 上操作)

systemctl enable openstack-cinder-volume.service target.service

systemctl start openstack-cinder-volume.service target.service

2)验证操作(controller 上操作)

执行初始化脚本

source admin-openrc.sh

列出服务

cinder service-list

 

 

4.12、运行实例

1、创建公网网络

1)执行初始化脚本

source admin-openrc.sh

2)创建网络

neutron net-create public–shared –provider:physical_network public \

–provider:network_type flat

3)创建子网

neutron subnet-create public 192.168.16.0/24 –name public \

–allocation-pool start=192.168.16.10,end=192.168.16.30 \

–dns-nameserver 119.29.29.29 –gateway 192.168.16.2l

说明:这里的公网,实际上是虚拟机用的那个网段,我们暂时把它作为公网,在这里因为涉及到 dhcp 服务,会和局域网内的路由器上的 dhcp 服务产生冲突,所以需要先把路由器上的 dhcp 服务关掉。

2、创建 key

1)执行初始化脚本

source demo-openrc.sh

2)生成密钥

ssh-keygen-q -N “”

nova keypair-add –pub-key ~/.ssh/id_rsa.pub mykey

3)验证密钥

nova keypair-list

4)增加安全组规则

nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

5)允许 ssh 访问

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0

3、配置实例选项

1)执行初始化脚本

source demo-openrc.sh

2)列出实例类型

nova flavor-list

3)列出所有镜像

nova image-list

4)列出可用网络

neutron net-list

5)列出安全组

nova secgroup-list

6)运行实例

nova boot –flavor m1.tiny –image cirros –nic net-id=PUBLIC_NET_ID \

–security-group default –key-name mykeypublic-instance

说明:这里的 PUBLIC_NET_ID 需要替换为可用网络里面 public 网络的 id

7)检测实例状态

nova list

4、连接实例

1)使用 vnc 连接(使用下面命令可以列出 vnc 的连接)

nova get-vnc-console public-instance novnc

2)验证网络(在实例里面)

ping -c 4 192.168.16.2

3)远程连接实例

首先用 nova list 查看实例的 ip(假如为 192.168.16.33)

验证 ip:

ping -c4 192.168.16.33

远程 ssh 登录:

ssh cirros@192.168.16.33

5、增加云盘

1)先执行初始化脚本

source demo-openrc.sh

2)创建一个 2G 的云盘,名字为 volume1

cinder create –display-name volume1 2

3)列出所有云盘

cinder list

4)把云盘挂到实例中

nova volume-attach INSTANCE_NAME VOLUME_ID

说明:INSTACE_NAME 可以用 nova list 查看,VOLUME_ID 就是用 cinder list 查看到的云盘 id

5)列出已经挂上的云盘

nova volume-list

6)登陆到实例查看云盘

ssh cirros@192.168.16.33

sudo fdisk -l

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142971.htm

Openstack 是目前比较流行的一个实现云计算平台的项目,本文通过云计算概述、Openstack 简介、Openstack 核心模块、Openstack 实战部署这几个方面来介绍 Openstack。

一、云计算概述

1.1、云计算是一个资源池,它为我们提供了诸如水、电、煤气一样的基础服务。

1.2、云计算是一种按使用量付费的模式,这种模式可以快速、高效地提供网络,服务器,存储,应用软件,服务等,我们不必关心如何实现,所以只需投入很少的管理工作,只需和服务供应商进行很少的交互。

1.3、云计算从广义上可以分为如下几种模式:IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)

1)IaaS:Amazon、阿里云、腾讯云提供的云主机即 IaaS,我们拿到的是一台机器,可以自定义操作系统。

2)PaaS:面向开发者,直接给用户提供一个平台来运行用户的程序,早期的 idc 服务商卖的主机、新浪的 sae、阿里云的云数据库等。

3)SaaS:卖的是服务,比如腾讯企业邮箱、印象笔记等

二、Openstack 简介

2.1、官网:www.openstack.org 

2.2、由 NASA(美国国家航空航天局)和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目,用 Python 语言开发,可以实现私有云或者公有云。

2.3、主要有三个最基础组件:计算服务、网络服务、存储服务。

云计算 Openstack 介绍及实战部署

2.4、发布版本 http://releases.openstack.org,目前稳定版本为:Mitaka

云计算 Openstack 介绍及实战部署

三、Openstack 核心模块

3.1、6 个核心服务

1)nova:计算中心,对比阿里云的 ESC,支持 kvm,xen 等虚拟化技术

2)keystone:认证中心

3)neutron:网络服务中心

4)swift:对象存储服务,存储图片,附件等文件,对比腾讯云的 COS

5)cinder:块存储服务,对比云盘

6)glance:镜像管理中心

云计算 Openstack 介绍及实战部署

3.2、其他可选组件

云计算 Openstack 介绍及实战部署

1)HORIZON:控制面板

2)CEILOMETER:提供监控和数据采集

3)HEAT:自动化部署

4)TROVE:数据库应用服务

5)SAHARA:大数据处理

6)IRONIC:物理机管理服务

7)ZAQAR:消息服务

8)MANILA:文件共享服务

9)DESIGNATE:DNS 服务

10)BARBICAN:key 管理中心

11)MAGNUM:容器

12)MURANO:应用目录

13)CONGRESS:策略即服务

四、Openstack 实战部署

4.1、前期准备

1)实验环境:至少两台机器

2)在 RHEL7/CentOS7 上安装 openstack  libertyl

官方文档:http://docs.openstack.org/liberty/install-guide-rdo

3)两台虚拟机,安装 centos7 系统(准备两个网卡,一个 NAT,另一个仅主机)

4)nat 网卡设置 ip,可以联网,仅主机的网卡只要我们 windows 可以通就行,主要是用于 xshell 远程连接

5)关闭 selinuxl、关闭 iptables

systemctl stop firewalld

systemctl disable firewalld

6)关闭 NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager

7)CentOS 7 配置 iptables

参考文档:http://www.linuxidc.com/Linux/2017-04/142964.htm

8)定义密码,在部署 openstack 过程中会在多个地方使用到密码,为了方便管理和安全设置,我们需要提前先定义好密码,使用命令 mkpasswd -s 0 生成随机字符串

账号 描述 密码
Database passwordRoot password for the databasetn1Pi6Ytm
ADMIN_PASSPassword of user admin3qiVpzU2x
CEILOMETER_DBPASSDatabase password for the Telemetry serviceCzn3bF1hm
CEILOMETER_PASSPassword of Telemetry service userceilometerabquh12GU
CINDER_DBPASSDatabase password for the Block StorageserviceO3bwbpoZ3
CINDER_PASSPassword of Block Storage service usercinderhf8LX9bow
DASH_DBPASSDatabase password for the dashboard5qBZxnn1g
DEMO_PASSPassword of user demo9TtbgaA1q
GLANCE_DBPASSDatabase password for Image serviceZznky4tP0
GLANCE_PASSPassword of Image service user glanceWuyaf4cV6
HEAT_DBPASSDatabase password for the Orchestrationserviceb7Fk5wjLg
HEAT_DOMAIN_PASSPassword of Orchestration domain7Gotb3eoH
HEAT_PASSPassword of Orchestration service userheateqQ2jLgz0
KEYSTONE_DBPASSDatabase password of Identity servicef6zx0gURv
NEUTRON_DBPASSDatabase password for the Networking service  quidyOC50
NEUTRON_PASSPassword of Networking service userneutronmdcGVl29i
NOVA_DBPASSDatabase password for Compute serviceRYgv0rg7p
NOVA_PASSPassword of Compute service user novahsSNsqc43
RABBIT_PASSPassword of user guest of RabbitMQo3NXovnz5
SWIFT_PASSPassword of Object Storage service userswift6ci5xWOdk
METADATA_SECRET m8uhmQTu2

9)设置主机名

两台机器都设置 hostname

hostnamectl set-hostname controller

hostnamectl set-hostname compute

编辑 /etc/hosts:

192.168.16.111  controller

192.168.16.112  compute

10)同步时间

controller 上:

yum install -y chrony 

vim /etc/chrony.conf                     // 增加或更改

allow 192.168.16.0/24

保存后,执行

systemctl enable chronyd.service

systemctl start chronyd.service

compute 上:

yum install -y chrony

vim /etc/chrony.conf                     // 增加或更改

server controller iburst

保存后,执行

systemctl enable chronyd.service

systemctl start chronyd.service

4.2、安装 openstack

1)安装 openstack 的 yum 源(两个机器上都操作)

yum install -y centos-release-openstack-liberty

2)升级所有的包(两个机器上都操作)

yum upgrade                              // 结束后重启系统

3)安装 openstack 客户端和 openstack-selinux

yum install -y python-openstackclient openstack-selinux

以下 4.3-4.12 步骤若无特殊说明则默认表示在  controller 机器上执行操作

4.3、安装 sql 服务

1)安装

yum install -y mariadb mariadb-server MySQL-python

2)编辑配置文件

vim /etc/my.cnf.d/mariadb_openstack.cnf  // 加入下面内容

[mysqld]

bind-address= 192.168.16.111

default-storage-engine= innodb

innodb_file_per_table

collation-server= utf8_general_ci

init-connect= ‘SET NAMES utf8’

character-set-server= utf8

3)启动 mariadb:

systemctl enable mariadb.service

systemctl start mariadb.service

4)安全配置,设置 root 密码

mysql_secure_installation

设置 root 密码为:tn1Pi6Ytm

4.4、安装 nosql

1)nosql 数据库被 Telemetry service 用到,在这里我们安装的是 mongodb

yum install -y mongodb-server mongodb

2)编辑配置文件

vim /etc/mongod.conf   // 更改如下配置

bind_ip= 192.168.16.111

smallfiles= true

3)启动服务

systemctl enable mongod.service

systemctl start mongod.service

4.5、安装消息队列

1)rabbitmq 消息队列服务在 openstack 中起到非常关键的作用,它好比是一个交通枢纽,各个组件之间的通信由它来完成。

yum install -y rabbitmq-server

2)启动 rabbitmq-server 服务

systemctl enable rabbitmq-server

systemctl start rabbitmq-server

3)添加 openstack 用户

rabbitmqctl add_user openstack o3NXovnz5        // 用户名为 openstack,密码为 o3NXovnz5

4)为 openstack 用户授权

rabbitmqctl set_permissions openstack “.*” “.*” “.*”

允许 openstack 用户可以配置,可以写,可以读

4.6、增加 identity 

1、keystone 介绍

1)identity 即 keystone,它是 openstack 的验证中心,所有的服务都由它来认证。

参考: http://www.linuxidc.com/Linux/2017-04/142972.htm

2)在 keyston 中有以下角色:tenants(租户或项目)、用户、角色、服务目录和端点

3)如果把宾馆比作为 Tenant,住宿的人就是 User,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的 VIP 等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。

4)以创建一个虚拟机(server)为例,keystone 在 openstack 的访问流程大致如下:

a、用户 Alice 通过自己的户名和密码向 keystone 申请 token,keystone 认证用户名和密码后,返回 token1

b、Alice 通过 token1 发送 keystone 查询他所拥有的租户,keystone 验证 token1 成功后,返回 Alice 的所有 Tenant

c、Alice 选择一个租户,通过用户名和密码申请 token,keystone 认证用户名、密码、tenant 后,返回 token2。(其实 1、2 步仅仅是为了查询 tenant,如果已经知道 tenant,可以忽略 1、2 步)

d、Alice 通过 token2 发送创建 server 的请求,keystone 验证 token2(包括该 token 是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到 nova,最终创建虚拟机

2、前期准备

1)登陆 mysql,创建数据库
mysql -uroot -ptn1Pi6Ytm

>createdatabase keystone;

>GRANTALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘f6zx0gURv’;

>GRANTALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘f6zx0gURv’;

说明:创建一个 keystone 库,并且授权给 keystone 用户所有权限,密码为 f6zx0gURv

2)安装相关的包

yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached

3)启动 memcached 服务

systemctl enable memcached.service

systemctl start memcached.service

3、编辑配置文件

编辑 keystone 配置文件

vim /etc/keystone/keystone.conf      // 修改或增加配置如下

[DEFAULT]

admin_token= 3qiVpzU2x

verbose= true

[database]

connection= mysql://keystone:f6zx0gURv@controller/keystone

[memcache]

servers= localhost:11211

[token]

provider= uuid

driver= memcache

[revoke]

driver= sql

 

4、导入数据

1)导入 keystone 相关的数据

su -s /bin/sh -c “keystone-manage db_sync” keystone

注意:这里会有个提示 Nohandlers could be found for logger “oslo_config.cfg” 忽略它,不影响

2)检查有没有正常导入数据:

mysql -ukeystone -pf6zx0gURv -hcontroller -t keystone -e  “show tables”

看是否有列出表来,如果是空,说明没有成功导入数据

5、配置 httpd

1)先编辑 apache 配置文件

vim /etc/httpd/conf/httpd.conf    // 增加或更改

ServerName controller

2)编辑配置文件

vim /etc/httpd/conf.d/wsgi-keystone.conf    // 内容如下

Listen5000

Listen35357

<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

Allowf rom all

</IfVersion>

</Directory>

</VirtualHost>

 

3)启动 apache

systemctl enable httpd.service

systemctl start httpd.service

 

6、创建服务实例

1)设置环境变量:

export OS_TOKEN=3qiVpzU2x

export OS_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

2)创建服务实例

openstack service create –name keystone–description “OpenStack Identity” identity

3)创建端点

openstack endpoint create –region RegionOne identity public http://controller:5000/v2.0

openstack endpoint create –region RegionOne identity internal http://controller:5000/v2.0

openstack endpoint create –region RegionOne identity admin http://controller:35357/v2.0

4)创建 admin 租户

openstack project create –domain default –description “Admin Project” admin

5)创建 admin 用户(密码为 3qiVpzU2x)

openstack user create –domain default –password-prompt admin 

 

6)创建 admin 角色

openstack role create admin

7)添加 admin 角色到 admin 租户和用户

openstack role add –project admin –user admin admin

8)创建 service 租户

openstack project create –domain default –description “Service Project” service

9)创建 demo 租户

openstack project create –domain default –description “Demo Project” demo

10)创建 demo 用户(密码 9TtbgaA1q)

openstack user create –domain default –password-prompt demo

11)创建角色 user

openstack role create user

12)添加 user 角色到 demo 租户和 demo 用户

openstack role add –project demo –user demo user

 

7、验证操作

验证 admin 用户和 demo 用户是否能正常登陆

1)首先做一个安全设置:

vim /usr/share/keystone/keystone-dist-paste.ini

搜索 admin_token_auth,[pipeline:public_api],[pipeline:admin_api][pipeline:api_v3] 中,把 admin_token_auth 去掉

例如

pipeline= sizelimit url_normalize request_id build_auth_context token_auth admin_token_auth json_body ec2_extension user_crud_extension public_service

改为:

pipeline= sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension user_crud_extension public_service

2)取消环境变量 OS_TOKEN 和 OS_URL

unset OS_TOKEN OS_URL

3)然后再登陆 admin 和 demo 用户

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

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

4)创建两个 openstack 客户端脚本

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=3qiVpzU2x

export OS_AUTH_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

执行脚本

source admin-openrc.sh

申请认证令牌

openstack token issue

vim demo-openrc.sh  // 内容

export OS_PROJECT_DOMAIN_ID=default

export OS_USER_DOMAIN_ID=default

export OS_PROJECT_NAME=demo

export OS_TENANT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=9TtbgaA1q

export OS_AUTH_URL=http://controller:5000/v3

export OS_IDENTITY_API_VERSION=3

执行脚本

source demo-openrc.sh

申请认证令牌

openstack token issue

 

4.7、增加 image

1、前期准备

image 又叫做 glance,是用来管理镜像的一个组件,我们用镜像来安装操作系统。glance 支持让用户自己管理自定义镜像。

1)创建 glance 库和用户

mysql -uroot -ptn1Pi6Ytm

>CREATE database glance;

>GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’localhost’ IDENTIFIED BY ‘Zznky4tP0’;

>GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’%’ IDENTIFIED BY ‘Zznky4tP0’;

2)执行 admin-openrc.sh 脚本

source admin-openrc.sh

3)创建 glance 用户(密码为 hf8LX9bow)

openstack user create –domain default –password-prompt glance

4)把 admin 角色添加到 glance 用户和 service 租户

openstack role add –project service –user glance admin

5)创建 glance 服务实体

openstack service create –name glance –description “OpenStack Image service” image

6)创建 image 服务 api 端点

openstack endpoint create –region RegionOne image public http://controller:9292

openstack endpoint create –region RegionOne image internal http://controller:9292

openstack endpoint create –region RegionOne image admin http://controller:9292

2、安装和配置

1)安装包

yum install -y openstack-glance python-glance python-glanceclient

2)编辑配置文件

vim /etc/glance/glance-api.conf          // 更改或增加

[database]

connection= mysql://glance:Zznky4tP0@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= hf8LX9bow

 

[paste_deploy]

flavor= keystone

[glance_store]

default_store= file

filesystem_store_datadir= /var/lib/glance/images/

[DEFAULT]

notificaction_driver= noop

verbose=True

vim /etc/glance/glance-registry.conf          // 更改或增加

[DEFAULT]

notificaction_driver= noop

verbose=True

[database]

connection= mysql://glance:Zznky4tP0@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= hf8LX9bow

[paste_deploy]

flavor= keystone

3)同步 glance 数据库数据

su -s /bin/sh -c “glance-manage db_sync” glance

4)启动服务

systemctl enable openstack-glance-api.service openstack-glance-registry.service

systemctl start openstack-glance-api.service openstack-glance-registry.service

3、验证操作

1)添加环境变量

echo”export OS_IMAGE_API_VERSION=2″  | tee -a admin-openrc.sh demo-openrc.sh

2)执行 admin-openrc.sh

source admin-openrc.sh

3)下载镜像

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

4)把刚刚下载的镜像上传到镜像服务中心

glance image-create –name “cirros” \

–file cirros-0.3.4-x86_64-disk.img \

–disk-format qcow2 –container-format bare \

–visibility public –progress

然后我们可以在 /var/lib/glance/images/ 目录下看到一个文件,这个就是刚刚上传的镜像,你会发现这个文件的名字和 id 是一致的。使用命令:

glance image-list                // 可以查看镜像列表

 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-04/142972p2.htm

 

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计40137字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中