企业级虚拟化实战之KVM——从KVM到云计算OpenStack
云计算
云计算的发展
虚拟化:改变了IT资源的分布形式,使计算更加复杂 KVM,QEMU
为了解决大而复杂的计算问题(单个核心的CPU不能满足业务需求),引入:
并行计算 使用多个处理器来协同求解同一个问题
- 时间上的并行:流水线技术
- 空间上的并行:多个处理机并发执行计算
集群计算 计算机集群将一组松散集成的计算机软件或硬件连接到一起来协作完成计算工作(通常用局域网连接),解决单个计算中的计算速度或可靠性
- 高可用集群:可用性,抗击并发
- 负载均衡集群:规模性
- 高性能集群:性能性,24*7 SLA 100%
网格计算 基于网络的分布式计算的一种问题求解(互联网中“虚拟的超级计算机”)
- 数据处理能力强
- 充分利用网络闲置资源
- 实现IT资源动态共享
云计算 无空间约束,按需分配,易扩展(使IT资源成为基础设施)
云计算包含并行计算、集群技术、网格计算,IT资源更具有扩展性
云计算特征
(1)虚拟化技术
突破时间和空间的界限(应用的虚拟,IT[计算、网络、存储]资源的虚拟)
数据的备份,迁移和扩展
(2)动态可扩展性
(3)按需部署
(4)灵活性高,即用即消
(5)可靠性,基于虚拟化迁移技术
PC 硬件为中心
C/S 软件为中心
云计算 服务为中心
云计算的三种服务模式
IaaS
IaaS(Infrastructure as a Service) 基础设施即服务
用户根据自己的需求通过网络获取虚拟机、存储、网络等基础设施资源
PaaS
PaaS(Platform as a Service) 平台即服务
将软件研发平台作为一种服务, 如Eclipse/Java编程平台,服务商提供编程接口/运行平台等
不能修改已经预安装好的操作系统和运行环境
SaaS
SaaS(Software as a Service)软件即服务
将应用作为服务提供给客户,用户无需购买软件,而是向提供商租用基于web的软件,来管理企业经营活动
从用户体验角度而言,它们之间关系是独立的,因为它们面对不同类型的用户;
从技术角度而言,它们并不是简单的继承关系(Saas基于PaaS,而PaaS基于IaaS),因为首先SaaS可以是基于PaaS或者直接部署于IaaS之上,其次Paas可以构建于IaaS之上,也可以直接构建在物理资源之上。
云计算的四种部署模式
模式 | 介绍 | 补充 |
---|---|---|
公有云 | 数据托管在云服务提供商的数据中心,对数据的掌握力度减小 | 云厂商开发(在OpenStack上加入级联架构) |
私有云 | 企业内部的云环境 | 原生的OpenStack构建私有云 |
混合云 | 私有云+公有云 | 在保证数据安全的前提下,降低企业成本 |
社区云 | 建立在多个目标相似的公司之间 | 成本共担,成果共享 |
Openstack介绍
OpenStack是云计算实现的工具
- 由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目
- 项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台
- Openstack通过各种互补的服务提供了IaaS的解决方案,每个服务提供API以进行集成
- OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。
- Openstack包含两个主要模块:Nova和swift,前者是NASA开发的虛拟服务器部署和业务计算模块;后者是Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独
- OpenStack三大核心组件:网络,计算,存储
OpenStack常用组件
keystone 身份验证服务
Keystone提供统一的,完整的openstack身份认证
用户身份认证
tenant:租户,组件中能够被访问的资源集合
user:用户,一切能访问资源的对象
role:角色,能够访问一类资源的一组用户
访问请求控制(Token)
(1)Service:nova,glance,swift等服务需要在keystone上注册
(2)Endpoint:service暴露出来的访问地址
[root@controller ~]# openstack endpoint list
[root@controller ~]# openstack endpoint list --service nova
每个URL对应一个服务实例的访问地址,并且具有public(全局)、private(局域网)和admin(从常规的访问中分离)这三种权限
internal 内部的
(3)Token:访问资源的令牌,具有时效性
通过curl命令(命令行、脚本)http,https
注册表服务(Catalog)
openstack服务需要注册到keystone注册表中
身份验证引擎(Policy)
决定用户有哪些访问控制权限
nova 计算管理服务
实现虚拟机计算资源分配
表项 | 含义 |
---|---|
nova-API | 接受用户请求 |
nova-scheduler | 选择计算节点 |
nova-compute | 存在于计算节点上,调用Hypervior的API来创建和销毁虚拟机实例 |
nova-conductor | 作为nova-compute访问数据库的媒介,保证数据安全 |
nova-novncproxy | 支持VNC链接 |
nova通过消息队列rabbitMQ解耦 |
[root@controller ~]# nova list --all-tenants #列出虚拟机
[root@controller ~]# nova show vm_id #查看虚拟机详细信息
[root@controller ~]# nova dns-list --ip 192.168.42.155 --name 2ed2a215-fd27-4153-8733-85fcadc0c08f centos7u4 #【待测试】
Cinder 块存储服务
表项 | 含义 |
---|---|
Cinder-api | 接受用户请求 |
Cinder-volume | 存在于存储设备上,调运的存储设备驱动 |
Cinder-scheduler | 存储资源的调度,File,ceph |
Glance 镜像服务
存储镜像,提供给用户镜像的发现注册和获取
Neutron 网络服务
表项 | 含义 |
---|---|
neurtron-server | 请求的接受和发送 |
Neurtron-agent | 存在网络节点,直接调运网卡驱动 |
管理命令
命令 | 含义 |
---|---|
cinder list --all | |
neutron subnet-list | |
openstack service[image/flavor] list | |
配额管理
对用户资源的约束
此处配额不代表真实的物理资源,只是一个数字
在线上生产环境中配额是需要花钱购买的
命令 | 含义 |
---|---|
nova quota-show | 查看当前用户的配额 |
nova quota-defaults | 查看默认配额 |
(1)调整项目配额 |
#查看项目ID
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 4cd13b6404244d03aedb150ef6fd0e90 | demo |
| 8c3f2a56a315455ea9ceb5ab710d3af9 | service |
| a3aaba0f8c4e4257ae44cd26057e72f6 | admin |
+----------------------------------+---------+
#根据项目ID查看项目配额
[root@controller ~]# openstack quota show 4cd13b6404244d03aedb150ef6fd0e90
#根据项目ID调整项目配额
[root@controller ~]# nova quota-update --ram 4096 --cores 5 --instances 5 4cd13b6404244d03aedb150ef6fd0e90
#根据项目ID查看项目配额调整结果
[root@controller ~]# openstack quota show 4cd13b6404244d03aedb150ef6fd0e90
(2)调整卷配额
#查看卷配额
[root@controller ~]# cinder quota-show 4cd13b6404244d03aedb150ef6fd0e90
#调整云硬盘存储配额
[root@controller ~]# cinder quota-update --gigabytes 500 4cd13b6404244d03aedb150ef6fd0e90
(3)调整网络配额
[root@controller ~]# neutron quota-show 4cd13b6404244d03aedb150ef6fd0e90
[root@controller ~]# neutron quota-update --floatingip 5 4cd13b6404244d03aedb150ef6fd0e90
安全组 security_group
不能调整
云主机创建
图形化创建
命令行操作
云主机创建:主机名---->选择镜像--->选规格--->选网络 --->选安全组 --->认证方式
镜像(上传)
私有镜像:对于当前用户可见
公有镜像:所有用户可见
镜像格式要匹配正确,系统通过后缀识别镜像格式
flavor
flavor 管理实例的计算、内存和存储容量的大小
虚机硬件模板,在OpenStack中被称为类型模板flavor,包括RAM和硬盘大小,CPU核数等
[root@controller ~]# nova help flavor-create
#创建falvor
[root@controller ~]# nova flavor-create cen 101 1024 10 1 #公共
[root@controller ~]# nova flavor-create --is-public false cen 101 1024 10 1 #私有
#查看flavor
[root@controller ~]# openstack flavor show m1.small
#查看全局flavor
[root@controller ~]# openstack flavor list
[root@controller ~]# openstack flavor create --id 103 --ram 2048 --vcpus 2 --disk 8 anliu03
#删除falvor
[root@controller ~]# openstack flavor delete [ID/Name]
不允许用户创建模板 错误(禁止):策略不允许执行os-compute-api:os-flavor-manage
网络
创建网络——新建路由——添加接口
(1)从路由上解绑/绑定子网
[root@controller ~]# neutron subnet-list #查看子网列表
[root@controller ~]# neutron router-list #查看路由列表
#解绑
[root@controller ~]# neutron router-interface-delete ROUTER_ID SUBNET_ID
Removed interface from router bbbf1c20-46d4-4743-8dc6-d5498de65534.
#绑定
[root@controller ~]# neutron router-interface-add test test
Added interface e42c48e6-4f86-454a-bbe6-7e024c91f81e to router test.
(2)删除/创建子网
[root@controller ~]# neutron subnet-delete net01
Deleted subnet: net01
[root@controller ~]# neutron subnet-create test 12.12.12.0/24 --name test --dns-nameserver 8.8.4.4 --gateway 12.12.12.1
(3)删除/创建路由
[root@controller ~]# neutron router-delete test01
Deleted router: test01
[root@controller ~]# neutron router-create test
(4)创建/删除网络
[root@controller ~]# neutron net-create test
[root@controller ~]# neutron net-delete test
(5)路由绑定/解绑公共网络
[root@controller ~]# neutron router-gateway-set test provider
Set gateway for router test
[root@controller ~]# neutron router-gateway-clear test provider
(6)查看路由上的端口
[root@controller ~]# neutron router-port-list test
(7)列出网络命名空间
[root@controller ~]# ip netns
qdhcp-8af06f77-07ae-42df-ac2d-de4f2296e855 (id: 2)
qdhcp-79cb2127-8b06-4ec3-803c-475d040f1b0d (id: 1)
qrouter-bc2dfeea-b052-4f4d-bb61-91a6a2a99517 (id: 0)
实例
#创建网络
[root@controller ~]# neutron net-create cen_net
#创建路由
[root@controller ~]# neutron router-create cen_router
#路由绑定公共网络
[root@controller ~]# neutron router-gateway-set cen_router provider
#创建子网
[root@controller ~]# neutron subnet-create cen_net 12.12.12.0/24 --name cen_subnet --dns-nameserver 8.8.4.4 --gateway 12.12.12.1
#绑定路由和子网
[root@controller ~]# neutron router-interface-add cen_subnet cen_router
安全组
安全组是IP过滤规则的集合,可被应用到虚拟机的网络设置中,在安全组创建后,可以给安全组增加规则
[root@controller ~]# nova secgroup-list
[root@controller ~]# nova secgroup-create mysecgroup "This is a test"
[root@controller ~]# nova secgroup-list-rules NAME
[root@controller ~]# nova secgroup-add-rule mysecgroup tcp 22 22 0.0.0.0/0
[root@controller ~]# nova secgroup-add-rule mysecgroup icmp -1 -1 0.0.0.0/0
密钥
$ ssh-keygen -q -N ""
$ nova keypair-add --pub-key ~/.ssh/id_rsa.pub mykey
$ nova keypair-list
排错
虚拟创建失败如何定位
nova-api
nova-scheduler
nova-computer:计算节点
nova list | grep vmname
nova show vm_ID
查看nova-compute日志
[root@controller ~]# grep -i "err" /var/log/nova/nova-compute.log
编辑/etc/nova/nova.conf
在[libvirt]添加 virt_type=qemu
,重启openstack-nova-compute
发现此文件内已有本句,直接重启了compute节点,再次创建虚拟机,创建成功
#vim /etc/nova/nava.conf改为公网地址段
[vnc]
novncproxy_base_url = http://192.168.【213】.102 : 6080/vnc_auto.html
#systemctl restart libvirtd.service openstack-nova-compute.service
ping不通虚拟主机
1.可能需要加载环境变量
2.可能是后备镜像有问题
KVM总结
1.什么是虚拟化?
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化技术是对资源的抽象,将计算机资源抽象成为相互隔离的不同主机,每个主机都具有整个计算机资源。
2.半虚拟化和全虚拟化的区别?
「半虚拟化需要对内核进行修改,效率较高;CPU辅助全虚拟化,虚拟机不知道自己所处的运行环境,允许异构」
3.有哪些虚拟化产品Hypervisor?
[商用:VMware ESXi,微软的Hyper-V 开源:KVM,VirtualBox,OpenVZ,Xen]
4.KVM有哪些特性?
可以提升物理机的资源利用率,创建方便,故障恢复时间短
5.QEMU和KVM是什么关系?
「qemu实现硬件模拟,kvm是对虚拟机管理」
6.libvirt的作用是什么?
[2部分组成: C函数库和底层进程,是一种可以建立工具来管理客户操作系统的API(即网卡支持虚拟化)」
7.如何查看虚拟机的某个网卡连接到哪个桥设备?
brctl show,virsh domiflist 虚拟机名
8. virsh dumpxml centos7
列出虚拟机(域)配置信息
9. vish net-dumpxml mynet
列出网络配置信息
10. virsh pool-dumpxml mypool
列出池信息
11.在没有图形的情况下,如何修改kvm虚拟机的密码?
通过guestfish工具virt-edit
12.描述热添加硬盘的详细流程及注意事项
[也可用qemu-img create -f raw test_add.img 10G]
需注意的是?
13.描述热添加网卡的详细流程及注意事项?
可以通过图形化界面添加,也可用命令添加: virsh attach-interface 虚拟机名--type bridge --source br0;复制网卡配置文件cp /etc/sysconfig/network-scripts/ifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth1
14.描述添加CPU的详细流程及注意事项
可以通过图形化界面设置,也可以通过命令: virsh setvcpus centos 4 -live -config/--persistent],需要注意的是要设置最大的vcpus数量
15.描述添加MEM的详细流程及注意事项
可以通过图形化界面设置,也可以通过命令: virsh qemu-monitor-command 虚拟机名 --hmp --cmd balloon 2048,需要注意的是要设置最大内存的maxmum值
16.如何制作Linux模板?
企业级虚拟化实战之KVM——批量部署:创建linux镜像模板
17.使用shell脚本完成KVM虚拟机的批量创建,要求如下:
(1)脚本需要人机交互,当输入虚拟机数量,虚拟机规格参数后,即可批量创建相应机器。
(2)使用EXP技术从网络安装虚拟机,创建多个是使用复制原理。
(3)脚本实现虚拟机生命周期管理,即可实现关机,启动,快照,从快照启动等等。
shell脚本实现虚拟机安装、管理、快照、存储池、批量创建