云计算介绍

云计算是一种模型,能够提供无论在何时何地都可以便捷获取所需资源的模型,这些资源可以是网络资源、存储资源、服务器资源,甚至是服务器或者应用软件资源等。

云计算模型中有三种基本服务模型可用:

  • IaaS:将硬件设备等基础资源封装成服务供用户使用。在IaaS环境中,用户相当于在使用裸机和磁盘,既可以让它运行Windows,也可以让它运行Linux。 IaaS最大优势在于它允许用户动态申请或释放节点,按使用量计费。而IaaS是由公众共享的,因而具有更高的资源使用效率。
  • PaaS:提供用户应用程序的运行环境,典型的如Google App Engine。PaaS自身负责资源的动态扩展和容错管理,用户应用程序不必过多考虑节点间的配合问题。但与此同时,用户的自主权降低,必须使用特定的编程环境并遵照特定的编程模型,只适用于解决某些特定的计算问题。
  • SaaS:针对性更强,它将某些特定应用软件功能封装成服务。SaaS既不像PaaS一样提供计算或存储资源类型的服务,也不像IaaS一样提供运行用户自定义应用程序的环境,它只提供某些专门用途的服务供应用调用。

OpenStack介绍

OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。

OpenStack服务

服务 项目名称 描述
 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文件

    # 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   //重启系统(非必须)
  • 时间同步
  • 控制节点:

        # 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数据库

    大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上。指南中的步骤依据不同的发行版使用MariaDB或 MySQL。OpenStack 服务也支持其他 SQL 数据库

    # 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管理页面

OpenStack搭建企业私有云 一:认证服务

  • 安装并配置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


  • 安装部署认证服务 (Identity Service )

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

    OpenStack搭建企业私有云 一:认证服务

  • 设置环境变量

    # 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

    OpenStack搭建企业私有云 一:认证服务OpenStack搭建企业私有云 一:认证服务

  • 验证操作:
    取消设置临时 变量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

OpenStack搭建企业私有云 一:认证服务OpenStack搭建企业私有云 一:认证服务

  • 创建脚本

    创建客户端环境的脚本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   //请求身份验证令牌

    OpenStack搭建企业私有云 一:认证服务