openstack.md
一、为什么需要云计算
1. 网格
基础是虚拟化,前身是网格(分布式)计算
oracl 发展:intnet--grade--cluster 即网格计算的发展。
云计算发展历程:
单主机多用户:资源依赖,互相影响,无隔离
单主机多虚拟机:资源共享,互相隔离,动作响应慢。
多主机多虚拟机
云计算:使用计算资源使用网络资环像使用自来水一样按需自由有偿。
二、云计算的分类
私有云,公有云,混合云
目前企业混合方案:
用户访问量大方公有云
安全性高计算量大用私有云
从第二种开始分别是IAAS(基础设施服务,腾讯云,阿里云,aws),PAAS(平台即服务新浪云),SAAS(软件即服务offcie365 B/S服务式使用办公软件)
有的厂商扩容硬盘不需要提前做lvm,有的需要提前做,肯定前者方便。
三、openstack
开源平台的选择:
- API接口的广泛性
- 使用何种开源协议进行编写
- 平台的成熟度
openstack 特性:
- API对接亚马逊平台
- 使用Apache协议开源
- 一个框架多组件
- 是哟和哪个Python开发
- 混合云
版本历程:
1. 组件说明
选择了Juno版本
2. 安装结构说明
软硬件版本及资源要求
网络结构拓扑及网卡数量(对应ip地址的数量)
3. 基础环境构建
全部机器controller,compute,block,neutron所有网卡使用主机网络=》这样就需要自己准备本地YUM源(对应版本的操作系统)
windows端工具软件server-u(ftp服务端服务器:放yum源和系统镜像)
创建一个新的用户这个用户可以通过文件浏览器ftp协议访问server-u指定的根目录数据
3-1. 环境初始化
3-1-1. ftp本地yum源配置ftp.repo样例如下
- # 三台机器都要做
- #先决条件
- ## 关闭NetworkManager
- systemctl stop NetworkManager
- systemctl disable NetworkManager
- ## 关闭防火墙
- systemctl stop firewalld
- systemctl disable firewalld
- ## 设置主机名
- hostnamectl set-hostname xx.xx.xx
- ## 关闭SELINUX
- # 配置Dns服务器或者使用hosts进行主机名的IP对应:demo如下
- controller.nice.com 192.168.x.5
- network.nice.com 192.168.x.6
- compute1.nice.com 192.168.x.10
- compute2.nice.com 192.168.x.11
- block1.nice.com 192.168.x.20
- block2.nice.com 192.168.x.21
- object.nice.com 192.168.x.30
- object.nice.com 192.168.x.31
- # 配置时间同步服务器
- controller.nice.com ntp server controller
- other server ntp client
- # 安装openstack 预备包
- ## 安装yum-plugin-priorities 包,防止高优先级软件被低优先级软件覆盖
- yum -y install yum-plugin-priorities
- ## 安装epel扩展yum源
- yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
- ## 安装openstack yum源
- yum -y install http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
- ## 更新操作系统
- yum upgrade
- ## 安装openstack-selinux 自动管理selinux
- yum -y install openstack-selinux
- # 打虚拟机快照
3-1-2. 组件安装
- yum -y install vim net-tools
- # 为controller节点安装数据库
- ## 安装mariadb软件包
- yum -y install mariadb mariadb-server MySQL-python
- ## 编辑/etc/yum.cnf文件,设置绑定IP,默认数据库引擎及默字符集为UTF-8
- [mysql]
- bind-address=192.168.x.5
- 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
- systemctl start mariadb
- ## 初始化数据库脚本
- mysql_secure_installation
- # 安装Messaing Server 服务
- ## 功能:协调操作和状态信息服务
- ## 常用消息代理软件RabbitMQ Opid,ZeroMQ
- ## 在controller 节点安装RabbitMq
- ### 安装RabbitMQ软件包
- yum -y install rabbitmq-server
- ### 启动服务并设置开机自启动
- systemctl enable rabbitmq-server
- systemctl start rabbitmq-server
- ### rabbitmq默认用户名和密码guest,可以通过以下命令修改
- rabbitmqctl change_password guest new_password
3-1-2-1. keystone
3-1-2-1-1. 组件说明
keystone 是 openstack Identity Service的项目名称,是一个负责身份管理和授权的组件
主要功能:实现用户的身份认证,基于角色的权限管理,及openstack其他组件的访问地址和安全策略管理。
主要目的是给整个openstack的各个组件提供一个统一的认证方式。
用户管理:账户,认证,授权
服务目录管理
C/S一般走tcp协议,B/S一般http协议
User:一个人,系统或服务在Openstack中的数字表示,已经登陆的用户分配令牌环以访问资源。用户可以直接分配给特定的租户,就想隶属于某个组。
Credentials:(凭证)用于确认用户身份的数据。例如:用户名和密码,用户名和API key,或由认证服务提供的身份验证令牌
Authentication:(验证)确认用户身份的过程。
Token(令牌):一个用于访问OpnstackAPI和资源的字母数字字符串。一个令牌可以随时撤销,并且持续一段时间有效。
Tenant(租户):一个组织或者孤立资源的容器。租户可以组织和隔离认证对象。根据服务运营的要求,一个租户可以映射到客户,账号,组织或项目。
Service(服务):openstack服务,例如计算服务(nova),对象存储服务swift,镜像服务glance.它提供一个或多个端点,供用户访问资源和执行操作。
Endpoint(端点):一个用于访问某个服务的可以通过网络进行访问的地址,通常是一个URL地址。
Role(角色): 定制化的包含特定用户权限和特权的权限集合
Keystone Client(keystone 命令行工具) Keystone的命令行工具,通过该工具可以创建用户,角色,服务和端点等。 C/S结构
3-1-2-1-2. 组件之间沟通方式
组件时序图
角色相关交互图
3-1-2-1-3. 构建实验
- #接着组件安装继续
- ## 创建认证数据库
- mysql -uroot -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';
- ##生成一个随机值作为管理令牌在初始配置
- openssl rand -hex 10;
- # 安装和配置认证组件keystone;安装软件包
- yum -y install openstack-keystone python-keystoneclient
- ## 编辑/etc/keystone/keyston.conf文件,做下列修改
- ### 修改[DEFAULT]小节,定会初始管理令牌
- [DEFAULT]
- ....
- admin_token=刚才生成的随机值
- ### 修改[database]小节,配置数据库访问
- [database]
- ...
- connection=mysql://keystone:keystone_dbpass@controller.nice.com/keystone
- ### 修改[token]小节配置UUID提供者和sql驱动
- [token]
- ...
- provider=keystone.token.providers.uuid.Provider
- driver=keystone.token.persistence.backends.sql.Token
- ### (可选)开启详细日志,协助故障排除
- [DEFAULT]
- ...
- verbose=True
- ## 常见通用证书的秘钥,并限制相关文件的访问权限
- keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
- chown -R keystone:keystone /var/log/kehystone
- chown -R keystone:keystone /etc/keystone/ssl
- chmod -R p-rwx /etc/keystone/ssl
- ## 初始化keystone数据库
- su -s /bin/sh -c "keystone-manage db_sync" keystone
- # 完成安装
- ## 开启identity服务并开机启动
- systemctl enable openstack-keystone.service
- systemctl start openstack-keystone.service
- ## 默认情况下,服务器会无限存储到期的令牌,在资源有限情况下会验证影响服务器性能,建议用计划任务,每小时删除过期的令牌
- (crontab -l -u keystone 2>&1 | grep -q token_flush) || echo '@hourly /usr/bin/keystone-manage.token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >>/var/spool/cron/keystone
- # 创建tenants租户,users用户,roles角色
- ## 配置先决条件
- ### 配置管理员令牌
- export OS_SERVICE_TOKEN=刚才生成的字符串
- ### 配置端点
- export OS_SERVICE_ENDPOINT=http://controller.nice.com:35357/v2.0
- ## 创建租户,用户和角色
- ### 创建admin租户
- keystone tenant-create --name admin --description "Admin Tenant"
- ### 创建admin用户
- keystone user-create --name admin --pass admin_pass --email EMAIL_ADDRESS
- ### 创建admin 角色
- keystone role-create --name admin
- ### 添加admin组合和用户到admin角色
- keystone user-role-add --tenant admin --user admin --role admin
- ### 创建dashboard访问的“_member_”角色
- keystone role-create --name _member_
- ### 添加admin租户和用户到_member_角色
- keystone user-role-add --tenant admin --user admin --role _member_
- ## 创建一个用于演示的demo租户和用户
- ### 创建demo租户
- keystone tenant-create --name demo --description "Demo Tenant"
- ### 创建demo用户
- keystone user-create --name demo --pass demo_pass --email EMAIL_ADDRESS
- ### 添加demo组合和用户到_member_角色
- keystone user-role-add -tenant demo --user demo --role _member_
- ##Openstack服务也需要一个租户,用户和角色 和其他服务进行交互,因此我们创建一个service的租户。任何一个openstack服务都要和他关联
- keystone tenant-create --name service --description "Service Tenant"
- ## 创建服务实体(服务名称)和API端点(路径)
- ### 在openstack环境中,identity服务管理一个服务目录,并使用这个目录在openstack环境中定位其他服务,为indentity服务创建一个服务实体
- keystone service-create --name keystone --type identity --description "Openstack Identity"
- ### openstack 环境中,identity服务管理目录以及与服务相关API端点,服务使用这个目录来沟通其他服务。OpenStack为每个服务提供了三个API端点:admin(管理),internal(内部),public(公共)。
- ### 为identity服务创建API端点。
- renkeystone endpoint-create --service-id $(keystone service-list | awk '/identity/{print $2}') --publicurl http://controller.nice.com:5000/v2.0 --internalurl http://controller.nice.com:5000/v2.0 --adminurl http://controller.nice.com:35357/v2.0 --region regionOne
- ## 确认操作
- ### 删除OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT临时变量
- unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
- ### 使用admin租户和用户请求认证令牌
- keystone --os-tenant-name admin --os-username admin --os-password admin_pass --os-auth-url http://controller.nice.com:35357/v2.0 token-get
- ### 以admin租户和用户的身份查看租户列表
- keystone --os-tenant-name admin --os-username admin --os-password admin_pass --os-auth-url http://controller.nice.com:35357/v2.0 tenant-list
- ### 以admin租户和用户的身份查看用户列表
- keystone --os-tenant-name admin --os-username admin --os-password admin_pass --os-auth-url http://controller.nice.com:35357/v2.0 user-list
- ### 以demo用户请求认证令牌并查看用户列表发现403错误,权限认证生效,拒绝查看。
- ## 创建Openstack客户端环境脚本
- ### 为了方便使用上面的环境变量和命令选项,我们为admin和demo租户创建环境脚本
- ### 编辑admin-openrc.sh
- export OS_TENANT_NAME=admin
- export OS_USERNAME=admin
- export OS_PASSWORD=admin_pass
- export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
- ### 编辑demo-openrc.sh
- export OS_TENANT_NAME=demo
- export OS_USERNAME=demo
- export OS_PASSWORD=demo_pass
- export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
- ### 加载客户端环境脚本
- source admin-openrc.sh
3-1-2-2. Glance服务
3-1-2-2-1. 相关说明
- openstack镜像服务使用户能够发现,注册并检索虚拟机镜像
- 提供一个rest api 接口,使用户可以查询虚拟机镜像元数据和jiansu8o一个实际的镜像文件
- 不论是简单的文件系统还是openstack对象存储,你都可以通过镜像服务在不同位置存储虚拟机的镜像
- 默认情况下,上传的虚拟机镜像存储路径为/var/lib/glance/images/
glance-api: 一个用来接收镜像发现,检索和存储的API接口
glance-registry:用来存储,处理和检索镜像的元数据。元数据包含对象的大小和类型。glance-registry是一个openstack镜像服务使用的内部服务,不要透露给用户
Database:用于存储镜像的元数据的大小,类型,支持大多数数据库一般mysql,sqlite
Storage repository for image files: 镜像文件的存储仓库。支持包括普通文件系统在内的各种存储类型。包括对象存储、快设备、http,amazon s3,但有些存储只支持只读访问。
Image Identifiers: 就是image url 格式glance server location/imgages/ID
image status:
- queued:镜像ID已被保留,镜像还未上传
- saving:镜像正在被上传
- active:镜像可以使用了
- killed: 镜像损坏或者不可用
- deleted: 镜像被删除
Disk format:
- Raw:不支持扩容
- Vhd:vmware,xen,microsoft,virtualbox
- vmdk:common format
- vdi:virtualbox,qemu emulator
- ISO:optical disc
- Qcow2:qemu emulator
- Aki: Amazon kernel image
- Ari: Amazon ramdisk image
- Ami:Amazon machine image
Container format:
- Bare
- Ovf:支持动态扩容
- Aki,Ami,Ari
工作流程:
3-1-2-2-2. 构建实验
先决条件
- # 创建数据库
- ## 以数据库管理root登录数据库,创建glance数据库
- 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';
- #启用admin环境脚本
- source admin-openrc.sh
- #创建认证服务凭证,完成以下步骤
- ## 创建glance用户
- keystone user-create --name glance --pass GLANCE_PASS
- ## 将glance用户连接service租户和admin角色
- keystone user-role-add --user glance --tenant service --role admin
- ## 创建glance服务
- keystone service-create --name glacne --type image --description "OpenStack image"
- ## 为OpenStack镜像服务创建认证服务端点
- keystone endpoint-create --service-id $(keystone service-list|awk '/image/{print $2}') --publicurl http://controller.nice.com:9292 --internalurl http://controller.nice.com:9292 --adminurl http://controller.nice.com:9292 --region regionOne
安装glance组件服务端及客户端工具
- # 安装软件包
- yum -y install openstack-glance python-glanceclient
- # 编辑/etc/glance/glance-api.conf文件,并完成下列操作
- ## 修改[database]小节,配置数据库连接
- [database]
- ...
- connection=mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
- ## 修改[keystone_authtoken]和[paste_deploy]小节,配置认证服务访问:
- [keystone_authtoken]
- ...
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=glance
- admin_password=GLANCE_PASS
- [paste_deploy]
- ...
- flavor=keystone
- ## 可选配置日志详情输出
- [DEFAULT]
- ...
- verbose=True
- #编辑/etc/glance/glance-registry.conf文件,并完成下列配置:
- ##在[database]小节中配置数据库连接
- [database]
- ...
- connection=mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
- ## 修改[keystone_authtoken]和[paste_deploy]小节,配置认证服务访问
- [keystone_authtoken]
- ...
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=glance
- admin_password=GLANCE_PASS
- [paste_deploy]
- ...
- flavor=keystone #认证方案
- ## 在[glance_store]配置本地文件系统存储和镜像文件的存放路径
- [glance_store]
- ...
- default_store=file
- filesystem_store_datadir=/var/lib/glance/images/
- ## 配置文件输出
- [DEFAULT]
- ...
- verbose=True
- #初始化镜像服务的数据库
- su -s /bin/sh -c "glance-manage db_sync" glance
- #开机启动服务
- systemctl enable openstack-glance-api.service openstack-glance-registry.service
- #启动服务
- systemctl start openstack-glance-api.service openstack-glance-registry.service
验证安装
- #使用cirros镜像验证
- mkdir /tmp/images
- cd /tmp/images
- wget http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
- #运行admin环境脚本
- source admin-openrc.sh
- #上传镜像文件到镜像服务器
- glance image-create --name "cirros-0.3.3-x86_64" --file cirros-0.3.3-x86_64-disk.img --disk-format qcow2 --container-format bare --is-public True --progress
- # 确认镜像文件上传并验证属性
- glance image-list
- #删除临时目录
- rm -r /tmp/images
3-1-2-3. Nova计算服务
3-1-2-3-1. 相关说明
openstack 是又Rackspace和NASA共同开发的云计算平台
Amazon EC2 和s3的云基础架构服务
Nova在openstack中提供云计算卷服务;超过140加企业18470个开发者参与研发。
nova-api service:接收并响应中断用户计算api的调用。服务支持openstack的计算api,amazon ec2和特殊管理特权api
nova-api-metadata service: 接受从实例元数据发来的请求。该服务通常与nova-network服务在安装多主机模式下运行。
nova-compute service :一个守护进程,通过虚拟化层api接口创建和终止虚拟机实例。如:XenAPI for xenserver/XCP,libvirt for kvm or qemu,vmwareapi for vmware
nova-scheduler service: 从队列中获取虚拟机实例请求,并确认由哪台计算服务运行该虚拟机
nova-conductor module: 协调nova-compute 服务和database 之间的交互数据,避免nova-compute 服务直接访问云数据库,不要讲该模块部署在nova-compute节点上
nova-network worker daemon: 类似于nova-compute服务,接受来自队列的网络任务和操控网络。比如这只网卡桥接或者改变iptables规则
nova-consoleauth daemon:在控制台代理提供用户授权令牌
nova-novncproxy daemon:提供了一个通过vnc连接来访问运行的虚拟机实例的代理。支持基于浏览器的novnc客户端。
nova-spicehtml5proxy daemon:提供通过spice连接访问虚拟机实例的代理。基于html5浏览器客户端
nova-xvpnvncproxy daemon::提供了一个通过vnc连接来访问运行的虚拟机实例的代理。支持openstack specific java客户端
nova-cert daemon: x509证书
nova-odjectstone dameon:amazon s3接口,用于将s3镜像注册到openstack
euca2ools client: 用于兼容与 e2接口的命令行工具
nova client: nova 命令行工具
The queue:进程间传递消息的中心,通常使用rabbitmq
SQL dababase:保存云基础设置建立和运行时的状态信息,mysql
流程
nova内部沟通
nova与其他组件间沟通
虚拟机启动流程:触发更新监控信息(可以保证剩余资源的实时性也防止监控更新频率过高导致的资源浪费)
3-1-2-3-2. 服务构建实验
- #确定系统初始环境状态
- systemctl status firewalld
- systemctl status mariadb
- systemctl status NetworkManager
- systemctl status ntpd
- ## selinx
- getenforce
- #主机名
- hostname
- #安装ntp客户端工具
- yum -y install ntpdate
- 先决条件
- # 创建数据库并授权
- create database nova;
- grant ALL privileges On nova.* TO 'nova'@'localhost' identified by 'NOVA_DBPASS'
- grant ALL privileges On nova.* TO 'nova'@'%' identified by 'NOVA_DBPASS'
- #创建认证信息
- ## 执行环境脚本
- source admin-openrc.sh
- ## 创建nova用户
- keystone user-create --name nova --pass NOVA_PASS
- ## 连接nova用户到service租户和admin角色
- keystone user-role-add --user nova --tenant service --role admin
- ## 创建nova服务
- keystone service-create --name nova --type compute --description "Openstack compute"
- #创建服务端点
- keystone endpoint create --service-id $(keystone service -list|awk '/compute/{print $2}') --publicurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --internalurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --adminurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --region regionOne
- 安装和配置计算控制节点(controller)
- #安装软件包
- yum -y 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_DBPASS@controller.nice.com/nova
- [DEFAULT]
- rpc_backend=rabbit
- rabbit_host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_stragy=keystone
- verbose=True
- ## my——ip选项为controller节点的管理接口ip
- my_ip=192.168.x.5
- ## vnc监听地址
- vncserver_listen=192.168.222.5
- ## vnc代理端地址
- vncserver_proxyclient_address=192.168.222.5
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=nova
- admin_password=NOVA_PASS
- [glance]
- host=controller.nice.com #镜像服务器地址
- #还原初始化数据库
- su -s /bin/sh -c "nova-manage db sync" nova
- 完成安装
- #开启服务并开机启动
- 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
- 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
3-1-2-3-3. 安装配置一个compute节点
- 安装并配置计算虚拟化组件
- #安装软件包
- yum -y isntall openstack-nova-compute sysfsutils
- #编辑/etc/nova/nova.conf配置文件
- [DEFAULT]
- rpc_backend=rabbit
- rabbit_host=controller.nice.com
- rabbit_password=RABBIT_PASS
- verbose=True
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=nova
- admin_password=NOVA_PASS
- my_ip=192.168.x.5 # 管理网络网卡地址
- vnc_enable=True
- vncserver_listen=0.0.0.0
- vncserver_proxyclient_address=MANAGEMENT_INTERFACE_IP_ADDRESS # 管理网络网卡地址
- novncproxy_base_url=http://controller.nice.com:6080/vnc_auto.html
- [glance]
- host=controller.nice.com
- 完成安装
- #确认节点是否支持硬件虚拟化 返回值》1支持;
- egrep -c '(vmx|svm)' /proc/cpuinfo
- ## 返回值=0需要配置/etc/nova/nova.conf
- [libvirt]
- virt_type=qemu
- #启动计算服务及其依赖服务并设置开机启动
- systemctl enable libvirtd.service openstack-nova-compute.service
- systemctl start libvirtd.service
- systemctl start openstack-nova-compute.service
- 在controller上验证安装
- source admin-openrc.sh
- nova service-list
- nova image-list
3-1-2-4. Neutron
3-1-2-4-1. 网络相关知识
七层网络环境
网络拓扑公网-猫-路由器-交换机-设备
混杂模式开启标识
网络命名空间
叠加网络
GRE/SDN网络优缺点
解决问题
open vswitch
3-1-2-4-2. Neutron
三种网络实现
- FLAT
- flatdhcp
网络控制器运行dnsmasp作为dhcp服务其监听这个网桥 - Vlan:限制4096个
存在的问题:
- 传统桥接模式
- 用户不能自定义网段
- 网络隔离
- 大规模部署
针对问题的需求:
neutron能力
neutron概念:
Network:
- 一个L2网络单元
- 租户可通过API创建自己的网络
Subnet:
- 一段ipv4/ipv6地址段
- 为实例提供私网或公网地址
Router:
- 三层路由器
- 为租户的实例提供路由功能
Port:
- 虚拟交换机上的端口
- 管理实例的网卡
概念er图数量对应关系
neutron和nova架构
neutron组件流程
ml2插件介绍
ml2构建模式
因为ml2不同协议所以对应以下部署方案:最常用最后一个
- Single flat NetWork
- Multi flat network
- Mixed FLAT and private network
- provider router with private network
- per-tenant Routers with Private Network
3-1-2-4-3. 代码构建
先决条件
- --controller节点配置先决条件!!!基本上所有地方都是这样
- -- 创建数据库并授权
- create database neutron;
- grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'NEUTRON_DBPASS';
- grant all privileges on neutron.* to 'neutron'@'%' identified by 'NEUTRON_DBPASS';
- #环境变量
- source admin-openrc.sh
- # 创建网络服务的认证信息
- keystone user-create --name neutron --pass NEUTRON_PASS
- keystone user-role-add --user neutron --tenant service --role admin
- keystone service-create --name neutron --thype network --description "OpenStack Networking"
- keystone endpoint-create --service-id $(keystone service-list|awk '/network/{print $2}') --publicurl http://controller.nice.com:9696 --adminurl http://controller.nice.com:9696 --internalurl http://controller.nice.com:9696 --region regionOne
安装服务组件
- yum -y install openstack-neutron openstack-neutron-ml2 python-neutronclient which
配置网络服务组件
- ##/etc/neutron/neutron.conf
- [database]
- connection=mysql://neutron:NEUTRON_DBPASS@controller.nice.com/neutron
- [DEFAULT]
- rpc_backend=rabbit
- rabbit_host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_strategy=keystone
- verbose=true
- ## 启用Modular Layer2插件
- core_plugin=ml2
- service_plugins=router
- ## 配置当网络图谱结构发生变化时通知计算服务
- notify_nova_on_port_status_changes=True
- notify_nova_on_port_data_changes=True
- nova_url=http://controller.nice.com:8774/v2
- nova_admin_auth_url=http://controller.nice.com:35357/v2.0
- nova_region_name=regionOne
- nova_admin_username=nova
- nova_admin_tenant_id=SERVICE_TENANT_ID
- nova_admin_password=NOVA_PASS
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=neutron
- admin_password=NEUTRON_PASS
- # 配置Modular layer 2 plugin
- ##/etc/neutron/plugins/ml2/ml2_conf.ini
- ### 启用flat和generic routing encapsulation(gre)网络类型驱动,配置gre租户网络和ovs驱动机制
- [ml2]
- type_drivers=flat,gre
- tenant_network_types=gre
- mechanism_drivers=openvswitch
- #### 配置隧道标识范围
- [ml2_thype_gre]
- tunnel_id_ranges=1:1000
- #### 启用安全组,启用ipset并配置ovs防火墙驱动
- [securitygroup]
- enable_security_group=True
- enable_ipset=True
- firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
- #配置计算服务使用Neutron
- ## /etc/nova/nova.conf
- ### 配置接口和驱动程序
- [DEFAULT]
- network_api_class=nova.network.neutronv2.api.API
- security_group_api=neutron
- linuxnet_interface_driver=nova.network.linux_net.linuxOVSInterfaceDriver
- firewall_dirver=nova.virt.firewall.NoopFirewallDriver
- ### 配置访问参数
- [neutron]
- url=http://controller.nice.com:9696
- auth_strategy=keystone
- admin_auth_url=http://controller.nice.com:35357/v2.0
- admin_tenant_name=service
- admin_username=neutron
- admin_password=NEUTRON_PASS
完成配置
- #为ml2插件配置文件创建连接文件
- ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
- #初始化数据库
- su -s /bin/bash -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
- #重新启动计算服务
- systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstac-nova-conductor.service
- #启动网络服务并配置开机自启动
- systemctl enable neutron-server.service
- systemctl start neutron-server.service
验证
- source admin-openrc.sh
- neutron ext-list #列出确认加载的扩展模块
3-1-2-4-4. 安装network节点(neutron章节)
- 配置先决条件
- #/etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
- ## 使更改生效
- sysctl -p
- 安装网络组件
- yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch
- 配置网络通用组件
- #/etc/neutron/neutron.conf
- ##[database]小节注释任何connection选项,因为network节点不能直接连接数据库
- [DEFAULT]
- rpc_backend=rabbit
- rabbit-host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_strategy=keystone
- ## 启用ml2
- core_plugin=ml2
- service_plugins=router
- all_overlapping_ips=True
- verbose=True
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=neutron
- admin_password=NEUTRON_PASS
- 配置Modular layer2 plugin
- #/etc/neutron/plugins/ml2/ml2_conf.ini
- [ml2]
- type_dirvers=flat,gre
- tenant_network_types=gre
- mechanism_drivers=openvswitch
- [ml2_type_falt]
- flat_networks=external #配置外部网络
- [ml2_type_gre]
- tunnel_id_ranges=1:1000
- [securitygroup]
- enable_security_group=True
- enable_ipset=True
- firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
- [ovs] #ovs代理配置
- local_ip=INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
- tunnel_type=gre
- enable_tunneling=True
- bridge_mappings=external:br-ex
- 配置layer-3 agent
- #/etc/neutron/l3.agent.ini
- [DEFAULT] #配置驱动,启用网络命名空间
- debug=True
- interface_driver=neutron.agent.linux.interface.OVSHybridIptablesFirewallDriver
- use_namespaces=True
- external_network_bridge=br-ex #配置(浮动)外部网络桥接
- 配置dhcp agent
- #/etc/neutron/dhcp_agent.ini
- ## 驱动及启用命名空间
- [DEFAULT]
- debug=True
- interface_driver=neutron.agent.linux.interface.OVSHybridIptablesFirewallDriver
- dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
- use_namespaces=True
- ## 可选如果是vmware虚拟机中可能于鏊配置dhcp讲mut改为1454bytes改善网络性能
- ###/etc/neutron/dhcp_agent.ini
- [DEFAULT]
- dnsmasq_config_file=/etc/neutron/dnsmasq-neutron.conf
- ####创建dnsmasq-neutron.conf文件启用dhcp mut配置选项26,1454是bytes
- dhcp-option-force=26,1454
- user=neutron
- group=neutron
- ####终止已经存在的dnsmasq进程
- pkill dnsmasq
- 配置meatadata agent
- #/etc/neutron/metadata_agent.ini
- [DEFAULT]
- auth_url=http://controller.nice.com:5000/v2.0
- auth_region=regionOne
- admin_tenant_name=service
- admin_user=neutron
- admin_password=NEUTRON_PASS
- nova_metadata_ip=controller.nice.com #元数据主机
- metadata_proxy_shared_secret=METADATA_SECRET #元数据代理共享机密暗号(随便起)
- verbose=True
- #在controller节点
- ##/etc/nova/nova.conf
- [neutron]
- service_metadata_proxy=True
- metadata_proxy_shared_secret=METADATA_SECRET
- ##在controller节点重启compute api服务
- systemctl restart openstack-nova-api.service
- 配置open vswitch(ovs)服务
- #启用vos服务
- systemctl enable openvswitch.service
- systemctl start openvswitch.service
- #添加外部网桥
- ovs-vsctl add-br br-ex
- #添加一个端口到外部网桥,用于连接外部物理网络
- ovs-vsctl add-port br-ex INTERFACE_NAME #把INTERFACE_NAME换成实际连接外部网卡接口名如eth2或eno50332208
- 完成安装
- #创建网络服务初始化脚本连接
- ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
- cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
- sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
- #启动服务及开机启动
- systemctl enable neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
- systemctl start neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
- 验证
- # 在controller节点执行
- source admin-openrc.sh
- neutron agent-list #列出neutron代理
3-1-2-4-5. 安装compute1节点(neutron章节)
- 先决条件
- #/etc/sysctl.conf
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
- #使生效
- sysctl -p
- 安装网络组件
- yum -y install openstack-neutron-ml2 openstack-neutron-openvswitch
- 配置网络通用组件
- #/etc/neutron/neutron.conf
- ## 注释掉[database]的connection所有配置项,因为计算节点不能直接连接数据库
- [DEFAULT]
- rpc_backend=rabbit
- rabbit-host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_strategy=keystone
- ## 启用ml2
- core_plugin=ml2
- service_plugins=router
- allow_overlapping_ips=True
- verbose=True
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=neutron
- admin_password=NEUTRON_PASS
- 配置Modular layer2 plugin
- #/etc/neutron/plugins/ml2/ml2_conf.ini
- [ml2]
- type_dirvers=flat,gre
- tenant_network_types=gre
- mechanism_drivers=openvswitch
- [ml2_type_falt]
- flat_networks=external #配置外部网络
- [ml2_type_gre]
- tunnel_id_ranges=1:1000
- [securitygroup]
- enable_security_group=True
- enable_ipset=True
- firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
- [ovs] #ovs代理配置
- local_ip=INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
- tunnel_type=gre
- enable_tunneling=True
- 配置open vswitch service
- systemctl enable openvswitch.service
- systemctl start openvswitch.service
- 配置计算服务使用网络
- #/etc/nova/nova.conf
- [DEFAULT]
- network_api_class=nova.network.neutronv2.api.API
- secrity_group_api=neutron
- linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
- firewall_driver=nova.virt.firewall.NoopFirewallDriver
- [neutron]
- url=http://controller.nice.com:9696
- auth_strategy=keystone
- admin_auth_url=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=neutron
- admin_password=NEUTRON_PASS
- 完成安装
- # 创建网络服务初始化脚本的符号连接
- ln -s /etc/neutron/plugins/ml2/ml2_config.ini /etc/neutron/plugin.ini
- cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
- sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lilb/systemd/system/neutron-openvswitch-agent.service
- #重启计算服务
- systemctl restart openstack-nova-compute.service
- #启动ovs代理服务并设置开机启动
- systemctl enable neutron-openvswitch-agent.service
- systemctl start neutron-openvswitch-agent.service
- 验证
- source admin-openrc.sh
- neutron agent-list
- 创建第一个网络
配置外部网络(在controller节点执行后面的命令)
创建一个外部网络
- source admin-openrc.sh
- neutron net-create ext-net --shared --router:external True --provider:physical_network external --provider:network_type flat
创建一个外部网络的子网
- neutron subnet-create ext-net --name ext-subnet --allocation-pool start=FLOATING_IP_START,end=FLOATING_IP_END --disable-dhcp --gateway EXTERNAL_NETWORK_GATEWAY EXTERNAL_NETWORK_CIDR #其实ip,结束ip,外部网络网关,外部网络网段
- 创建一个租户网络
- source demo-openrc.sh
- neutron net-create demo-net
- 创建一个租户网络的子网
- neutron subnet-create demo-net --name demo-subnet --gateway TENANT_NETWORK_GATEWAY TENANT_NETWORK_CIDR #租户网的网关,租户网的网段
- 在租户网络创建一个路由器,用来连接外部网和租户网
- #创建路由器
- neutron router-create demo-router
- #附件路由器到demo租户的子网
- neutron router-interface-add demo-router demo-subnet
- #设置网关,使路由器附加到外部网
- neutron router-gateway-set demo-router ext-net
- 确认连接
- neutron router-list
3-1-2-5. Horizon 仪表盘工具
3-1-2-5-1. 先决条件
安装compute(nova)和identity(keystone) service服务
安装python2.6,2.7并且支持Django
浏览器必须支持H5并启用cookies和javascript功能
3-1-2-5-2. 构建
- #查看服务是否正常
- nova service-list
- neutron agent-list
- #安装仪表盘套件
- yum -y install openstack-dashboard httpd mod_wsgi memcached python-memcached
- #配置仪表盘
- ##/etc/openstack-dashboard/local_settings
- ### 配置dashboard使用controller节点的openstack服务
- OPENSTACK_HOST="controller.nice.com"
- ### 设置允许来自所有网络的主机访问dashboard
- ALLOWED_HOST=['*']
- ### 配置memcached 会话存储服务(将原有的caches区域注释)
- CACHES={
- 'default':{
- 'BACKEND':'dgango.core.cache.backends.memcached.MemcachedCache',
- 'LOCATION':'127.0.0.1:11211'
- }
- }
- ### 可选配置时区
- TIME_ZONE='Asia/Shanghai'
- # 完成安装
- ## 配置selinux允许web服务器访问openstack服务
- setsebool -P httpd_can_network_connect on
- ##修改相关文件归属,是dashbaord css可以被加载
- chown -R apache:apache /usr/share/openstack-dashboard/static
- ## 启动web服务和会话保存服务并开机启动
- systemctl enable httpd.service memcached.service
- systemctl start httpd.service memcached.service
- #验证
- http://controller.nice.com/dashboard 使用admin或者demo用户登录
3-1-2-6. 块存储服务Cinder
3-1-2-6-1. 组件说明
cinder-api:允许api请求并路由到cinder-volume
cinder-volume:直接用户块存储服务交互,处理向cinder-scheduler这样的服务,通过消息队列相互通信,支持多种存储类型
cinder-scheduler daemon 选择最优的存储节点创建卷,类似于nova scheduler
Messagin queue:在块存储进程中传递消息
3-1-2-6-2. 代码构建
- controller节点先决条件
- create database cinder;
- grant all privileges on cinder.* TO 'cinder'@'localhost' identified by 'CINDER_DBPASS'
- grant all privileges on cinder.* TO 'cinder'@'%' identified by 'CINDER_DBPASS'
- source admin-openrc.sh
- keystone user-create --name cinder --pass CINDER_PASS
- keystone user-role-add --user cinder --tenant service --role admin
- # 创建cinder服务两个版本都要创建
- keystone service-create --name cinder --type volumn --description "Openstack block storage"
- keystone service-create --name cinderv2 --thype volumev2 --description "Openstack Block storage"
- # 创建块存储服务端点
- keystone endpoint-create --service-id $(keystone service-list|awk '/volume/{print $2}') --publicurl http://controller.nice.com:8776/v1/%\(tenant_id\)s --internalurl http://controller.nice.com:8776/v1/%\(tenant_id\)s --adminurl http://controller.nice.com:8776/v1/%\(tenant_id\)s --region regionOne
- keystone endpoint-create --service-id $(keystone service-list|awk '/volumev2/{print $2}') --publicurl http://controller.nice.com:8776/v2/%\(tenant_id\)s --internalurl http://controller.nice.com:8776/v2/%\(tenant_id\)s --adminurl http://controller.nice.com:8776/v2/%\(tenant_id\)s --region regionOne
- #安装并配置块存储控制组件
- yum -y install openstack-cinder python-cinderclient python-oslo-db
- ##/etc/cinder/cinder.conf
- [database]
- connection=mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
- [DEFAULT]
- rpc_backend=rabbit
- rabbit-host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_strategy=keystone
- verbose=True
- my_ip=192.168.1.5
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=cinder
- admin_password=CINDER_PASS
- #初始化存储服务数据库
- su -s /bin/sh -c "cinder-manage db sync" cinder
- # 完成安装,启动块存储服务并开机启动
- systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
- systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
- 安装并配置block1节点
- # 配置先决条件
- ## 新添加一块硬盘如sdb,并将全部空间分成一个主分区
- ## 配置网卡信息
- ip address:192.168.100.21
- Network mask:255.255.255.0(or/24)
- Default gateway:192.168.100.1
- ## 配置主机名为block1.nice.com,并田间dns记录设置ntp服务
- ## 安装lvm软件包(根据自身情况)
- yum -y install lvm2
- ## 启动lvm服务并这只开机自启动(根据自身情况)
- systemctl enable lvm2-lvmetad.service
- systemctl start lvm2-lvmetad.service
- ## 创建物理卷/dev/sdb1
- pvcreate /dev/sdb1
- ## 创建卷组cinder-volumes(名字不要改)
- vgcreate cinder-volumes /dev/sdb1
- ## /etc/lvm/lvm.conf配置使系统只扫描启动lvm的磁盘,防止识别其他非lvm磁盘对块存储服务造成影响
- devices{
- filter=["a/sda/","a/sdb/","r/.*/"]
- }
- ### 如果你的系统磁盘使用了lvm,则必须添加系统盘到过滤器中
- ### 同样,如果compute节点的系统盘也使用了lvm,则也需要修改/etc/lvm/lvm.conf文件并添加过滤器
- filter=["a/sdb/","r/.*/"]
- # 安装并配置快存储卷组件
- yum -y install openstack-cinder targetcli python-oslo-db MySQL-python
- ## /etc/cinder/cinder.conf
- [database]
- connection=mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
- [DEFAULT]
- rpc_backend=rabbit
- rabbit-host=controller.nice.com
- rabbit_password=RABBIT_PASS
- auth_strategy=keystone
- verbose=True
- my_ip=Management_INTERFACE_IP_ADDRESS
- glance_host=controller.nice.com
- ### 配置块存储服务使用lioadm iSCSI服务
- iscsi_helper=lioadm
- [keystone_authtoken]
- auth_uri=http://controller.nice.com:5000/v2.0
- identity_uri=http://controller.nice.com:35357
- admin_tenant_name=service
- admin_user=cinder
- admin_password=CINDER_PASS
- # 完成安装,启动块存储服务并开机启动
- systemctl enable openstack-cinder-volume.service target.service
- systemctl start openstack-cinder-volume.service target.service
- # 验证(在controller节点)
- source admin-openrc.sh
- cinder service-list
- source demo-openrc.sh
- ## 创建1GB的卷
- cinder create --display-name demo-volume1 1
- ##确认卷已创建并可用
- cinder list
3-1-2-7. 实例构建
- 创建秘钥对
- source demo-openrc.sh
- ssh-keygen
- ## 添加公钥到openstack环境
- nova keypair-add --pub-key ~/.ssh/id_rsa.pub demo-key
- ## 验证公钥是否添加成功
- nova keypair-list
- 启动一个实例
- #要启动一个实例最少指定flavor(云主机类型),image name(镜像名),network(网络),security group(安全组),key(秘钥) 和instance name(实例名)。
- ## flavor用来指定一个虚拟的独立分配的资源包括cpu,内存和存储,查看可用的flavor
- nova flavor-list
- ## 列出可用的镜像
- nova image-list
- ## 列出可用的网络
- neutron net-list
- ## 列出可用的安全组
- nova secgroup-list
- # 启动实例
- nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64 --nic net-id=DEMO_NET_ID --security-group default --key-name demo-key demo-instance1
- ##查看实例状态
- nova list
- 通过虚拟控制台访问你的实例
- #获取访问地址
- nova get-vnc-console demo-instance1 novnc
地址访问效果
- 远程访问你的实例
- #添加规则到名为default的安全组
- ## 允许icmp协议(ping)
- nova secgroup-add-rule default icmp-1-1 0.0.0.0/0
- ## 允许ssh协议
- nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
- # 在ext-net外部网络创建一个浮动ip地址
- neutron floatingip-create ext-net
- # 分配浮动ip地址到你的实例
- nova floating-ip-associate demo-instance1 10.0.0.110 #就是公网浮动ip地址
- #检查你的浮动ip地址状态
- nova list
- #从任何一个可以和ext-net网络通讯的追加测试联通性
- ping -c 4 10.0.0.110
- #从任何一个可以和ext-net通讯主机通过ssh访问实例
- ssh cirros@10.0.0.110
- ##或将私钥文件赋值到外部客户端,公国秘钥对验证登录
- ssh -i id_rsa cirros@10.0.0.110
- 为你的实例添加额外的云硬盘
命令行方式
- source demo-openrc.sh
- #列出卷
- nova volume-list
- #附加demo-volume1卷到demo-instance1实例
- nova volume-attach demo-instance1 158bea89-07db-4ac2-8115-660c0d6a4bb48 #volume1的id
以下两张截图是实例的命令执行效果
- sudo fdisk -l #查看可用磁盘
- sudo mkfs -t ext4 /dev/vdb1 #格式化
- sudo mkdir /data #创建挂载目录
- sudo mount -t ext4 /dev/vdb1 /data/ #挂载
- sudo mount # 查看挂载
3-1-2-7-1. 界面创建云硬盘-创建实例-挂载云硬盘-绑定浮动ip
创建云硬盘,实例
挂载云硬盘及绑浮动ip
以上步骤一般也是百度,阿里云的购买使用步骤