本文按照老师ppt,不完全遵从书的章节顺序及内容,仅供参考
第一讲 云计算概述
1.云计算定义
云计算是一种无处不在、便捷且按需对一个共享的可配置计算资源(包括网络、服务器、存储、应用和服务)进行网络访问的模式,它能够通过最少量的管理以及与服务提供商的互动实现计算资源的迅速供给和释放
2.云计算优势
- 按需供应的无限计算资源;
- 无须事先花钱就能使用的IT架构;
- 基于短期的按需付费的资源使用;
- 单机难以提供的事务处理环境。
3.云计算的特征***
1.弹性伸缩
2.快速部署
3.资源抽象
4.按用量收费
5.宽带访问
4.云计算的分类(部署模式)***
(1)公共云
(2)私有云(或称专属云)
(3)社区云
(4)混合云
(5)行业云
(6)其他云类型
5.云计算的分类(服务)***
(1)基础设施即服务(Infrastructure as a Service,IaaS)
付费的虚拟主机、内部云平台
(2)平台即服务(Platform as a Service,PaaS)
Tomcat 服务器
(3)软件即服务(Software as a Service,SaaS)
6.作为云计算服务的计算范式
- 横向云体逻辑结构
- 纵向云栈逻辑结构
第二讲 分布式计算
1.定义
在两个或多个软件互相共享信息,这 些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行
2.ACID原则
数据库事务正常执行的四个原则
-
原子性(Atomicity)
事务里的所有操作要么全部做完,要么都不做
-
一致性(Consistency)
数据库要一直处于一致 的状态
-
独立性(Isolation)
并发的事务之间不会互相影响
-
持久性(Durability)
一旦事务提交后,它所做的修改将会永久保存在数据库上
3.CAP理论***
定义
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
一致性
- 更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致
- 客户端:多并发访问时更新过的数据如何获取
- 服务端:如何将更新复制分布到整个系统,以保证数据的最终一致性
可用性
- 服务一直可用,而且是在正常的响应时间内
- 当同时要求分区容错性时,这是一个很强的定义:即使是严重的网络错误,每个请求也必须终止
- 通常情况下可用性和 分布式数据冗余、负载均衡等有着很大的关联
分区容错性
- 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务
4.BASE理论***
定义
-
基本可用(Basically Available)
分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用
-
软状态( Soft State)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性 允许不同节点间副本同步的延时
-
最终一致性(Eventual Consistency)
系统中的所有数据副本经过一定时间后,最终能够达到一致的状态 DNS系统
5.BASE和ACID的区别与联系
- ACID是传统数据库常用的设计理念,追求强一致性模型。
- BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。
- 在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。
6.最终一致性***
讨论一致性的场景
- 存储系统:存储数据,并提供可用性和持久性保证。
- 分布式处理程序A、B、C:相互独立,实现对存储系统的读写操作。
强一致性(即时一致性)
假如A先写入了一个值到存储系统,存储系统保证后续A、 B、C的读取操作都将返回最新值
弱一致性
假如A先写入了一个值到存储系统,存储系统不能保证后续A、B、C的读取操作能读取到最新值
最终一致性
- 是弱一致性的一种特例
- 假如A首先“写”了一个值到存储 系统,存储系统保证如果在A、B、C后续读取之前没有其 他写操作更新同样的值的话,最终所有的读取操作都会读 取到A写入的最新值
“不一致性窗口”影响因素
- 交互延迟
- 系统的负载
- 复制技术中复本的个数
7.一致性散列
- 利用散列函数快速确定数据应该存在哪个节点上
- 访问数据时同样也能快速定位数据节点
8.分布式系统
- 容错性
- 高可扩展性
- 开放性
- 并发处理能力
- 透明性
9.分布式存储系统(第四讲)
5个方向
-
结构化存储
关系型数据库
-
非结构化存储
HDFS
-
半结构化存储
NoSQL
-
In-memory 存储
Redis
-
NewSQL
Spanner
第三讲 虚拟化技术
1.虚拟化技术分类
1.服务器虚拟化
2.网络虚拟化
3.桌面虚拟化
4.软件定义的存储
2.服务器虚拟化
特性
- 多实例
- 隔离性
- 封装性
- 高性能
虚拟化的物理资源
- 计算资源(CPU、内存)
- 存储资源
- 网络资源
3.基本概念***
- Virtual Host 是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。
- Guest 虚拟机客户,就是使用虚拟机的人
- VMM 虚拟机监视程序 ,监控系统行为是虚拟机系统的核心任务监控系统可用于调度任务、负载均衡、向管理员报告软硬件故障,并广泛控制系统的使用情况
4.虚拟机技术分类***
(1)全虚拟化
-
使用VMM二进制翻译客户操作系统的请求
-
虚拟化软件层将操作系统的 指令翻译并将结果缓存供之后使用,而用户级指令无须修改就可以运行,具有和物理机一样的执行速度
(2)半虚拟化 (类虚拟化)
- 将不可虚拟化的操作系统指 令替换为超级调用
- 虚拟机系统和虚拟化软件层通过交互来改善性能和效率
- 价值在于更低的虚拟化代价,但是性能优 势根据不同的工作负载有很大差别
- 不支持未经修改的操作系统(如Windows) ,因此它的兼容性和可移植性较差
(3)硬件辅助虚拟化(完全虚拟化)
- 使用CPU相应状态位捕获客户操作系统的请求
- 针对特权指令为CPU添加了 一个执行模式,即VMM运行 在一个新增的根模式下
5.商用虚拟机技术***
1.Xen虚拟机技术
- Xen 需要修改操作系统内核
- Xen对虚拟机的虚拟化分为半虚拟化(Para virtualization)和完全虚拟化
- 在Xen上虚拟的Windows虚拟机必须采用完全虚拟化技术
2.KVM虚拟机技术
- 既可以在全虚拟化模式下运行,也能够为部分操作系统提供准虚拟化支持
3.Hyper-V虚拟化技术
- 是准虚拟化的监视器
4.VMware ESX和ESXi虚拟化技术
- 均为全虚拟化产品
- 面可以运行任意操作系统
5.VMware Workstation
- 准虚拟化系统
- 可以将多个虚 拟机作为一个组来看待
6.KVM虚拟机技术(内核虚拟机)***
KVM的运行需要主机是x86架构且硬件支持虚拟化技
能在不改变Linux或Windows镜像的情况下同时运行多个虚拟机,并为每一个虚拟机配置个性化硬件环境
特点
- 高性能:Linux主流的硬件辅助虚拟化机制
- 成本可控:不会受限于许可费用
- 需要CPU硬件支持
主要功能
- 虚拟主机管理:支持对虚拟主机的创建、启动、编辑、关闭、暂停;无虚拟主机使用数量限制
- 共享存储管理:支持本地文件系统、分布式文件系统、集群文件系统、NFS、LUN挂载与归并
- 网络管理:支持虚拟网络设置与管理
- 快照与备份管理:支持虚拟主机快照的创建与管理;支持虚拟主机的备份与恢复
- 迁移管理:支持虚拟主机的离线迁移、故障转移
qemu
- 原来是独立的全虚拟化软件,性能较差
- 现在一般与KVM结合(qemu-kvm),由qemu充当外层管理控制,底层内核依赖于KVM
- 采用pass through 半虚拟化设备以提高性能
libvirt
- 目前使用最广泛的对KVM虚拟机进行管理 的工具和API
- 调用qemu-kvm操纵虚拟机
- qemu-kvm调用KVM等内核模块实现虚拟化
7.qemu-kvm使用***
(1)qemu-img命令:用于管理虚拟机磁盘映像 ◦
- check用于检查磁盘镜像
check [-f fmt] filename
对磁盘镜像文件进行一致性检查,查找镜像文件中的错误
参数-f fmt是指定文件的格式,filename是磁盘镜像文件的名称(包括路径)。
- create用于创建磁盘镜像
create [-f fmt] [-o options] filename [size]
创建一个格式为fmt大小为size文件名为filename的镜像文件。
根据文件格式fmt的不同,还可以添加一个或多个选项(options)来附加对该文件的各种功能设置,可以使用“-o ?”来查询某种格式文件支持那些选项,在“-o”选项中各个选项用逗号来分隔。
size选项用于指定镜像文件的大小,其默认单位是字节(bytes)
例:qemu-img create -f raw windows 4G
- convert用于执行磁盘镜像的格式转换,甚至可以执行异构 虚拟主机之间的磁盘镜像转换 ◦
convert [-c] [-f fmt] [-O output_fmt] [-o options] filename% [filename2 […]] output_filename
将fmt格式的filename镜像文件根据options选项转换为格式为output_fmt的名为output_filename的镜像文件
例:qemu-img convert my-vmware.vmdk my-kvm.img
- info用于查看磁盘镜像信息
info [-f fmt] filename
展示filename镜像文件的信息
例:qemu-img info rhel6u3.img
- snapshot用于磁盘镜像快照的创建、删除与应用
snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
“-l” 选项是查询并列出镜像文件中的所有快照,“-a snapshot”是让镜像文件使用某个快照,“-c snapshot”是创建一个快照,“-d”是删除一个快照。
- rebase用于磁盘镜像的派生与调整
rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
改变镜像文件的后端镜像文件,只有qcow2和qed格式支持rebase命令。使用“-b backing_file”中指定的文件作为后端镜像,后端镜像也被转化为“-F backing_fmt”中指定的后端镜像格式
(2)qemu-kvm命令 用于运行与安装KVM虚拟主机
- 工具命令格式
qemu-kvm [options] [disk_image]
opions 是各种选项、参数,disk_image 是客户机的磁盘镜像文件(默认被挂载为第一个 IDE 磁盘设备)
- -cpu 参数
指定cpu模型,默认的为qemu64
- -m megs 参数
设置客户机内存大小为 megs MB。默认单位:MB,可设置 GB
- -hda
指定IDE磁盘,后面可以跟磁盘镜像文件
- -cdrom file
使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用:将file指定为/dev/cdrom可以直接使用物理光驱
- -boot [order=drives][,once=drives][,menu=on|off]
定义启动设备的引导次序,每种设备使用一个字符表示:不同的架构所支持的设备及其表示字符不尽相同,由软盘(a)、硬盘©或CD-ROM(d)启动,n-p表示网络适配器,默认为硬盘设备。
例如:-boot order=dc,once=d
- -vnc display[,option[,…]]
指定VNC管理地址
默认情况下,qemu使用SDL显示VGA输出:使用-vnc选线,可以让qemu监听在vnc上,并将VGA输出重定向到VNC会话,使用此选项时,必须使用-k选项指定键盘布局类型,其有许多子选项,具体参考qemu-kvm的手册
display:
1)host:N
172.16.100.7:1,监听于172.16.100.7主机的5900+N的端口上
2)unix:/path/to/socket_file
3)none
options:
password:连接时需要验证密码:设定密码通过monitor接口使用change
reverse:“反向”连接至某处于监听状态的vncview上:
- -net
用于配置网络信息,如配置IP地址、VLAN信息、 MAC地址信息等
nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:
- 举例
/lib/libexec/qemu-kvm -vnc :3 -cdrom win98.iso -m 256 -boot d windows
win98.iso已经预先上传至该目录
该文件作为CD-ROM镜像
安装过程通过vnc viewer远程控制(5900+?端口)
内存256Mb
CD-ROM启动
7.virsh***
(1) virsh使用
- list命令可以查看所有虚拟主机列表
- dominfo命令可以查看虚拟主机的详细信息
- destroy命令可以关闭虚拟主机
- suspend命令暂停已经运行的虚拟主机
- resume 恢复启动暂停的虚拟主机
- create命令创建虚拟主机
前提:创建磁盘镜像;编辑XML配置文件;define命令注册虚拟主 机
(2)windows.xml
<domain type='kvm'> //虚拟机管理程序为kvm
<name>windows</name> //虚拟机名字
<uuid>76468be4-d974-3d5e-095a-68a520cc6219</uuid> //全球唯一标识符,uuidgen生成
<memory>262144</memory> //可以分配到的最大内存
<currentMemory>262144</currentMemory> //实际分配到的内存
<vcpu>1</vcpu> //最多分配CPU个数
<os>
<type arch='x86_64' machine='pc'>hvm</type> //x86_64架构,pc类型的机器,pv是半虚拟化,hvm是全虚拟化
<boot dev='cdrom'/> //fd(软盘)、hd(硬盘)、cdrom(只读光盘)、network,它经常被用来指定下一次启动
</os>
<features>
<acpi/>
<apic/>
</features>
<clock offset='localtime'/> //UTC:当引导时客户端时钟同步到UTC时钟
//localtime:当引导时客户端时钟同步到主机时钟所在的时区
<on_poweroff>destroy</on_poweroff> //当客户端请求poweroff时执行特定的动作
<on_reboot>restart</on_reboot> //当客户端请求reboot时执行特定的动作
<on_crash>restart</on_crash> //当客户端崩溃时执行的动作
//destory:domain将会被完全终止,domain的所有资源会被释放
//restart:domain会被终止,然后以相同的配置重新启动
//preserver:domain会被终止,它的资源会被保留用来分析
//rename-restart:domain会被终止,然后以一个新名字被重新启动
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator> //指定模拟设备二进制文件的全路径
<disk type='file' device='disk'> //硬盘
<driver name='qemu' type='qcow2' cache='none'/> //name属性选择一个主要的后端驱动的名称,可选type参数可以指定一个子类型,cache属性控制cache机制
<source file='/var/lib/libvirt/images/win'/>//在disk的type是file时,file属性指定一个合格的全路径文件映像作为客户端的磁盘
<target dev='hda' bus='ide'/> //dev属性表明本地磁盘在客户端上的实际名称,bus属性指定了哪种类型的磁盘被模拟
</disk>
<disk type='file' device='cdrom'> //光盘
<driver name='qemu' type='raw'/>
<source file='/home/ISOs/WindowsXP_SP2.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/> //指定客户端不能修改设备
</disk>
<controller type='pci' index='0' model='pci-root'/> //控制器
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes'
listen='0.0.0.0'/> //本机ip,端口号5900
</devices>
</domain>
(3)创建虚拟机并运行
virsh define windows.xml
virsh start windows
8.补充
应用程序不可能导致系统死机,驱动程序可能
第四讲 分布式存储、软件定义网络
1.分布式存储系统***
分布式存储系统是将为数众 多的普通计算机或服务器通过网络进行连接,同时对 外提供一个整体的存储服务。
特性
- 高性能
- 可扩展
- 低成本
- 易用性
分类
- 分布式文件系统
- 分布式键值(Key-Value)系统
- 分布式表系统
- 分布式数据库
2.数据类型***
- 非结构化数据:一般指无法结构化的数据,例如图片,文件,视频
- 结构化数据:具有模式的数据,结构就是模式,例如数据库
- 半结构化数据:数据是有结构的,但却不方便模式化
3.重要存储解决方案***
(1) SAN(Storage Area Network)
通过将磁盘存储系统和服务器 直接相连的方式提供一个易扩 展、高可靠的存储环境,高可 靠的光纤通道交换机和光纤通 道网络协议保证各个设备间链 接的可靠性和高效性。设备间 的连接接口主要是采用FC或者 SCSI
(2) NAS(Network Attached Storage)
通过基于TCP/IP的各种上层 应用在各工作站和服务器之 间进行文件访问,直接在工 作站客户端和NAS文件共享 设备之间建立连接,NAS隐 藏了文件系统的底层实现, 注重上层的文件服务实现, 具有良好的扩展性
(3)Ceph
-
Ceph是一个统一的、分布式的存储系统。
-
① 统一:意味着Ceph可以以一套存储系统同时提供“对象 存储”“块存储”和“文件系统”三种功能,以满足不同 应用的需求。
-
② 分布式:意味着无中心结构和系统规模的无限(至少理 论上没有限制)扩展。在实践当中,Ceph可以被部署于成 千上万台服务器上。
-
设计思路
充分发挥存储设备自身的计算能力 去除所有的中心点
4.覆盖网络(Overlay Network)***
- 是一种在原有网络基础上构建网络连接抽象及管理的技术
- 覆盖网络中的节 点可以被认为是通过虚拟或逻辑链接相连,其中每个链接对应一条路径(Path)
- 通常的实现方法是在原有网络的基础上构建隧道
5.软件定义网络(SDN)***
SDN并不会为网络引入新的网络功能,SDN的主要功能是解决如何让网络的控制逻辑更好地控制网络中交换机和路由器的行为
6.网络功能虚拟化(NFV)***
利用虚拟化技术,将网络节点阶层的功能,分割成几个功能区块,分别以软件方式实现,不再局限于硬件架构
7.补充
(1)SAN和NAS的区别是什么
1.结构不同,NAS有自己的文件系统管理
2.目标不同,NAS是将目光集中在应用、用户和文件以及它们共享的数据上。SAN是将目光集中在磁盘、磁带以及联接它们的可靠的基础结构。
(2)在云计算服务的供应关系中,云服务供应商的客户被 称为租户
(3)两种不同的云计算服务架构便是“单租户 架构”(Single-Tenancy)和“多租户架构”(Multi- Tenancy)
第五、六讲 OpenStack
1.OpenStack组件***
2.OpenStack组件之间的通信关系***
- 基于AMQP协议的通信 – 用于每个项目内部各个组件之间的通信。
- 基于HTTP协议进行通信 – 通过各项目的API建立的通信关系,API都是RESTful Web API。
- 通过Native API实现通信 – OpenStack各组件和第三方软硬件之间的通信。
3.OpenStack部署:控制节点/计算节点***
- 控制节点一般只需要一个网络端口用于通信和管理各个节点
- 计算节点需要两个网络端口,一个与控制节点进行通信,受控制节点统一调配;另一个与网络节点和存储节点进行通信
- 存储节点需要两个网络接口,一个与控制节点进行通信,受控制节点统一调配;另一个与计算节点和网络节点进行通信
- 网络节点通常需要3个网络端口,分别用于与控制节点进行通信、与除控制节点之外的计算和存储节点之间的通信、外部 的虚拟机与相应网络之间的通信
4.OpenStack网络:提供者网络/自服务网络***
5.OpenStack API形式:RESTful API***
- OpenStack各个项目都提供了RESTful架构的API作为对外提供的接口。
- RESTful架构的核心是资源和资源的CRUD操作。
- OpenStack定义了很多的资源,并实现了针对这些资源的各种操作函数。
- 各个项目的API服务进程接收到客户端的HTTP请求时,一个所谓的“路由”模块就会将请求的URL转化成相应的资源,并路由到合适的操作函数上。
- 面向资源是REST最明显的特征,REST要求必须通过统一的接口来 对资源执行各种操作。
- RESTful API需要通过HTTP服务提供。
6.REST资源CRUD操作与HTTP请求类型的对应***
- Create:POST
- Read:GET
- Update:PUT
- Delete:DELETE
7.OpenStack API访问方式***
- cURL命令
利用URL规则在命令行下工作。 - OpenStack命令行客户端
提供一个统一的命令行工具openstack。 - REST客户端
浏览器通过Web接口使用OpenStack服务。 - OpenStack的Python SDK
实现对OpenStack API的Python绑定,让开发人员通过Python对象的 调用,而不是直接进行REST调用,使用Python执行自动化任务。
8.OpenStack认证与API请求流程***
(1)向身份端点(Identity endpoint)请求一个认证令牌。在 该请求中包括一个凭证。
(2)如果请求成功,服务器会返回一个认证令牌。
(3)发送API请求,并在X-Auth-Token头部包括上一步返回 的认证令牌。可以一直使用这个令牌发送API请求,直到服务 完成该请求,或者出现未授权(401)的错误。
(4)如果遇到未授权(401)的错误,则重新请求另一个令牌。
9.curl访问API:理解命令行参数含义***
curl -v -s -X POST $OS_AUTH_URL/auth/tokens?nocatalog -H
"Content-Type: application/json" -d '{ "auth": { "identity": { "methods":
["password"],"password": {"user": {"domain": {"name":
"'"$OS_USER_DOMAIN_NAME"'"},"name": "'"$OS_USERNAME"'",
"password": "'"$OS_PASSWORD"'"} } }, "scope": { "project": { "domain":
{ "name": "'"$OS_PROJECT_DOMAIN_NAME"'" }, "name":
"'"$OS_PROJECT_NAME"'" } } }}' | python -m json.tool
(1)导出OS_TOKEN环境变量,将其值设为令牌ID(上例中XSubject-Token值)。默认令牌每一小时过期,可以配置不同的生存期。
(2)设置OS_PROJECT_NAME环境变量,例如: export OS_PROJECT_NAME=demo
(3)设置OS_COMPUTE_API环境变量,
例如:export OS_COMPUTE_API=http://172.20.2.227:8774/v2.1/
(4)使用Compute API列出实例类型,例如: curl -s -H “X-Auth-Token: $OS_TOKEN” $OS_COMPUTE_API/flavors | python -m json.tool
(5)通过-X来指定请求时的HTTP方法
(6)通过-H来添加Header信息,后面同样是跟键值对,不过不需要大括号
第八讲 云原生应用
1.云原生应用的技术:微服务、DevOps、容器技术、CI/CD***
- 容器:更高的资源使用效率,保持运行环境的一致性,增强系统的扩 展性和自愈能力
2.云基础架构4层模型
- 虚拟化
- Web服务
- 公共管理(Orchestra)
- 客户端用户界面
3. 云原生应用12要素*****
1.基准代码
一份代码库与多份部署
2.依赖
显式声明依赖关系
3.配置
在环境中存储配置
4.后端服务
把后端服务当作附加资源
5.构建,发布,运行
严格分离构建和运行
6.进程
以一个或多个无状态进程运行应用
7.端口绑定
通过端口绑定提供服务
8.并发
通过进程模型进行扩展
9.易处理
快速启动和优雅终止可最大化健壮性
10.环境等价
尽可能保持开发与预发布线上环境相同
11.日志
把日志当作事件流
12.管理进程
后台管理任务当作一次性进程运行
4.云原生应用开发原则
- 云服务优先策略
- 基础设施即代码
- 敏捷交付
- 自动化交付原则
- 基于服务架构
- 12要素应用
第十,十一,十二讲 云服务的基础设施
1.云件系统软件层架构
◦ Container Service
◦ X Service
◦ Web Service
2.微服务架构相关:SOA/MSA***
面向服务架构(SOA, Service Oriented Architecture )
- 面向服务的架构是一个组件模型,它将应用程序的不同功 能单元(称为服务)通过这些服务之间定义良好的接口和 契约联系起来。
- SOA实际是对软件构件之间的进一步解耦。
微服务架构(MSA,MicroService Architecture) *****
- 是一种软件架构风格,以专注于单一责任与功能的小型构 建块 (Small Building Blocks) 为基础,组合出复杂的大型应用 程序,使用与编程语言无关的 API 集相互通信。
- 微服务:依业务功能设计的小服务,拥有自己的进程,使 用轻量化机制与其他服务通信(通常是HTTP API ),以全 自动的方式部署,使用最小规模的集中管理能力,服务可以用不同的编程语言与数据库等组件实现
3.Web Service相关:SOAP方式/RESTful方式***
◦ SOAP是针对RPC的一种通用解决方案,而RESTful是面向远 程资源操作的解决方案。
◦ RESTful的操作限于对资源的CRUD操作,有局限性,而 SOAP可以自定义操作方法。
◦ RESTful从根本上保证服务是无状态的,而SOAP并未限制服 务的模式(可以是stateless或者stateful)。
◦ RESTful以HTTP作为应用协议(不同HTTP请求方法对应CRUD操作),而不仅仅是传输协议,因而通信开销最小。
4.容器与虚拟机技术的对比***
- 虚拟机是“重量级”的:通常包含整个操作系统及其应用程序,同时也需要运行一个 hypervisor 来控制虚拟机,镜像大小在10G量级,部署和启动需要较长时间
- 容器是“轻量级”的,镜像大小在100M 量级,可以在秒级启动
- 容器技术与虚拟机技术并不互斥,云计算环境中容器一般运行在虚拟机中
5.容器技术的优势***
◦ 简化部署:应用打包成单一地址访问、Registry存储、通过 单一命令就可以部署完成的组件
◦ 快速启动:容器技术对操作系统的资源进行抽象而非对硬 件资源进虚拟化,打包好的服务可以快速启动
◦ 服务组合:采用容器的方式进行部署,整个系统会变得易于组合
◦ 易于迁移:允许用户对工作负载进行迁移,避免局限于单 一的平台提供商
6.Docker核心技术:chroot、CGroups、namespace、UnionFS***
- chroot:通过改变系统根目录,能够限制用户的权利,在新 的根目录下并不能够访问旧系统根目录的结构和文件
- CGroups:隔离和限制宿主机器上的物理资源,例如 CPU 、内存、磁盘 I/O 和网络带宽
- namespaces:是 Linux 提供的用于分离进程树、网络接口、 挂载点以及进程间通信等资源的方法
- UnionFS:支持分层文件系统构造镜像
7.Docker基本概念:镜像、仓库(docker.io)、容器***
镜像(image) –
- 就是一堆只读层(read-only layer)的统一视角 –
- Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像 ,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
仓库(repository) –
- 是集中存放镜像文件的场所,官方仓库 docker.io –
- 用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有 或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只 需要从仓库上 pull 下来
容器(container) –
- 容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除 –
- 每个容器都是相互隔离的、保证安全的平台,可以把容器看做是一 个独立的 Linux 环境和运行在其中的应用程序 –
- 一个镜像可以创建很多容器
8.Docker基本命令:pull、push、run、build、ps、rm、rmi、login***
- docker pull 获取镜像
- docker push 上传镜像
- docker run 创建容器,是docker create和docker start两个命令的组合
- docker build 利用 Dockerfile 来创建镜像,Dockerfile 中每条指令创建镜像的一层
- docker ps 查看容器列表
- docker rm 删除容器
- docker rmi 删除镜像
- docker login -u 用户名 -p 密码 登录用户
9.Docker镜像构建:Dockerfile解读***
(1)sa-webapp
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#COPY :复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的
COPY sa /app
#ADD 文件放在当前目录下,拷过去会自动解压(相当于 COPY,但是比 COPY 功能更强大)
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
#VOLUME:挂载目录
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf #字符串写入文件
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
第13讲
1.应用扩展方式:垂直扩展scale up/水平扩展 scale out***
- 垂直扩展(Scale up):在同一个逻辑单位中添加资源以扩充处理能力,例如增加服务器的CPU数量、内存数量、硬盘数量等,受制于 硬件限制,会有无法突破的上限。
- 水平扩展(Scale out):增加更多的逻辑单位并使其成为一个整体协同工作,以获得更强处理能力,理论上可以无限扩展。
2.云操作系统
3.云资源调度策略分类***
4.容器编排的任务***
◦ 让用户控制容器启动和停止的时间、将其组合到集群中, 以及协调应用组合的流程。
◦ 允许用户指导容器部署与自动更新、运行状况监控以及故 障转移等。
5.Kubenetes基本概念:Pod、Service、Deployment、Label***
6.Kubenetes使用:解读YAML文件
(1)sa-frontend-pod.yaml
apiVersion: v1
kind: Pod # 1 指定想创建的 Kubernetes 资源的类型,这里是 Pod
metadata:
name: sa-frontend # 2定义该资源的名字,在这里命名为 sa-frontend
labels:
app: sa-frontend
spec: # 3 定义了资源应有的状态,Pod Spec 中最重要的属性是容器的数组
containers:
- image: xieqian02/sa-frontend # 4希望在本 Pod 中启动的容器的映像
name: sa-frontend # 5 Pod 中容器的名字
ports:
- containerPort: 80 # 6是指容器监听的端口号
(2)deployment
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment为控制器
metadata: #定义资源的元数据信息
name: nginx-test #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义资源标签
app: nginx
spec:
replicas: 3 #定义副本数量
selector: #定义选择器
matchLabels: #匹配上面的标签
app: nginx #匹配模板名称
template: #定义模板
metadata:
labels:
app: nginx
spec:
containers: #定义容器信息
- name: nginx #容器名,与标签名要相同
image: nginx:1.15.4 #容器使用的镜像以及版本
ports:
- containerPort: 80 #定义容器的对外端口
(3)service
apiVersion: v1
kind: Service # 指明资源类型是 service
metadata:
name: httpd-svc # service 的名字是 httpd-svc
labels:
name: httpd-svc
spec:
ports: # 将 service 8080 端口映射到 pod 的 80 端口,使用 TCP 协议
- port: 8080
targetPort: 80
protocol: TCP
selector:
run: httpd # 指明哪些 label 的 pod 作为 service 的后端
未完待续
这个和机器学习一起更,肝不动了
直接肝完后面
完结撒花✿✿ヽ(°▽°)ノ✿