OpenStack基础
云计算
云计算概念
- 狭义的云计算是指IT基础设施的交付和使用模式
- 广义的云计算是指服务的交付和使用模式
云计算的定义
- 云计算是一个模型,这个模型可以方便地按需访问一个可配置的计算资源(例如,网络、服务器、存储设备、应用程序以及服务)的公共集
- 这些资源可以被迅速提供并发布,同时最小化管理成本或服务提供商的干涉
- 云模型由五个基本特征、三个服务模型和四个发布模型组成,如此使以上成为可能
五种基本特征
- 按需自助服务
- 视客户需要,可以从每个服务提供商那里单方面地向客户提供计算能力,例如,服务器时间和网络存储,而这些是自动进行无需干涉的
- 广泛的网络访问
- 具有通过规范机制网络访问的能力,这种机制可以使用各种各样的瘦和胖客户端平台(例如,携带电话、笔记本电脑以及PDA)
- 资源共享
- 提供商提供的计算资源被集中起来通过一个多客户共享模型来为多个客户提供服务,并根据客户的需求,动态地分配或再分配不同的物理和虚拟资源。有一个区域独立的观念,就是客户通常不需要控制或者需要知道被提供的资源的确切的位置,但是可能会在更高一层的抽象(例如,国家、州或者数据中心)上指定资源的位置。资源的例子包括存储设备、数据加工、内存、网络带宽和虚拟机等
- 快速的可伸缩性
- 具有快速地可伸缩性地提供服务的能力。在一些场景中,所提供的服务可以自动地,快速地横向扩展,在某种条件下迅速释放、以及快速横向收缩。对于客户来讲,这种能力用于使所提供的服务看起来好象是无限的,并且可以在任何时间、购买任何数量
- 可度量的服务
- 云系统通过一种可计量的能力杠杆在某些抽象层上自动地控制并优化资源以达到某种服务类型(例如,存储、处理、带宽以及活动用户帐号)。资源的使用可以被监视和控制,通过向供应商和用户提供这些被使用服务报告以达到透明化
三种服务模型
- SaaS 软件即服务
- 客户所使用的服务商提供的这些应用程序运行在云基础设施上。这些应用程序可以通过各种各样的客户端设备所访问,通过客户端界面像WEB浏览器(例如,基于WEB的电子邮件)。客户不管理或者控制底层的云基础架构,包括网络、服务器、操作系统、存储设备,甚至独立的应用程序机能,在可能异常的情况下,限制用户可配置的应用程序设置
- 直接通过互联网为用户提供软件和应用程序等服务
- 面向对象一般是普通用户
- 客户所使用的服务商提供的这些应用程序运行在云基础设施上。这些应用程序可以通过各种各样的客户端设备所访问,通过客户端界面像WEB浏览器(例如,基于WEB的电子邮件)。客户不管理或者控制底层的云基础架构,包括网络、服务器、操作系统、存储设备,甚至独立的应用程序机能,在可能异常的情况下,限制用户可配置的应用程序设置
- PaaS 平台即服务
- 客户使用云供应商支持的开发语言和工具,开发出应用程序,发布到云基础架构上。客户不管理或者控制底层的云基础架构,包括网络、服务器、操作系统或者存储设备,但是能控制发布应用程序和可能的应用程序运行环境配置
- 把安装好开发环境的系统平台作为一种服务 通过互联网提供给用户
- 面向对象一般是开发人员,软件工程师
- 客户使用云供应商支持的开发语言和工具,开发出应用程序,发布到云基础架构上。客户不管理或者控制底层的云基础架构,包括网络、服务器、操作系统或者存储设备,但是能控制发布应用程序和可能的应用程序运行环境配置
- IaaS 架构即服务
- 向客户提供处理、存储、网络以及其他基础计算资源,客户可以在上运行任意软件,包括操作系统和应用程序。用户不管理或者控制底层的云基础架构,但是可以控制操作系统、存储、发布应用程序,以及可能限度的控制选择的网络组件(例如,防火墙)
- 提供底层IT基础设施服务,包括处理能力,存储空间,网络资源等
- 面向对象一般是IT管理人员
- 向客户提供处理、存储、网络以及其他基础计算资源,客户可以在上运行任意软件,包括操作系统和应用程序。用户不管理或者控制底层的云基础架构,但是可以控制操作系统、存储、发布应用程序,以及可能限度的控制选择的网络组件(例如,防火墙)
OpenStack
OpenStack简介
- NASA(美国国家航空航天局)和Rackspace共同发起
- 以Apache许可证授权的自由软件和开发源代码项目
- 为公有云及私有云的建设与管理提供软件的开源项目
- 覆盖了网络,虚拟化,操作系统,服务器等各个方面
OpenStack 是一系列开源工具(或开源项目)的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的六个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十多个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构
OpenStack服务
服务 | 项目名称 | 描述 |
---|---|---|
Compute(计算服务) | Nova | 负责实例生命周期的管理,计算资源的单位。对Hypervisor进行屏蔽,支持多种虚拟化技术(红帽默认为KVM),支持横向扩展 |
Network(网络服务) | Neutron | 负责虚拟网络的管理,为实例创建网络的拓扑结构。是面向租户的网络管理,可以自己定义自己的网络,各个租户之间互不影响 |
Identity(身份认证服务) | Keystone | 类似于LDAP服务,对用户、租户和角色、服务进行认证与授权,且支持多认证机制 |
Dashboard(控制面板服务) | Horizon | 提供一个Web管理界面,与OpenStack底层服务进行交互 |
Image Service(镜像服务) | Glance | 提供虚拟机镜像模板的注册与管理,将做好的操作系统拷贝为镜像模板,在创建虚拟机时直接使用,可支持多格式的镜像 |
Block Storage(块存储服务) | Cinder | 负责为运行实例提供持久的块存储设备,可进行方便的扩展,按需付费,支持多种后端存储 |
Object Storage(对象存储服务) | Swift | 为OpenStack提供基于云的弹性存储,支持集群无单点故障 |
Telemetry(计量服务) | Ceilometer | 用于度量、监控和控制数据资源的集中来源,为OpenStack用户提供记账途径 |
OpenStack概念架构图
有全局组件,辅助组件,核心组件三部分组成
- 全局组件提供认证,提供监控,可以在控制台上统一管理实例,OpenStack的各种功能。
- 辅助/其他组件提供了一些必要的管理和资源服务,让我们更加便利的去管理 有裸金属,Trove数据库的一种服务,Heat Sahara涉及一些编排、数据处理。
- 核心组件是维持虚拟机正常运行的组件,其核心是虚拟机,那么创建虚拟机就需要镜像资源、网络资源、存储资源这几个资源,nova组件向各个组件聚集资源过来,最后提供给虚拟机,以支持虚拟机的创建。
全局组件:
keystone:为所有服务模块提供认证与授权
ceilometer:度量、监控所有数据资源
horizon :UI平台管理,提供一个web管理页面,与底层交互
外部辅助组件:
ironic 提供裸金属环境(没有操作系统的计算机硬件,简称裸机)
trove 提供管理数据库服务(控制关系型和非关系型数据库)
heat,sahara 提供对数据管理和编排
内部核心组件:
glance:提供镜像服务
neutron:提供网络服务
swift:提供对象存储资源
cinder:提供快存储资源
nova:管理实例的生命周期,并负责调取以上四个资源给虚拟机使用
OpenStack逻辑架构图
组件
Horizon、keystone、ceilometer这几个是全局组件
Ironic、trove、heat、sahara这几个是辅助组件
Swif 、nova、cinder、galnce、neutron是核心组件
对接与通信
组件之间是依靠api来对接的,由消息代理rabbitmq来作为载体去承载中间消息和数据传输。
单个服务内部,有很多的子功能模块,子功能模块之间通讯
一般来说,对单个组件而言它的api不负责做具体的事,它所负责的是分发任务,接收请求,并且把返回结果返回的数据响应给客户端,它会把接收到的请求交由keystone去认证鉴权(预处理),认证鉴权成功后才会把请求分发给自己内部的各个组件进行处理
以nova为例,Nova是管理实例的生命周期,以nova-api作为统一的交互入口,而内部组件有很多内部组件去做具体的事务处理,具体的任务处理
Openstack环境部署
服务器准备
1、控制节点ct(controller)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡:VM1-(局域网)192.168.100.11 NAT-20.0.0.11
操作系统:Centos 7.6(1810)-最小化安装
2、计算节点c1(compute01)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡:VM1(局域网)-192.168.100.12 NAT-20.0.0.12
操作系统:Centos 7.6(1810)-最小化安装
3、计算节点c2(compute02)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡:VM1(局域网)-192.168.100.13 NAT-20.0.0.13
操作系统:Centos 7.6(1810)-最小化安装
PS:最小内存6G
部署centos7.6操作系统
先开启VMnet1,后添加NAT网卡,开启虚拟化(注意顺序对应)
在安装过程中设置
选择Install CentOS 7
按tab键,输入命令net.ifnames=0 biosdevname=0
以最小化安装
安装好后设置网卡 三台同样的步骤
eth0
eth1
查看网络联通性
三台服务器关闭防火墙
[root@ct ~]# systemctl stop firewalld
[root@ct ~]# setenforce 0
[root@ct ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@ct ~]# grep -v "#" /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
设置免交互
三台节点上都需要配置
[root@ct ~]# vi /etc/hosts
192.168.100.16 ct
192.168.100.17 c01
192.168.100.18 c02
[root@ct ~]# ssh-keygen -t rsa #生成密钥
[root@ct ~]# ssh-copy-id ct #公钥传递
[root@ct ~]# ssh-copy-id c01
[root@ct ~]# ssh-copy-id c02
身份验证
[root@ct ~]# ssh root@c01
Last login: Thu Jan 28 22:25:58 2021
[root@c01 ~]# exit
登出
Connection to c01 closed.
[root@ct ~]# ssh root@c02
Last login: Thu Jan 28 22:26:20 2021
[root@c02 ~]# exit
登出
Connection to c02 closed.
在c01上验证
在c02上验证
安装基础环境依赖包
[root@ct ~]# yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre pcre-devel expat-devel cmake bzip2
net-tools 可以使用ifconfig命令
bash-completion 自动补全
pcre 正则 devel库
expat-devel:Apache依赖包,C语言开发,解析XML文档的开发库
[root@controller ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
#注意多装几遍此命令
centos-release-openstack-train 保证安装更新openstack版本为最新版本t版
python-openstackclient openstack的python客户端
因为openstack中的API大多数是python编写的,并且连接数据库,也需要python
openstack-selinux openstack核心安全防护
openstack-utils openstack其它util工具
设置时间同步
安装同步软件
三个节点上
[root@ct ~]# yum -y install chrony
在控制节点上设置为同步源
[root@ct ~]# vi /etc/chrony.conf
server ntp.aliyun.com iburst #设置为时间同步源
allow 192.168.100.0/24 #为192.168.100网段提供时间同步
[root@ct ~]# systemctl restart chronyd
[root@ct ~]# systemctl enable chronyd
[root@ct ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 17 18 +2477us[+4815us] +/- 24ms
在计算节点c01、c02上
[root@c01 ~]# vi /etc/chrony.conf
server ct iburst #设置时间同步源为控制节点
allow 192.168.100.0/24 #为192.168.100网段提供时间同步
设置任务计划
三个节点上设置
[root@ct ~]# crontab -e
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
分钟小时日期月星期 追加 日志文件
no crontab for root - using an empty one
crontab: installing new crontab
[root@ct ~]# date
配置系统环境
配置服务(控制节点ct上)
安装,配置MariaDB
[root@ct ~]# yum -y install mariadb mariadb-server python2-PyMySQL
#此包用于openstack的控制端连接mysql所需要的模块,如果不安装,则无法连接数据库;此包只安装在控制端
[root@ct ~]# yum -y install libibverbs #底层库文件
[root@ct ~]# vi /etc/my.cnf.d/openstack.cnf #设置mysql配置文件
[mysqld]
bind-address=192.168.100.16 #控制节点局域网地址(绑定内网地址)本地数据库节点ip
default-storage-engine=innodb #默认存储引擎
innodb_file_per_table=on #每张表独立表空间文件(文件存储空间)
max_connections=4096 # 最大连接数
collation-server=utf8_general_ci #默认字符集(不区分大小写)
character-set-server=utf8 #字符集utf8_bin区分大小写
[root@ct ~]# systemctl enable mariadb #自启动数据库
[root@ct ~]# systemctl start mariadb #开启数据库服务
[root@ct ~]# mysql_secure_installation #数据库初始化设置
[root@ct ~]# mysql -uroot -p123123 #测试登录数据库
安装RabbitMQ消息队列
[root@ct ~]# yum -y install rabbitmq-server
[root@ct ~]# systemctl enable rabbitmq-server
[root@ct ~]# systemctl start rabbitmq-server
Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details. #出现这个错误
[root@ct ~]# systemctl status rabbitmq-server
解决
在配置openstack的基础环境时,安装完RabbitMQ,创建消息队列用户时,不可以创建
[root@ct ~]# rabbitmqctl add_user openstack RABBIT_PASS
Error: unable to connect to node rabbit@ct: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@ct]
rabbit@ct:
* unable to connect to epmd (port 4369) on ct: address (cannot connect to host/port)
current node details:
- node name: 'rabbitmq-cli-17@ct'
- home dir: /var/lib/rabbitmq
- cookie hash: IZ9HQVgFjAEBmt6GGzrx8g==
先杀死进程
ps -ef | grep rabbitmq #查询进程号
ps -ef | grep rabbitmq | grep -v grep | awk '{print $2}' | xargs kill -9 #杀死进程
rabbitmq-server -detached #启动
rabbitmqctl status #查看状态
再创建就可以了
创建消息队列用户,用于controler和node节点连接rabbitmq的认证
[root@ct ~]# rabbitmqctl add_user openstack RABBIT_PASS
用户名 密码
Creating user "openstack"
rabbitmq跑在openstack平台里,作为数据交互和传递的载体时,因为需要被keystone认证,有用户身份来进行管理,便于认证
配置openstack用户的操作权限(正则,配置读写权限)
[root@ct ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
[root@ct ~]# netstat -anptu | grep 5672 #授予独立的用户身份,读写权限
可查看25672和5672 两个端口(5672是Rabbitmq默认端口,25672是Rabbit的测试工具CLI的端口)
查看rabbitmq插件列表
[root@ct ~]# rabbitmq-plugins list
开启rabbitmq的web管理界面的插件,端口为5672(可以通过网页访问,图形化页面)
[root@ct ~]# rabbitmq-plugins enable rabbitmq_management
[root@ct ~]# netstat -anptu | grep 5672
安装memcached
作用:
安装memcached是用来存储session(会话)信息;服务身份验证机制(keystone)使用memched来缓存令牌,在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached中
安装
[root@ct ~]# yum -y install memcached python-memcached
python模块在OpenStack中起到了连接数据库的作用
修改memcached配置文件
[root@ct ~]# vi /etc/sysconfig/memcached
PORT="11211" 默认端口号
USER="memcached" 默认账户名
MAXCONN="1024" 最大连接数
CACHESIZE="64" 缓存大小
OPTIONS="-l 127.0.0.1,::1,ct"
选项 添加主机名,控制节点所在
[root@ct ~]# vi /etc/sysconfig/memcached
[root@ct ~]# systemctl enable memcached #自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@ct ~]# systemctl start memcached #开启服务
[root@ct ~]# netstat -anptu | grep 11211 #查看端口状态
安装etcd
etcd特点:
- 简单: 基于HTTP+JSON的API让你可以用CURL命令就可以轻松使用。
- 安全: 可以选择SSL客户认证机制。
- 快速: 每个实例每秒支持一千次写操作。
- 可信: 使用Ralf算法充分实现了分布式。
安装
[root@ct ~]# yum -y install etcd
编辑配置文件
[root@ct ~]# cd /etc/etcd/
[root@ct etcd]# ls -lh
[root@ct etcd]# vi etcd.conf
修改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" 数据目录位置
ETCD_LISTEN_PEER_URLS="http://192.168.100.16:2380"
监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
ETCD_LISTEN_CLIENT_URLS="http://192.168.100.16:2379"
对外提供服务的地址(2379端口,集群内部的通讯端口)
ETCD_NAME="ct"
集群中节点标识(名称)
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.16:2380"
该节点成员的URL地址,2380端口:用于集群之间通讯。
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.16:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.100.16:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" 集群唯一标识,群集名称
ETCD_INITIAL_CLUSTER_STATE="new"
初始集群状态,new为静态,表示单个节点
[root@ct etcd]# systemctl enable etcd 自启动
[root@ct etcd]# systemctl start etcd 开启服务
[root@ct etcd]# systemctl status etcd 服务状态
[root@ct etcd]# netstat -anptu | grep 2379 查看端口
[root@ct etcd]# netstat -anptu | grep 2380
以上,OpebStack基础配置完成