云计算是一种模型,可以提供不管在什么时候何地均可以便捷获取所需资源的模型,这些资源能够是网络资源、存储资源、服务器资源,甚至是服务器或者应用软件资源等。python
云计算模型中有三种基本服务模型可用:mysql
- IaaS:将硬件设备等基础资源封装成服务供用户使用。在IaaS环境中,用户至关于在使用裸机和磁盘,既可让它运行Windows,也可让它运行Linux。 IaaS最大优点在于它容许用户动态申请或释放节点,按使用量计费。而IaaS是由公众共享的,于是具备更高的资源使用效率。
- PaaS:提供用户应用程序的运行环境,典型的如Google App Engine。PaaS自身负责资源的动态扩展和容错管理,用户应用程序没必要过多考虑节点间的配合问题。但与此同时,用户的自主权下降,必须使用特定的编程环境并遵守特定的编程模型,只适用于解决某些特定的计算问题。
- SaaS:针对性更强,它将某些特定应用软件功能封装成服务。SaaS既不像PaaS同样提供计算或存储资源类型的服务,也不像IaaS同样提供运行用户自定义应用程序的环境,它只提供某些专门用途的服务供应用调用。
OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合做研发并发起的,以Apache许可证受权的自由软件和开放源代码项目。
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工做。OpenStack支持几乎全部类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack经过各类互补的服务提供了基础设施即服务(IaaS)的解决方案,每一个服务提供API以进行集成。
linux
服务 | 项目名称 | 描述 |
---|---|---|
Compute (计算服务) | Nova | 负责实例生命周期的管理,计算资源的单位。对Hypervisor进行屏蔽,支持多种虚拟化技术(KVM),支持横向扩展。 |
Network (网络服务) | Neutron | 负责虚拟网络的管理。 |
Identity (身份认证服务) | Keystone | 对用户、租户和角色、服务 进行认证和受权 |
Dashboard (控制面板服务) | Horizon | 提供web界面管理,与OpenStack底层服务进行交互 |
Image Server (镜像服务) | Glance | 提供虚拟机镜像模板的注册与管理,将最好系统复制为镜像模板,在建立虚拟机时直接使用。 |
Block Storage (块存储服务) | Cinder | 负责为容许实例提供持久的块存储设备,可进行方便扩展,按需付费,支持多种后端存储。 |
Object Storage (对象存储服务) | Swift | 为OpenStack提供基于云的弹性存储,支持群集无单点故障 |
Telemetry (计量服务) | Ceilometer | 用于度量、监控和控制数据资源的集中来源,为OpenStack用户提供记帐途径 |
主机名 | IP | 备注 |
---|---|---|
controller | 192.168.200.133 | 控制节点 |
compute | 192.168.200.134 | 计算节点 |
cinder | 192.168.200.143 | 块存储节点 |
分别配置主机名和hosts文件web
# hostnamectl set-hostname controller # bash //控制节点 # hostnamectl set-hostname compute # bash //计算节点 # hostnamectl set-hostname cinder # bash //块存储节点 # vim /etc/hosts //三台都要操做 192.168.200.133 controller 192.168.200.134 compute 192.168.200.143 cinder
关闭防火墙算法
# systemctl stop firewalld # systemctl disable firewalld # setenforce 0 # reboot //重启系统(非必须)
控制节点:sql
# yum install chrony -y # vi /etc/chrony.conf server controller iburst allow 192.168.200.0/24 # systemctl enable chronyd.service # systemctl start chronyd.service # chronyc sources
网络节点 & 计算节点数据库
# yum install chrony -y # vi /etc/chrony.conf # server controller iburst # systemctl enable chronyd.service # systemctl start chronyd.service # chronyc sources
安装OpenStack软件仓库 & OpenStack client编程
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 备份默认yum源 # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 下载最新yum源 # yum install -y centos-release-openstack-queens //配置OpenStack yum库 # yum upgrade -y //更新 # yum install -y python-openstackclient //安装OpenStack客户端 # yum install -y openstack-selinux //方便自动管理OpenStack服务的安全策略
安装并配置SQL数据库bootstrap
大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上。指南中的步骤依据不一样的发行版使用MariaDB或 MySQL。OpenStack 服务也支持其余 SQL 数据库vim
# yum install mariadb mariadb-server python2-PyMySQL -y # vim /etc/my.cnf.d/openstack.cnf [mysqld] bind-address = 192.168.200.133 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 # systemctl enable mariadb.service //开启自启动 # systemctl start mariadb.service # mysql_secure_installation //基础设置(设置密码 其余所有Y)
安装并配置消息队列
OpenStack 使用 message queue 协调操做和各服务的状态信息。消息队列服务通常运行在控制节点上。
# yum install rabbitmq-server -y # /usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装状况 # /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务 # systemctl start rabbitmq-server.service # systemctl enable rabbitmq-server # rabbitmqctl add_user openstack RABBIT_PASS //添加 openstack 用户 , RABBIT_PASS 为密码 # rabbitmqctl set_permissions openstack ".*" ".*" ".*" //给openstack用户配置写和读权限
访问 httpd://192.168.200.133:15672 能够看到web管理页面
安装并配置Memcached
认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点。在生产部署中,咱们推荐联合启用防火墙、认证和加密保证它的安全。
#yum install memcached python-memcached -y # vi /etc/sysconfig/memcached OPTIONS="-l 127.0.0.1,::1,controller" # systemctl enable memcached.service # systemctl restart memcached.service
安装并配置etcd
OpenStack服务可使用Etcd,一种分布式可靠的键值存储,用于分布式密钥锁定,存储配置,跟踪服务生存和其余场景。
# yum install etcd -y # vi /etc/etcd/etcd.conf #[Member] ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.200.133:2380" //宣告群集地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.200.133:2379" //监听客户端地址 ETCD_NAME="controller" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.200.133:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.200.133:2379" ETCD_INITIAL_CLUSTER="controller=http://192.168.200.133:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new" # systemctl enable etcd # systemctl start etcd
Keystone为全部OpenStack服务提供身份认证和受权,跟踪用户以及它们的权限,提供一个可用服务以及API的列表。接收前台请求的Keystone API和后台的Keystone-db
身份服务包含这些组件:
.
- 服务器 : 一个中心化的服务器使用RESTful 接口来提供认证和受权服务。
- 驱动 :驱动或服务后端被整合进集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息, 而且它们可能已经存在于OpenStack被部署在的基础设施(例如,SQL数据库或LDAP服务器)中。
- 模块: 中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求受权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。
.
当安装OpenStack身份服务,用户必须将之注册到其OpenStack安装环境的每一个服务。身份服务才能够追踪那些OpenStack服务已经安装,以及在网络中定位它们。
这个配置部署Fernet令牌和Apache HTTP服务处理请求。
建立Keystone 用户、数据库并分配访问权限
# mysql -u root -p > CREATE DATABASE keystone; //建立keystone数据库 授予对keystone数据库的适当访问权限: > GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; > GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS';
安装并配置
# yum install -y openstack-keystone httpd mod_wsgi # vi /etc/keystone/keystone.conf [database] 在该[database]部分中 配置数据库访问 connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone [token] 在该[token]部分中,配置Fernet令牌提供程序 provider = fernet //安全消息传递算法
构建身份认证服务的数据库、同步数据库
# su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化 Fernet key
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone # keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
管理员的密码为 ADMIN_PASS
# 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
配置Apache HTTP 服务
# vi /etc/httpd/conf/httpd.conf ServerName controller //配置ServerName引用控制器节点 # ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ # systemctl enable httpd.service # systemctl start httpd.service
设置环境变量
# export OS_USERNAME=admin # export OS_PASSWORD=ADMIN_PASS # export OS_PROJECT_NAME=admin # export OS_USER_DOMAIN_NAME=Default # export OS_PROJECT_DOMAIN_NAME=Default # export OS_AUTH_URL=http://controller:35357/v3 # export OS_IDENTITY_API_VERSION=3
建立domain, projects, users, and roles
建立域example # openstack domain create --description "An Example Domain" example 建立service 项目 # openstack project create --domain default --description "Service Project" service 建立demo项目 # openstack project create --domain default --description "Demo Project" demo 建立demo用户 # openstack user create --domain default --password-prompt demo 这里输入密码: DEMO_PASS 建立user角色 # openstack role create user 将user角色添加到demo项目和用户 # openstack role add --project demo --user demo user
验证操做:
取消设置临时 变量OS_AUTH_URL和OS_PASSWORD环境变量:
# unset OS_AUTH_URL OS_PASSWORD
做为admin用户,请求身份验证令牌:
# openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name Default --os-user-domain-name Default \ --os-project-name admin --os-username admin token issue //这里输入密码 ADMIN_PASS
做为demo用户,请求身份验证令牌:
# 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 //这里输入密码 DEMO_PASS
建立脚本
建立客户端环境的脚本admin和demo 项目和用户。本指南的将来部分引用这些脚原本加载客户端操做的适当凭据。
客户端环境脚本的路径不受限制。为方便起见,您能够将脚本放在任何位置,但请确保它们能够访问并位于适合部署的安全位置,由于它们包含敏感凭据。
OpenStack客户端还支持使用clouds.yaml文件。有关更多信息,请参阅os-client-config。
建立和编辑admin-openrc文件并添加如下内容:
# vim 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 export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
建立和编辑demo-openrc文件并添加如下内容:
# vim demo-openrc export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
使用脚本
要将客户端做为特定项目和用户运行,只需在运行它们以前加载关联的客户端环境脚本便可。例如:
加载admin-openrc文件以使用Identity服务的位置以及admin项目和用户凭据填充环境变量:
# source demo-openrc 或者 # source admin-openrc # openstack token issue //请求身份验证令牌