一、云计算的三种服务模式
laas、pass、saas
1.1 IaaS: Infrastructure-as-a-Service(基础设施即服务)
第一层叫做 IaaS,有时候也叫做
Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。
但是现在有 IaaS,你可以将硬件外包到别的地方去。IaaS
公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。
一些大的 IaaS 公司包括 Amazon,
Microsoft, VMWare, Rackspace 和 Red Hat. 不过这些公司又都有自己的专长,比如 Amazon 和微软给你提供的不只是 IaaS,他们还会将其计算能力出租给你来 host 你的网站。
作用通过 IaaS 这种模式,用户可以从供应商那里获得他所需要的虚拟机或者存储等资源来装载相关的应用,同时这些基础设施的繁琐的管理工作将由 IaaS 供应商来处理。IaaS 能通过它上面对虚拟机支持众多的应用。IaaS 主要的用户是系统管理员。
主要产品包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud 和 Cisco UCS 等。
IaaS 的七个基本功能:
资源抽象:使用资源抽象的方法 (比如,资源池) 能更好地调度和管理物理资源。
资源监控:通过对资源的监控,能够保证基础实施高效率的运行。
负载管理:通过负载管理,不仅能使部署在基础设施上的应用运能更好地应对突发情况,而且还能更好地利用系统资源。
数据管理:对云计算而言,数据的完整性,可靠性和可管理性是对 IaaS 的基本要求。
资源部署:也就是将整个资源从创建到使用的流程自动化。
安全管理:IaaS 的安全管理的主要目标是保证基础设施和其提供的资源能被合法地访问和使用。
计费管理:通过细致的计费管理能使用户更灵活地使用资源。
1.2 PaaS: Platform-as-a-Service(平台即服务)
第二层就是所谓的 PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。
PaaS 公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。
一些大的 PaaS 提供者有 Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近兴起的公司有 AppFog, Mendix 和 Standing Cloud
通过 PaaS 这种模式,用户可以在一个包括 SDK,文档和测试环境等在内的开发平台上非常方便地编写应用,而且不论是在部署,或者在运行的时候,用户都无需为服务器,操作系统,网络和存储等资源的管理操心,这些繁琐的工作都由 PaaS 供应商负责处理,而且 PaaS 在整合率上面非常惊人,比如一台运行 Google App Engine 的服务器能够支撑成千上万的应用,也就是说,PaaS 是非常经济的。PaaS 主要的用户是开发人员。
主要产品包括:Google App Engine,force.com,heroku 和 Windows Azure Platform 等。
主要有四大功能:友好的开发环境:通过提供 SDK 和 IDE 等工具来让用户能在本地方便地进行应用的开发和测试。
丰富的服务:PaaS 平台会以 API 的形式将各种各样的服务提供给上层的应用。
自动的资源调度:也就是可伸缩这个特性,它将不仅能优化系统资源,而且能自动调整资源来帮助运行于其上的应用更好地应对突发流量。
精细的管理和监控:通过 PaaS 能够提供应用层的管理和监控,比如,能够观察应用运行的情况和具体数值 (比如,吞吐量和反映时间) 来更好地衡量应用的运行状态,还有能够通过精确计量应用使用所消耗的资源来更好地计费。
1.3 SaaS: Software-as-a-Service(软件即服务)
第三层也就是所谓 SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是 SaaS 了。
你消费的服务完全是从网页如 Netflix, MOG, Google Apps, Box.net,
Dropbox 或者苹果的 iCloud 那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。
一些用作商务的 SaaS 应用包括 Citrix 的 GoToMeeting,Cisco 的
WebEx,Salesforce 的 CRM,
ADP,Workday 和 SuccessFactors。
通过 SaaS 这种模式,用户只要接上网络,并通过浏览器,就能直接使用在云端上运行的应用,而不需要顾虑类似安装等琐事,并且免去初期高昂的软硬件投入。SaaS 主要面对的是普通的用户。
主要产品包括:Salesforce Sales Cloud,Google Apps,Zimbra,Zoho 和 IBM Lotus Live 等。
谈到 SaaS 的功能,也可以认为是要实现 SaaS 服务,供应商需要完成那些功能? 主要有四个方面:
随时随地访问:在任何时候或者任何地点,只要接上网络,用户就能访问这个 SaaS 服务。
支持公开协议:通过支持公开协议 (比如 HTML4/5),能够方便用户使用。
安全保障:SaaS 供应商需要提供一定的安全机制,不仅要使存储在云端的用户数据处于绝对安全的境地,而且也要在客户端实施一定的安全机制 (比如 HTTPS) 来保护用户。
多住户 (Multi-Tenant) 机制:通过多住户机制,不仅能更经济地支撑庞大的用户规模,而且能提供一定的可定制性以满足用户的特殊需求。
1.4 Iaas 和 Paas 之间的比较
PaaS 的主要作用是将一个开发和运行平台作为服务提供给用户,而 IaaS 的主要作用是提供虚拟机或者其他资源作为服务提供给用户。接下来,将在七个方面对 PaaS 和 IaaS 进行比较:
1) 开发环境:PaaS 基本都会给开发者提供一整套包括 IDE 在内的开发和测试环境,而 IaaS 方面用户主要还是沿用之前比较熟悉那套开发环境,但是因为之前那套开发环境在和云的整合方面比较欠缺,所以使用起来不是很方便。
2) 支持的应用:因为 IaaS 主要是提供虚拟机,而且普通的虚拟机能支持多种操作系统,所以 IaaS 支持的应用的范围是非常广泛的。但如果要让一个应用能跑在某个 PaaS 平台不是一件轻松的事,因为不仅需要确保这个应用是基于这个平台所支持的语言,而且也要确保这个应用只能调用这个平台所支持的 API,如果这个应用调用了平台所不支持的 API,那么就需要对这个应用进行修改。
3) 开放标准:虽然很多 IaaS 平台都存在一定的私有功能,但是由于 OVF 等协议的存在,使得 IaaS 在跨平台和避免被供应商锁定这两面是稳步前进的。而 PaaS 平台的情况则不容乐观,因为不论是 Google 的 App Engine,还是 Salesforce 的 Force.com 都存在一定的私有 API。
4) 可伸缩性:PaaS 平台会自动调整资源来帮助运行于其上的应用更好地应对突发流量。而 IaaS 平台则需要开发人员手动对资源进行调整才能应对。
5) 整合率和经济性: PaaS 平台整合率是非常高,比如 PaaS 的代表 Google App Engine 能在一台服务器上承载成千上万的应用,而普通的 IaaS 平台的整合率最多也不会超过 100,而且普遍在 10 左右,使得 IaaS 的经济性不如 PaaS。
6) 计费和监管:因为 PaaS 平台在计费和监管这两方面不仅达到了 IaaS 平台所能企及的操作系统层面,比如,CPU 和内存的使用量等,而且还能做到应用层面,比如,应用的反应时间(Response Time)或者应用所消耗的事务多少等,这将提高计费和管理的精确性。
7) 学习难度:因为在 IaaS 上面开发和管理应用和现有的方式比较接近,而 PaaS 上面开发则有可能需要学一门新的语言或者新的框架,所以 IaaS 学习难度更低。
PaaS |
IaaS |
|
开发环境 |
完善 |
普通 |
支持的应用 |
有限 |
广 |
通用性 |
欠缺 |
稍好 |
可伸缩性 |
自动伸缩 |
手动伸缩 |
整合率和经济性 |
高整合率,更经济 |
低整合率 |
计费和监管 |
精细 |
简单 |
学习难度 |
略难 |
低 |
未来的 PK
在当今云计算环境当中,IaaS 是非常主流的,无论是 Amazon EC2 还是 Linode 或者 Joyent 等,都占有一席之地,但是随着 Google 的 App Engine,Salesforce 的 Force.com 还是微软的 Windows Azure 等 PaaS 平台的推出,使得 PaaS 也开始崭露头角。谈到这两者的未来,特别是这两者之间的竞争关系,我个人认为,短期而言,因为 IaaS 模式在支持的应用和学习难度这两方面的优势,使得 IaaS 将会在短期之内会成为开发者的首选,但是从长期而言,因为 PaaS 模式的高整合率所带来经济型使得如果 PaaS 能解决诸如通用性和支持的应用等方面的挑战,它将会替代 IaaS 成为开发者的 “新宠”。
它们之间的关系主要可以从两个角度进行分析:其一是用户体验角度,从这个角度而言,它们之间关系是独立的,因为它们面对不同类型的用户。其二是技术角度,从这个角度而言,它们并不是简单的继承关系 (Saa.....
1.5 三种服务模式
根据现在最常用,也是比较权威的 NIST(National Institute of Standards and Technology,美国国家标准技术研究院) 定义,云计算主要分为三种服务模式,而且这个三层的分法重要是从用户体验的角度出发的:
Software as a Service,软件即服务,简称 SaaS,这层的作用是将应用作为服务提供给客户。
Platform as a Service,平台即服务,简称 PaaS,这层的作用是将一个开发平台作为服务提供给用户。
Infrastructure as a Service, 基础设施即服务,简称 IaaS,这层的作用是提供虚拟机或者其他资源作为服务提供给用户。
三种模式之间的关系
它们之间的关系主要可以从两个角度进行分析:其一是用户体验角度,从这个角度而言,它们之间关系是独立的,因为它们面对不同类型的用户。其二是技术角度,从这个角度而言,它们并不是简单的继承关系 (SaaS 基于 PaaS,而 PaaS 基于 IaaS),因为首先 SaaS 可以是基于 PaaS 或者直接部署于 IaaS 之上,其次 PaaS 可以构建于 IaaS 之上,也可以直接构建在物理资源之上。
二、虚拟化概述
2.1 虚拟化是什么?
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
2.2 虚拟化两大组件
虚拟机管理器功能:调用资源
两大核心组件:QEMU、KVM
QEMU:
①可以理解为队列,核心目的是 ** 调用资源内核中的资源 **,需要把 KVM 逻辑分割出来的资源运输给 QEMU,再给虚拟机。
②QEMU 它并不是直接调用,而是用 I/O 方式调用,QEMU 把资源调用来的过程借用 ioctl,QEMU 借助 libvirt 这个工具调用 ioctl,再通过接口,给虚拟机应用程序。
KVM:
①用来逻辑分割物理资源,抽象化为虚拟化资源,根据 VMM 里的配置,会逻辑分割出多少 G,给应用程序,去进行虚拟化。
②只接受来自 QEMU 的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给 QEMU,让 QEMU 判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
对于 workstation 而言,硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口 / dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如 openstack。
2.3 虚拟化类型
1. 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
2. 半虚拟化:需要修改操作系统
3. 直通: 直接使用物理硬件资源(需要支持,还不完善)
全虚拟化: kvm——> 产品 vmware—ce(社区版)
半虚拟化:EXSI——>workstation vsphere
2.4 虚拟化功能
① 在一个操作系统内,模拟多个操作系统
② 以软件的方式模拟物理设备的功能
三、容器的概念
3.1 容器是什么?
容器是一种技术,开发人员打包开发完成一个应用(系统)以及所需的开发环境,然后通过容器可以运行在不同的计算机上面,也不需要重新配置相关环境,不同的是每一台计算机都需要配置运行容器的容器引擎,目前市场上主流就是 Docker 容器引擎,不过 Docker 容器引擎的配置很简单,比配置应用(系统)运行的环境简单,方便太多。每台要运行应用(系统)的计算机上面配置了 Docker 容器引擎之后,都单独独立可以运行之前打包完成的应用(系统)
3.2 容器的优点
· 灵活:即使是最复杂的应用也可以集装箱化
· 轻量级:容器利用并共享主机内核
· 可互换:可以即时部署更新和升级
· 便携式:可以在本地构建,部署到云,并在任何地方运行
· 可扩展:可以增加并自动分发容器副本
· 可堆叠:可以垂直和即时堆叠服务
3.3 容器的缺点
复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器。
原生
Linux 支持:大多数容器技术,比如 Docker,基于
Linux 容器(LXC),相比于在原生 Linux 中运行容器,在 Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性。
不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题。
四、docker 概述
Docker 的容器技术可以在一台下机上轻松为任何应用创建一个轻量级的、可移植的、目给自足的容器。
Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker 的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的 “一次封装,到处运行” 的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
4.1 docker 是什么
· 是一个开源的应用容器引擎,基于 go 语言开发并遵循了 apache2.0 协议开源
· 是在 Linux 容器里运行应用的开源工具
· 是一种轻量级的 “虚拟机 "
· Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量 级的、可移植的、自给自足的容器。
4.2 docker 容器与虚拟机的区别
· Docker 容器
是在 Linux 上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量
· 虚拟机
运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多
4.3 容器在内核中支持两种重要的技术
docker 本质就是宿主机的一个进程,docker 是通过 namespace 实现资源隔离,通过 cgroup 实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配 500g 并不是实际占用物理磁盘 500g)
4.3.1 namespace(命名空间)的六项隔离
命名空间 |
系统调用参数 |
隔离内容 |
UTS |
CLONE_NEWUTS |
主机名与域名 |
IPC |
CLONE_NEWWIPC |
信号量、消息队列和共享内存 |
PID |
CLONE_NEWPID |
进程编号 |
NETWORK |
CLONE_NEWNET |
网络设备、网络栈、端口等 |
MOUNT |
CLONE_NEWNS |
挂载点(文件系统) |
UDER |
CLONE_NEWUSER |
用户和组(3.8 以后的内核才支持) |
4.3.2 控制组(Control groups)
Linux 上的 Do 侧看人引擎还依赖于另一种称为控制组(Cgroups)的技术,Cgroup 将应用和程序限制为一组特定的资源,控制组允许 Docker Engine 将可用的硬件资源共享给容器,并有选择地实施限制和约束。Cgroups 主要是用作资源控制——可以用来划分时间片
六种名称空间是由 cgroups 管理的
最后一种
centos 的 cgroups 管理版本是 3.8 版本,3.6 和 3.5 用不了
cgroups 管理 linux 内核态中资源管理的模块
cgroups 管理一些系统资源
不是
docker 原生的
4.4、Docker 核心概念
4.4.1 镜像
Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
4.4.2 容器
Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是要给简易版的 linux 环境(包括 root 用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
4.4.3 仓库
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。
五、yum 安装 docker
目前 Docker 只能支持 64 位系统
Yum 安装默认安装最新版本,目前最新版本是 2023 版本,但工作中不会用这么新的版本
4.1 yum 安装 docker 依赖包
1. #关闭防火墙和
selinux
systemctl stop firewalld.service
setenforce 0
2.# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
-------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是 Linux 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
-------------------------------------------------------------------------------------------
4.2 设置阿里云镜像源
1. #设置阿里云镜像源
yum-config-manager --add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. #安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
3. #设置为开机自动启动
systemctl start docker.service
systemctl enable docker.service
4.3 查看 Docker 版本信息
1. #查看 docker 版本信息
docker version
2. #查看 docker 信息
docker info
3. #搜索镜像
格式:docker search 关键字
docker search nginx
五、配置阿里云镜像加速器
5.1. 浏览器访问
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
获取镜像加速器配置
5.2 配置镜像加速器、重新加载配置并重启服务
vim /etc/docker/daemon.json
添加自己的加速器地址,如下图
#重新加载配置并重启服务
systemctl daemon-reload
systemctl restart docker
5.3 验证查看
docker info
5.4 镜像存放
#查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下载到本地的所有镜像
docker images
REPOSITORY TAG IMAGE ID
CREATED SIZE
nginx latest ae2feff98a0c 9 days
ago 133MB
六、知识总结补充
6.1 Docker 容器有哪些状态?
· 运行
· 已暂停
· 重新启动
· 已退出
6.2 什么是 Docker?Docker 原理?
docker 是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是 docker 引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
cgroup 资源控制与 namespaces 两者构成了 docker 底层原理
docker 是一种容器技术,** 把 linux 中的
cgroups(资源管理)和 namespace(名称空间)等
** 容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行 cli、api 等),这种 C/S 架构
6.3 简述 Docker 主要使用的技术?
· Cgroups: 资源控制,管理一些系统资源
· Namespace:资源隔离(名称空间)
· rootfs:文件系统隔离(使用内核提供的 rootfs)
· 容器引擎(用户态工具) : 生命周期控制
6.4 简述 Docker 体系架构?
Docker 客户端 - Docker
docker 客户端则扮演着 docker 服务端的远程控制器,可以用来控制 docker 的服务端进程。
Docker 服务端 - Docker Daemon 资源限制
docker 服务端是一个服务进程,管理着所有的容器。
Docker 镜像一 Imagefont
Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包, 其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件
Docker 容器 - Docker Container
Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
Docker 镜像仓库 -- Registryfont
Docker 仓库是用来集中保存镜像的地方, 当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库 (Public) 或者私有仓库(Private、常用)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 **/var/lib/docker** 目录下。
6.5 Docker 有哪些优势?和虚拟化比有什么优势?
docker 把容器化技术做成了标准化平台,只要安装了 docker 引擎,就能使用 docker。
使用
docker 有什么意义 (实现了 3 个统一)
docker 引擎统一了基础设施环境 - docker 环境——>image——> 封装一一个简易的操作系统 (3.0+G)
docker 引擎统一了 程序打包 (装箱 / 封装 - 类比于集装箱) 方式 -
docker 镜像——>images
docker 引擎统—了程序部署 (运行) 方式 - docker 容器——>基于镜像——>运行为容器(可运行的环境)
实现了一次构建,多次、多处使用
6.6 Docker 在后台的标准运行过程?
检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
利用镜像创建并启动一个容器;
分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
分配一个地址池中的 IP 地址给容器;
执行用户指定的应用程序,执行完毕后容器被终止运行。
6.7 集群里面有一个 Docker,其使用率达到 80% 怎么办?
把这个 docker 干掉,它的资源可能会释放,然后重新再建一个,因为集对于集群来说它会有高可用的设置,所以干掉一个影响并不大