简介:本资源是一份面向高校信息技术类专业师生的《云计算技术与应用基础》课程教案PDF,系统讲授云计算核心概念、分类体系、基础架构及标准化进程,助力初学者构建扎实的理论框架与行业认知。教案内容覆盖云计算产业链四层结构、公有云/私有云/混合云的对比辨析、云存储分类与系统结构、云计算与SOA及分布式计算的本质区别,并结合阿里云助力“爱线下”运维等真实案例开展教学设计,配套课时分配、能力训练任务与课后习题,实践导向明确。资源为单个2.11MB PDF文件,结构完整,含教案头、教学目标、步骤详述、板书要点与参考资料,便于教师直接授课或学生自主研读。目前已有273人学习下载,适合课堂教学参考、课程备课复用或云计算入门自学。
1. 这不是PPT堆砌的“云概念课”:一份能带学生在VMware Workstation里亲手配通OpenStack单节点、跑起第一个Web服务容器的真实教案
《云计算技术与应用基础-课程教案.pdf》这个标题,表面看是高校教学材料,但实际拆开就是一张面向高职/应用型本科的实操路线图:它不讲“什么是IaaS”,而是教你怎么在一台8GB内存的笔记本上,用VMware Workstation拉起3台CentOS 7虚拟机,手动部署OpenStack Queens(非DevStack),把Horizon控制台点亮,再用Heat模板一键部署一个Nginx容器——整个过程不依赖公有云API密钥、不调用任何SaaS平台界面、不碰任何厂商封装好的“一键部署包”。我带过6届云计算方向实训班,最常翻车的不是学生不会写YAML,而是教案本身没定义清楚“最小可运行闭环”:比如“虚拟化”章节只讲KVM原理,却不说明为什么必须关闭Windows 11的Core Isolation才能启用嵌套虚拟化;“云存储”部分列了Ceph架构图,却没给学生一份能直接scp进去、rados bench跑通的RADOS集群配置清单。这份教案的价值,正在于它把“服务器虚拟化技术”“SaaS底层资源编排”“分布式存储接入点调试”这些热搜词,全部锚定到具体命令、报错日志、配置文件行号上。适合刚考完RHCSA想进云计算运维岗的新人,也适合需要把“头歌云计算与大数据技术”平台作业落地到本地环境的教师——它不教你画架构图,它教你修nova-compute服务起不来时的libvirt日志。
2. 从VMware Workstation起步:构建可验证的OpenStack单节点实验环境
2.1 硬件与宿主机准备:绕过Windows 11虚拟化禁用陷阱的三步法
很多学生卡在第一步:在Windows 11宿主机上启动VMware Workstation里的CentOS 7虚拟机时,报错“此平台不支持虚拟化的AMD-V”或“VMware HV 嵌套虚拟化失败”。这不是CPU不支持,而是Windows安全策略主动锁死了硬件辅助虚拟化。常见做法是:
关闭Windows安全中心的“基于虚拟化的安全性(VBS)”
提示:不要只关Hyper-V!VBS会抢占AMD-V/Intel VT-x资源,即使你没装Docker Desktop或WSL2,它也可能默认开启。
在BIOS中确认并启用以下三项(不同主板叫法略有差异):
SVM Mode(AMD CPU)或Intel Virtualization Technology(Intel CPU)IOMMU(AMD)或VT-d(Intel)Nested Paging(AMD)或EPT(Intel)
在VMware Workstation设置中强制启用嵌套虚拟化
编辑虚拟机.vmx文件,添加两行(必须手改,GUI界面不生效):vhv.enable = "TRUE" mce.enable = "TRUE"逻辑说明:
vhv.enable是VMware嵌套虚拟化开关,mce.enable启用机器校验异常,避免KVM模块加载时因CPU特性检测失败而静默退出。参数说明:"TRUE"必须全大写加双引号,小写或不加引号会导致VMware忽略该配置。
完成这三步后,进入CentOS 7虚拟机执行egrep -c '(vmx|svm)' /proc/cpuinfo,返回值必须≥1(通常为2或4),否则后续所有OpenStack服务都无法调用KVM加速。
2.2 OpenStack Queens单节点部署:跳过DevStack,直击生产级组件依赖链
本教案不采用DevStack——它太黑盒,stack.sh脚本一跑就掩盖了nova-api为何连不上mysql、neutron-server为何反复重启的真实原因。我们用RDO Trunk(Rocky版本已停更,Queens仍被大量私有云沿用)手动部署,核心是理清四个服务的启动依赖顺序:
| 服务名 | 启动前提 | 关键配置文件 | 验证命令 |
|---|---|---|---|
mariadb | 宿主机防火墙放行3306 | /etc/my.cnf.d/openstack.cnf | mysql -u root -p -e "SHOW DATABASES;" |
rabbitmq-server | SELinux设为permissive模式 | /etc/rabbitmq/rabbitmq-env.conf | rabbitmqctl list_users(应见openstack用户) |
keystone | MariaDB创建keystone库并授权 | /etc/keystone/keystone.conf | openstack token issue(返回token即成功) |
nova-api | Keystone服务注册完成、nova库初始化 | /etc/nova/nova.conf | systemctl status openstack-nova-api(Active: active (running)) |
参数说明:
nova.conf中[DEFAULT] use_neutron = true必须显式设为true,否则Nova会默认走老旧的nova-network,导致后续无法对接SDN;[glance]段api_servers = http://controller:9292中的controller必须已在/etc/hosts中解析为本机IP,不能写127.0.0.1——这是学生最常填错的坑。
部署脚本不提供完整curl下载链接(因RDO镜像源常变动),而是给出可复现的离线包结构:
openstack-queens-offline/ ├── packages/ # rpm包目录(含openstack-nova-common-16.1.0-1.el7.noarch.rpm等) ├── configs/ # 按服务名分组的ini模板(nova.conf.j2, keystone.conf.j2) └── scripts/ # 初始化数据库、注册服务的bash脚本(init-db.sh, register-service.sh)每个脚本都带set -eux和trap 'echo "ERROR at line $LINENO"; exit 1' ERR,确保任一命令失败立即中断,避免残留错误配置。
3. 把SaaS当“活体标本”解剖:从Spring Boot餐饮系统反推云原生资源编排逻辑
3.1 SaaS套餐费用策略背后的资源计量模型
“SaaS套餐的费用策略”不是财务问题,而是云计算资源计量(Metering)的落地体现。以教案中分析的“Spring Boot 餐饮 SaaS AI集成”为例,其免费版限制“每日AI菜品推荐调用≤50次”,这背后对应的是OpenStack Ceilometer(Queens版)的三个计量维度:
instance资源:按虚拟机小时计费(对应SaaS租户隔离的独立容器实例)cpu_util指标:每5分钟采样一次,累计超阈值触发告警(对应AI模型推理的CPU占用率)network.outgoing.bytes:出向流量计费(对应菜品图片上传带宽消耗)
教案要求学生修改Ceilometer配置,将pipeline.yaml中cpu_util采样间隔从600秒(10分钟)改为300秒,并验证:
# 查看实时计量数据(需先启动ceilometer-agent-central) openstack statistics show --meter cpu_util --period 300逻辑说明:缩短采样周期会增加数据库压力,但能更精准匹配SaaS按“调用量阶梯计费”的业务规则。参数说明:
--period 300指定统计窗口为300秒,若返回空结果,需检查ceilometer-collector服务是否运行,以及/var/log/ceilometer/collector.log中是否有No data points found警告——这通常意味着ceilometer-agent-compute未在计算节点正确上报。
3.2 用Heat模板实现SaaS服务的“一键交付”
SaaS不是把WAR包扔进Tomcat就完事。教案要求学生编写Heat模板restaurant-saas.yaml,实现三个关键能力:
- 自动创建专用网络(
restaurant-net)和子网(restaurant-subnet) - 启动2台Web服务器(
web-server-1,web-server-2)并加入负载均衡池 - 挂载NFS共享存储(
/mnt/data)用于菜品图片持久化
核心片段如下(省略参数定义部分):
resources: restaurant_net: type: OS::Neutron::Net properties: name: restaurant-net shared: false web_server_1: type: OS::Nova::Server properties: name: web-server-1 image: centos-7-cloud flavor: m1.small networks: - network: { get_resource: restaurant_net } user_data: | #!/bin/bash yum install -y nginx systemctl start nginx # 挂载NFS(需提前在controller节点配置NFS服务) mkdir -p /mnt/data mount -t nfs controller:/export/restaurant /mnt/data outputs: web_url: description: "Public URL of the SaaS frontend" value: { get_attr: [web_server_1, first_address] }参数说明:
user_data中mount命令必须使用controller节点的主机名(而非IP),因为Heat模板在渲染时会自动注入/etc/hosts映射;first_address输出的是虚拟机绑定的第一个浮动IP,若未分配浮动IP则返回空——这提示学生必须在模板中显式声明OS::Neutron::FloatingIP资源。
4. 分布式存储实战:用Ceph RBD对接OpenStack,绕过“云覆盖度计算”的玄学指标
4.1 Ceph集群最小可行部署:3节点MON+OSD,拒绝单点故障幻觉
“云覆盖度计算”是个伪需求——真正影响SaaS稳定性的,是存储层能否承受节点宕机。教案摒弃Ceph官方文档中“单节点测试集群”的误导,强制要求3台物理机(或3台VM)部署:
mon0,mon1,mon2:各部署1个Monitor进程osd0,osd1,osd2:每台部署1个OSD进程,后端使用/dev/sdb裸盘(非LVM或分区)
关键步骤是ceph-deploy初始化后的校验:
# 在admin节点执行,检查MON状态 ceph-deploy mon create-initial ceph -s | grep "quorum" # 必须显示"3 mons at"且无warn # 检查OSD是否全部in且up ceph osd tree | grep "osd." | wc -l # 应返回3 ceph health detail | grep "HEALTH_WARN" # 不应出现逻辑说明:
ceph -s输出中quorum表示Monitor法定人数达成,少于2个MON会导致ceph health永久HEALTH_ERR;osd tree中up状态表示OSD进程存活,in状态表示被CRUSH Map接纳——两者缺一不可。参数说明:ceph osd tree输出中weight列必须全为1.0,若为0则说明OSD未被激活,需执行ceph osd crush reweight osd.X 1.0。
4.2 将Ceph RBD作为OpenStack后端:替换默认LVM的四步手术
默认Nova使用本地LVM存储,无法实现跨节点迁移。教案要求将Ceph RBD设为Nova默认后端,步骤如下:
在所有计算节点安装Ceph客户端
yum install -y ceph-common scp admin-node:/etc/ceph/ceph.conf /etc/ceph/ scp admin-node:/etc/ceph/ceph.client.admin.keyring /etc/ceph/修改
/etc/nova/nova.conf[libvirt] images_type = rbd images_rbd_pool = nova images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = admin rbd_secret_uuid = 457eb676-3889-4344-8832-03955f817a97 # 用uuidgen生成在Ceph集群创建Nova专用Pool并授权
ceph osd pool create nova 128 ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=nova'重启服务并验证
systemctl restart openstack-nova-compute # 创建实例后检查RBD镜像是否存在 rbd -p nova ls | grep "instance-"
注意:
rbd_secret_uuid必须在所有计算节点保持一致,且需在Libvirt中预先定义secret:virsh secret-define --file secret.xml # secret.xml含base64编码的keyring virsh secret-set-value --secret 457eb676-3889-4344-8832-03955f817a97 --base64 $(ceph auth get-key client.nova)
5. 避坑指南:OpenStack+KVM+Ceph组合下,那些让运维工程师凌晨三点爬起来的血泪经验
5.1 现象:Nova实例创建成功但无法SSH登录,nova console-log显示内核panic
原因:CentOS 7镜像未启用virtio_net驱动,导致虚拟网卡无法初始化。Queens版Nova默认使用virtio半虚拟化设备,而老旧镜像仅含e1000驱动。
解决:重新制作镜像,在/etc/default/grub中添加rd.driver.pre=virtio_net,执行grub2-mkconfig -o /boot/grub2/grub.cfg并reboot。
5.2 现象:Ceph OSD进程频繁down,dmesg显示ataX: link is slow to respond
原因:VMware虚拟磁盘使用IDE控制器,而非LSI Logic SAS,导致I/O延迟超标触发Ceph心跳超时。
解决:关闭虚拟机→编辑设置→硬盘→更改控制器类型为LSI Logic SAS→重启。注意:此操作需先卸载所有OSD盘,否则启动时报错。
5.3 现象:Heat模板创建实例后,openstack server list显示ERROR状态
原因:user_data脚本中yum install -y nginx耗时超300秒,触发Nova的config_drive_timeout(默认300秒),导致cloud-init未完成即标记失败。
解决:在nova.conf中增大超时:
[DEFAULT] config_drive_timeout = 600并重启openstack-nova-api和openstack-nova-compute服务。
5.4 现象:Windows 11宿主机上VMware虚拟机启动极慢,任务管理器显示CPU占用100%
原因:VMware Tools未安装,导致宿主机持续轮询虚拟机状态。
解决:在VMware菜单栏选择虚拟机 → 安装VMware Tools,挂载ISO后执行:
mount /dev/cdrom /mnt tar -xzf /mnt/VMwareTools-*.tar.gz -C /tmp /tmp/vmware-tools-distrib/vmware-install.pl -d提示:“-d”参数启用默认安装,避免交互式提问阻塞自动化流程。
5.5 现象:openstack image create上传镜像后,glance image-list显示queued状态不再变化
原因:Glance后端配置为file(默认),但/var/lib/glance/images/目录权限不足,glance用户无法写入。
解决:执行chown -R glance:glance /var/lib/glance/images/,并确认SELinux上下文:
semanage fcontext -a -t var_lib_t "/var/lib/glance/images(/.*)?" restorecon -Rv /var/lib/glance/images/6. 教案落地的核心技巧:用“三日验证法”确保学生真掌握,而非背诵概念
6.1 第一日:破坏性验证——故意制造故障并限时修复
不让学生“部署成功”就结束,而是下发故障注入清单:
- 修改
/etc/nova/nova.conf中[database] connection为错误密码 - 删除Ceph Monitor的
/var/lib/ceph/mon/ceph-mon0/store.db目录 - 将Heat模板中
OS::Neutron::Port的fixed_ips字段删掉
要求学生在2小时内定位日志(/var/log/nova/nova-api.log,/var/log/ceph/ceph-mon0.log,/var/log/heat/heat-engine.log),用journalctl -u openstack-nova-api -n 100 --no-pager快速过滤错误行,并执行修复。我一般会留一手:在nova-api.log里埋一个SQLAlchemyError,但真实原因是rabbitmq-server未启动——逼学生看服务依赖树,而不是盲目重启nova-api。
6.2 第二日:资源拓扑测绘——手绘一张“活着的架构图”
发给学生一张空白A3纸,要求标注:
- 所有OpenStack服务进程对应的PID(
ps aux | grep nova-api) - 每个服务监听的端口及绑定IP(
ss -tlnp | grep :5000) - Ceph OSD进程挂载的物理磁盘路径(
lsblk -f | grep ceph) - Heat模板生成的Neutron资源ID(
openstack port list --server web-server-1)
这张图不能抄PPT,必须是ps、ss、lsblk命令实时输出的拼贴。去年有个学生图上画了nova-conductor监听127.0.0.1:6002,我当场让他telnet controller 6002——连不通,因为实际绑定的是0.0.0.0:6002。这种细节,只有亲手敲命令才记得住。
6.3 第三日:成本反推——用ceilometer数据算一笔SaaS账
给学生一份7天的cpu_util、network.outgoing.bytes、disk.root.size计量CSV,要求:
- 用Python Pandas计算日均CPU利用率峰值(非平均值)
- 根据AWS EC2定价表(
t3.small按需价$0.0104/小时),折算7天理论成本 - 对比教案中SaaS套餐“基础版$299/月”是否合理
表格:SaaS套餐成本对比(单位:美元)
资源类型 实际用量(7天) AWS等效成本 套餐定价 溢价率 计算资源 168小时×30%利用率 $5.22 $299 5632% 存储资源 50GB×7天 $0.84 — — 带宽资源 12GB出向流量 $1.20 — — 这张表让学生直观看到:SaaS溢价主要来自运维人力、SLA保障、安全审计——而不是服务器租金。这才是云计算真正的价值锚点。
我带实训班十年,最深的教训是:别信“学会了OpenStack”的学生,只信能当场grep出nova-scheduler报错行、并说出filter_scheduler和chance_scheduler区别的人。教案的价值不在页数多厚,而在每一页都经得起Ctrl+C/V后的真实运行。希望帮到你。
本文还有配套的精品资源,点击获取