云计算相关

in Inbox with 0 comment

1. 云计算

img

云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。用户不再需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。

云计算(Cloud Computing)是分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、 网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)、热备冗余(High Available)等传统计算机和网络技术发展融合的产物。

1.1 云计算的五大特点

  1. 大规模、分布式
    “云”一般具有相当的规模,一些知名的云供应商如Google云计算、Amazon、IBM、微软、阿里等也都拥能拥有上百万级的服务器规模。而依靠这些分布式的服务器所构建起来的“云”能够为使用者提供前所未有的计算能力。
  2. 虚拟化
    云计算都会采用虚拟化技术,用户并不需要关注具体的硬件实体,只需要选择一家云服务提供商,注册一个账号,登陆到它们的云控制台,去购买和配置你需要的服务(比如 云服务器,云存储,CDN等等),再为你的应用做一些简单的配置之后,你就可以让你的应用对外服务了,这比传统的在企业的数据中心去部署一套应用要简单方便得多。而且你可以随时随地通过你的PC或移动设备来控制你的资源,这就好像是云服务商为每一个用户都提供了一个IDC(Internet Data Center)一样。
  3. 高可用性和扩展性
    那些知名的云计算供应商一般都会采用数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。基于云服务的应用可以持续对外提供服务(7*24小时),另外“云”的规模可以动态伸缩,来满足应用和用户规模增长的需要。
  4. 按需服务,更加经济
    用户可以根据自己的需要来购买服务,甚至可以按使用量来进行精确计费。这能大大节省IT成本,而资源的整体利用率也将得到明显的改善。
  5. 安全
    网络安全已经成为所有企业或个人创业者必须面对的问题,企业的IT团队或个人很难应对那些来自网络的恶意攻击,而使用云服务则可以借助更专业的安全团队来有效降低安全风险。

1.2 服务模式

Pass

1.3 部署模型

云计算离不开底层的虚拟化技术支持。

2. 虚拟化

虚拟化是为一些组件(如虚拟应用、服务器、存储和网络)创建基于软件(或虚拟)的表现形式的过程。它是一种可以为所有规模的企业降低 IT 开销,同时提高效率和敏捷性的最有效方式。

2.1 虚拟化的优势

虚拟化可以提高 IT 部门的敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更优异的性能和资源可用性、自动化运维 - 虚拟化的所有这些优势不仅简化了 IT 管理,还降低了 IT 拥有成本和运维成本。其他优势包括:

2.2 虚拟化的工作原理

虚拟化基础知识
由于 x86 服务器的局限性,许多 IT 组织必须部署多台服务器,其中每台服务器的运行容量只占其容量的一小部分,以便跟上当今的高存储和处理需求。最终的结果是:效率极低且运维成本过高。
进入虚拟化时代。虚拟化依赖于软件来模拟硬件功能并创建虚拟计算机系统。这样,IT 组织便能够在单台服务器上运行多个虚拟系统,也就是运行多个操作系统和应用。由此产生的优势包括实现规模经济并提高效益。
虚拟机
虚拟计算机系统称为“虚拟机”(VM):它是一种严密隔离的软件容器,内含操作系统和应用。每个功能完备的虚拟机都是完全独立的。通过将多台虚拟机放置在一台计算机上,可仅在一台物理服务器或“主机”上运行多个操作系统和应用。
名为“hypervisor”的精简软件层可将虚拟机与主机分离开来,并根据需要为每个虚拟机动态分配计算资源。

img

2.3 虚拟机的主要特性

虚拟机具有以下特征,这些特征可提供多项优势。

01.png

2.4 虚拟化解决方案的类型

AMD虚拟化(AMD Virtualization),缩写为“AMD-V”,是AMD为64位的x86架构提供的虚拟化扩展的名称,但有时仍然会用“Pacifica”(AMD开发这项扩展时的内部项目代码)来指代它。

2.5 虚拟化技术

Image result for Hypervisor

虚拟化技术指的是软件层面的实现虚拟化的技术,整体上分为开源虚拟化和商业虚拟化两大阵营。典型的代表有:Xen,KVM,WMware,Hyper-V、Docker容器等。

Xen和KVM,是开源免费的虚拟化软件;WMware是付费的虚拟化软件;Hyper-V微软的收费虚拟化技术;Docker是一种容器技术,属于一种轻量级虚拟化技术。

KVM
KVM是集成到linux内核的系统虚拟化模块,使用linux自身调度器进行管理,工作在X86架构且需支持硬件辅助虚拟化技术(Intel VT和AMD-V)。

KVM仅仅是一个Linux内核的模块,当在Linux中安装了KVM后,Linux会变成了Hypervisor,即VMM,进行CPU和内存的虚拟管理,而qemu工具实现虚拟机的创建管理,monitor管理各个IO设备。

KVM目前已成为的主流VMM之一。

Xen
Xen 是最早的开源虚拟化引擎,最初是剑桥大学Xensource的一个开源研究项目。Xen 是一种直接运行在硬件上的软件层,它能够在计算机硬件上同时运行多个客户操作系统(Guest OS)。

XEN支持更广泛的CPU架构,不仅支持CISC的X86/X86_64 CPU架构,还支持RISC CPU架构,如IA64、ARM等。

vSphere
VMware vSphere是VMware的企业级虚拟化产品,它本身就是一个用来管理硬件资源的特殊的操作系统,可以直接运行在裸机上面。虚拟化内核(称为 VMkernel),完全负责对硬件及虚拟机的管理。

VMware vSphere使用虚拟化将单个数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。VMware vSphere 将这些基础架构作为一个统一的运行环境来管理,并提供工具来管理该环境中的数据中心。

VMware vSphere 堆栈包括虚拟化、管理和接口层。vSphere 的两个核心组件是 ESXi 和 vCenter Server。ESXi 虚拟化平台用于创建和运行虚拟机和虚拟设备。vCenter Server 服务用于管理网络和池主机资源中连接的多个主机。

Hyper-V
Hyper-V是微软所推出的虚拟化技术,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。

Hyper-V 提供硬件虚拟化。 这意味着每个虚拟机都在虚拟硬件上运行。 Hyper-V 允许你创建虚拟硬盘驱动器、虚拟交换机以及许多其他虚拟设备,所有这些都可以添加到虚拟机中。

OpenVZ
OpenVZ采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,是基于Linux平台的操作系统级服务器虚拟化架构。这个架构直接调用宿主机中的内核,模拟生成出子服务器。

VPS选择
目前国内外VPS常采用的是 OpenVZ 、 KVM 、Xen三种虚拟技术.

性能:Xen < KVM < OpenVZ
价格:OpenVZ < KVM < Xen
稳定:OpenVZ < KVM < Xen

2.6 虚拟化与云计算

虽然虚拟化和云计算同样是值得关注的技术,但它们并不可互换。

云计算中的虚拟化指的是IaaS层虚拟化解决方案,而不是虚拟机技术。IaaS层虚拟化解决方案,要符合IaaS层的基础特点,除了最基础的虚拟化软件之外,还包括,共享存储服务,镜像服务,身份认证服务,统一监控服务,以及收费管理等其他配套的服务。当然,既然是IaaS服务,必须支持对外API接口开放,支持定制开发。一般来说不是一个软件,而是一组软件组成的整体解决方案。

3. Docker

img

3.1 Docker是什么?

Docker 使用Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

img

3.2 Docker的三个概念

img

3.3 Docker中关于镜像的基本操作

# 查找 centos镜像
docker search centos
# 拉取镜像
docker pull docker.io/centos
# 查看当前系统中的images信息
docker images
# 启动一个容器
docker run -dit centos:latest /bin/bash
# 查看容器状态
docker ps -a
# 访问容器
docker attach [CONTAINER_NAME or CONTAINER_ID]
# 将容器转化为一个新镜像
docker commit -a "ghl" -m "new centos" a404c6c174a2  centos:v1 
# 推送镜像到服务器
docker push ghl/centos:v1

3.4 Docker 集群

容器最初是通过开发者工具而流行,可以使用它来做隔离的开发测试环境和持续集成环境,这些都是因为容器轻量级,易于配置和使用带来的优势,docker和docker-compose这样的工具极大的方便的了应用开发环境的搭建,开发者就像是化学家一样在其中小心翼翼的进行各种调试和开发。

随着容器的在开发者中的普及,已经大家对CI流程的熟悉,容器周边的各种工具蓬勃发展,俨然形成了一个小生态,在2016年达到顶峰,下面这张是容器生态图:
img

该生态涵盖了容器应用中从镜像仓库、服务编排、安全管理、持续集成与发布、存储和网络管理等各个方面,随着在单主机中运行容器的成熟,集群管理和容器编排成为容器技术亟待解决的问题。譬如化学家在实验室中研究出来的新产品,如何推向市场,进行大规模生产,成了新的议题。

容器平台架构

img

1.Orchestration

img

2.负载均衡与服务发现

3.日志管理
容器时代,对日志处理平台的要求是,集中化、海量存储、灵活过滤、快速查询、伸缩性架构、高可用、强大的UI。
常见的日志管理平台ELK包含的三个组件:

  1. LogStash:主要用于收集各种各样的日志。
  2. ElasticSearch:主要用于存储和搜索日志。
  3. Kibana:是一个用于界面展示的管理工具。

4.Docker监控
从主机,应用,镜像,容器的维度进行监控。并构建监控相关的告警,跟踪相关的监控,这样的一个流程体系。即WANT原则。
当前常用的监控工具有:Zabbix、Nagios、cAdvisor、Datedog、Scout。

三大容器编排工具

编排工具厂商发布时间说明
SwarmDocker2014年内置于Docker,和Compose一起使用
MesosApache2007年一般会结合marathon、Zookeeper一起使用
KubernetsGoogle2014年结合Etcd一起使用

4. Kubernetes

Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器.
主要功能如下:

  1. 将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。
  2. 使用编排系统(YAML File)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题
  3. 自动管理和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭,那么,会尝试重启或重新分配容器,始终保证会有十个容器在运行,反而杀死多余的。

Kubernetes用户可以通过编写一个yaml或者json格式的配置文件,也可以通过工具/代码生成或直接请求Kubernetes API创建应用,该配置文件中包含了用户想要应用程序保持的状态,不论整个Kubernetes集群中的个别主机发生什么问题,都不会影响应用程序的状态,你还可以通过改变该配置文件或请求Kubernetes API来改变应用程序的状态。

4.1 kubernetes基本概念及术语:

img

1. Node
Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。

2. Pod
Pod是kubernetes的最小操作单元,一个Pod可以由一个或多个容器组成;
同一个Pod只能运行在同一个主机上,共享相同的volumes、network、namespace;

3. Service
Service定义了一个Pod逻辑集合的抽象资源,Pod集合中的容器提供相同的功能。集合根据定义的Label和selector完成,当创建一个Service后,会分配一个Cluster IP,这个IP与定义的端口提供这个集合一个统一的访问接口,并且实现负载均衡。

4. Label
Label是用于区分Pod、Service、RC的key/value键值对;
Pod、Service、RC可以有多个label,但是每个label的key只能对应一个;
主要是将Service的请求通过lable转发给后端提供服务的Pod集合;

5. ReplicationController(RC)
RC用来管理Pod,一个RC可以由一个或多个Pod组成,在RC被创建后,系统会根据定义好的副本数来创建Pod数量。在运行过程中,如果Pod数量小于定义的,就会重启停止的或重新分配Pod,反之则杀死多余的。当然,也可以动态伸缩运行的Pods规模。
RC通过label关联对应的Pods,在滚动升级中,RC采用一个一个替换要更新的整个Pods中的Pod。

4.2 Kubernetes总体架构

Master和Node
img

Kubernetes将集群中的机器划分为一个Master节点和一群工作节点(Node)。其中,Master节点上运行着集群管理相关的一组进程etcd、API Server、Controller Manager、Scheduler,后三个组件构成了Kubernetes的总控中心,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且全都是自动完成。在每个Node上运行Kubelet、Proxy、Docker daemon三个组件,负责对本节点上的Pod的生命周期进行管理,以及实现服务代理的功能。

流程

img通过Kubectl提交一个创建RC的请求,该请求通过API Server被写入etcd中,此时Controller Manager通过API Server的监听资源变化的接口监听到这个RC事件,分析之后,发现当前集群中还没有它所对应的Pod实例,于是根据RC里的Pod模板定义生成一个Pod对象,通过API Server写入etcd,接下来,此事件被Scheduler发现,它立即执行一个复杂的调度流程,为这个新Pod选定一个落户的Node,然后通过API Server讲这一结果写入到etcd中,随后,目标Node上运行的Kubelet进程通过API Server监测到这个“新生的”Pod,并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束。

随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求,Controller Manager会通过Label标签查询到相关联的Pod实例,然后生成Service的Endpoints信息,并通过API Server写入到etcd中,接下来,所有Node上运行的Proxy进程通过API Server查询并监听Service对象与其对应的Endpoints信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能。

kubernetes组件组成:

1.kubectl
客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口。

2.kube-apiserver
作为整个系统的控制入口,以REST API服务提供接口。

3.kube-controller-manager
用来执行整个系统中的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。

4.kube-scheduler
负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。

5.etcd
负责节点间的服务发现和配置共享。

6.kube-proxy
运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。

7.kubelet
运行在每个计算节点上,作为agent,接受分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。

8.DNS
一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

REF:
云计算
虚拟化
虚拟化解决方案
英特尔®虚拟化技术
AMD虚拟化解决方案
容器 What, Why, How
Kubernetes Handbook
AKS
CNCF