




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Docker & kubernetes,210max,主要内容,Docker介绍及原理 Docker 操作 Docker三剑客扩展-swarm kubernetes介绍及原理,第一部分,Docker介绍及原理,Docker,Docker基于容器技术的轻量级虚拟化解决方案 Docker是容器引擎,把Linux的cgroup、namespace等容器底层技术进行封装抽象(后面会介绍此两种技术),为用户提供了创建和管理容器的便捷界面(包括命令行和API) Docker 是一个开源项目,诞生于 2013 年初,基于Google 公司推出的 Go 语言实现 微软,红帽Linux,IBM,Oracle等主
2、流IT厂商已经在自己的产品里增加对Docker的支持。 Google 每周启动超过20亿个容器进行业务服务,于上个世纪90年代已经开始大规模使用容器技术,210max,vm现有问题,1、资源利用效率低 2、单物理机多应用无法有效隔离(进程空间,cpu资源,磁盘) 3、运维部署不便 4、测试、版本管理复杂 5、迁移成本高 6、传统虚拟机,空间占用大,启动慢,管理复杂,210max,Docker-轻量级虚拟化容器技术,1、秒级启动,秒级停止,空间资源占用极少(几M) 2、实现进程级别的隔离 3、可在普通服务器上建立上百个docker实例 4、加快开发测试部署的速度 5、简化版本管理,210max,
3、Docker的生态圈,Official Repos & 14K+ Dockerized Apps,Community 460+ Contributors 250+ Meetups on Docker 2.75M Downloads 6.7K Projects on GitHub,Support Enterprise Support Robust Documentation Implementation, Integration, Training Network of Partners,The Docker Platform Docker Engine Docker Hub Build, Sh
4、ip, and Run,Partners,Content,Users,210max,认识Docker,Namespaces (IBM) Cgroups (Google) LXC tools The Linux Kernel Git SELinux (Red Hat) Solaris Zones BSD Jails +,Docker如何和Linux内核打交道?,210max,Docker VS VM,210max,Docker容器本质上是宿主机上的进程。 docker通过namespace实现了 资源隔离,通过cgroups实现了资源限制,通过写时拷机制(copy-on-write)实现了效的件
5、操作。 1、 namespace 资源隔离 想要实现个资源隔离的容器,在分布式的环境下进通信和定位,容器必然要有独的IP、端、路由等,然就联想到了络的隔离。同时,容器还需要个独的主机名以便在络中标识。有了络,然离不开通信,也就想到了进程间通信需要隔离。开发者可能也已经想到了权限的问题,对户和户组的隔离就实现了户权限的隔离。最后,运在容器中的应需要有进程号(PID),然也需要与宿主机中的PID进隔离。,Docker的原理,210max,Docker的原理,LinuxKernel,PID也是可以被虚拟的。命名空间建立系统的不同视图,对于每一个命名空间,从用户看起来,应该像一台单独的Linux计算机
6、一样,有自己的init进程(PID为1),其他进程的PID依次递增,A和B空间都有PID为1的init进程,子容器的进程映射到父容器的进程上,父容器可以知道每一个子容器的运行状态,而子容器与子容器之间是隔离,210max,Docker的原理-docker总览如图,创建一个docker容器,通过image managent的distribution和registry模块拉取镜像,通过镜像管理里面的image、 reference和layer存储镜像的元数据;镜像存储驱动graphdriver将镜像存储在文件系统、编辑或维护docker工作目录镜像层,最终对镜像的元数据的增删改查,屏蔽不同层调用的
7、影响 ;docker容器创建网络,通过network模块调用libnetwork创建配置网络, libnetwork可以抽象出容器网络核心模型:沙盒、端点、网络,五种内置驱动 bridge、host、none、remote和overlay;创建volume数据卷需调用volumedriver,实现数据卷并挂载,进行卷的增、删、改、查;当限制容器资源或执行命令,execdriver通过libcontainer是对cgroup和namespace的二次封装并进行容器管理,具体就是上图6个namespace隔离和cgroup的资源限制; docker daemon是服务端用来响应docker cli
8、ent的请求。,210max,Docker三大核心,210max,Docker的原理,cgroups资源限制 强的内核具-cgroups。它可以限制被namespace隔离起来的资源,还可以资源设置权重、计算使量、操控任务(进程或线程)启停等。,210max,Docker的原理,什么是Docker 镜像: 镜像是个只读的 Docker 容器模板,含有启动的所需文件系统结构和内容,镜像是docker容器的基础,这些文件内容组成静态的文件系统,即运行环境rootfs。 rootfs是docker启动内部进程可见的文件系统,含有目录,配置文件及其工具。 lin,linux启动先挂载一个只读 的roo
9、tfs,系统检验完整性后 切换为读写模式, docker也是先挂载rootfs,再利用联合挂载技术,在只读层rootfs上挂载一个读写层,这样读写层就在容器的最顶层,下面联合挂载可能有多个只读层,210max,Docker的原理,210max,docker架构图,容器 Container,镜像 images,仓库 Repositories,210max,第二部分,Docker基本操作,从官网拉取image 使用dockerfile创建一个image 运行容器、exec进入容器 link连接容器,挂在卷 docker四种网络模型,Docker Machine Docker Compose Doc
10、ker Swarm,docker管理三剑客介绍,210max,docker-machine,docker-machine是解决docker运行环境问题。docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,如果在非Linux平台上使用docker技术需要依赖安装Linux系统的虚拟机。docker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术。你可以把它理解为virtualbox或者vmware,最开始在win7上用得比较多,但是win10开始自带了hyper-v虚拟机,已经不再需要docker-machine了
11、,docker可以直接运行在安装了Linux系统得hyper-v上。,210max,docker-machine,Docker Machine 的目的是简化 Docker 的安装和远程管理,它有自己的命令行工具:docker-machine。,210max,docker-compose,Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。,210max,docker-compose,为什么要
12、用 docker-compose,他解决了什么? 用通俗的语言来说,我们平时操作 docker 一系列动作,你手动使用 docker 的动作可以拆分成:找系统镜像 / docker search 、在 vm 中安装镜像 /、 docker run -d -it 运行你的镜像、需要执行每条命令,如果做更多的 docker 操作, 这显然是非常没有效率的。 但是在 docker-compose.file 里面就很好了。 你只需要写好后模板文件,只运行一句 docker-compose up -d 一组容器就会启动。 一切都是那么的简单 -没有例子,210max,Docker三剑客之一Swarm,S
13、warm是Docker原生的集群管理软件,与Kubernetes比起来比较简单。 Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。,210max,Docker一Swarm,Docker的Swarm(集群)模式,集成很多工具和特性,比如:跨主机上快速部署服务,服务的快速扩展,集群的管理整合到docker引擎,这意味着可不可以不使用第三方管理工具。分散设计,声明式的服务模型,可扩展,状态协调处理,多主机网络,分布式的服务发现,负载均衡,滚动更新,安全(通信的加密)等
14、等 Swarm 特点 1) 对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。 2) Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资源也非常少。简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己一些特点进行定制实现。 3) Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docke
15、r的新功能,都会第一时间在Swarm中体现。,210max,Docker一Swarm,Swarm架构,Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以单独将Swarm部署于一个节点。另外,自然需要一个Docker集群,集群上每一个节点均安装有Docker。,210max,Docker一Swarm,Swarm调度策略 Swarm在scheduler节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random. 1)Random 顾名思义,就是随机选择一个Node来运行容器,一般用作调试
16、用,spread和binpack策略会根据各个节点可用的CPU, RAM以及正在运行的容器数量来计算应该运行容器的节点。 2)Spread 在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。 3)Binpack Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面,210max,Docker一Swarm,
17、Swarm Cluster模式的特性 1)批量创建服务 建立容器之前先创建一个overlay的网络(overlay在物理网络之上构建虚拟网络,上层应用只与虚拟网络有关。),用来保证在不同主机上的容器网络互通的网络模式 2)强大的集群的容错性 当容器副本中的其中某一个或某几个节点宕机后,cluster会根据自己的服务注册发现机制,以及之前设定的值-replicas n,在集群中剩余的空闲节点上,重新拉起容器副本。整个副本迁移的过程无需人工干预,迁移后原本的集群的load balance依旧好使!不难看出,docker service其实不仅仅是批量启动服务这么简单,而是在集群中定义了一种状态。C
18、luster会持续检测服务的健康状态并维护集群的高可用性。 3)服务节点的可扩展性 Swarm Cluster不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过scale参数即可复制出新的副本出来。仔细观察的话,可以发现所有扩展出来的容器副本都run在原先的节点下面,如果有需求想在每台节点上都run一个相同的副本,方法其实很简单,只需要在命令中将-replicas n更换成-mode=global即可!其中: 复制服务(-replicas n)将一系列复制任务分发至各节点当中,具体取决于您所需要的设置状态,例如“-replicas 3”。全局服务
19、(-mode=global)适用于集群内全部可用节点上的服务任务,例如“-mode global”。如果在 Swarm 集群中设有 7 台 Docker 节点,则全部节点之上都将存在对应容器。 4) 调度机制 所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。,210max,Docker一Swarm,Swarm cluster的创建过程包含以下三个步骤 1)发
20、现Docker集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化 2)初始化内部调度(scheduler)模块 3)创建并启动API监听服务模块 一旦创建好这个cluster,就可以用命令docker service批量对集群内的容器进行操作,非常方便! 在启动容器后,docker 会根据当前每个swarm节点的负载判断,在负载最优的节点运行这个task任务,用docker service ls 和docker service ps + taskID 可以看到任务运行在哪个节点上。容器启动后,有时需要等待一段时间才能完成容器创建。,Docker一Swarm,总之,Swarm上手很简
21、单,Docker swarm可以非常方便的创建类似kubernetes那样带有副本的服务,确保一定数量的容器运行,保证服务的高可用。 然而,光从官方文档来说,功能似乎又有些简单; swarm、kubernetes总体比较而言: 1)Swarm的优点和缺点都是使用标准的Docker接口,使用简单,容易集成到现有系统,但是很难支持更复杂的调度,比如以定制接口方式定义的调度。 2)Kubernetes 是自成体系的管理工具,有自己的服务发现和复制,需要对现有应用的重新设计,但是能支持失败冗余和扩展系统。,从Docker到Kubernetes,210max,Kubernetes是Google开源的容器
22、集群管理系统,是基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。 Kubernetes提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下: 1) kubernetes是docker容器的编排工具。 2) 将多台Docker主机抽象为一个资源,以集群的方式运行、管理跨主机的容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。 3)使用编排系统(YAML File)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题 4) 解决Docker跨主机容器之间的通讯问题。 5)自动管理
23、和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭,会尝试重启或重新分配容器,始终保证会有十个容器在运行,反而杀死多余的。 Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。,Kubernetes介绍,210max,Master master是集群控制节点,每个kubernetes集群里需要有一个master 节点来负责整个集群的管理和控制,基本上kubernetes的所有控制命令都发给它,它来负责具体的执行过程,master节点通常会占据一个 独立的服务器(可用建议部署3台),是整个集群的大脑,如果宕机或不可用,那么对集群内容器应用的管理都将失效
24、。 Master节点上的进程 master节点上还需要启动一个etcd服务,kubernetes里的所有资源对象的数据全部是保存在etcd中的,这可以很好地存储配置数据,实现状态一致性。因为有watch(观察者)的支持,各部件协调中的改变可以很快被察觉。 kubernetes api server(kube-apiserver):提供了 http rest 接口的关键服务进程,是kubernetes里所有资源的 增、删、改、查等操作的唯一入口,也是集群控制的入口进程,在etcd中验证更新这些对象(并最终存储)。 kubernetes controller manager(kube-contro
25、llermanager):kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的总管 kubernetes scheduler(kube-scheduler):负责资源调度(pod调度)的进程,相当于公交公司的调度室。,kubernetes结构和组件,Node:除了master,kubernetes集群中的其他机器被称为node节点,较早的版本中称为minion。与master一样,node节点可以是一台物理 机,也可以是一台虚拟机。node节点才是kubernetes集群中的工作负载节点,每个node都会被master分配一些工作负载(docker container),当
26、某个node宕机时,其上的工作负载会被master自动转移到其他节点上去。 Node节点上的进程 kubelet:负责pod对象的容器的创建、启停等任务,同时与 master节点密切协作,实现集群管理的基本功能。 kube-proxy:实现kubernetes service的通信与负载均衡机制的重要组件 docker engine(docker):docker引擎,负责本机的容器创建和管理工作 node节点可以在运行期间动态添加到kubernetes集群中,提前时这个节点上已经正确安装、配置和启动了上述关键组件,在默认情况下 kubelet会向master注册自己,这也是kubernetes
27、推荐的node管理方式。一旦node被纳入集群管理,kubelet进程就会定时向 master节点汇报自身的情况,例如操作系统、docker版本、机器的 cpu和内存情况,以及当前有哪些pod在运行等,这样master可以获 知每个node的资源使用情况,并实现高效均衡的资源调度策略。而某个 node超过指定时间上报信息时,会被master判定为“失联”,node 的状态被标记为不可用(not ready),随后master会触发“工作负载迁移”的自动流程。,kubernetes-node节点组件组成,210max,Namespace(命名空间)是 Kubernetes 系统中的另一个非常重要
28、的概念,Namespace 在很多情况下用于实现多租户的资源隔离。 Namespace 通过将集群内部的资源对象 分配 到同的 Namespace 中,形成逻辑上分组的同项目、小组或用户组,便于同的分组在共享使用整个集群的资源的同时还能被分别管理。 Kubernetes 集群在启动后,会创建一个名为 “default” 的 Namespace,通过 kubectl 可以查看到。,kubernetes组件组成,210max,Kubernetes架构图,210max,Kubernetes高级结构,210max,Kubernetes设计理念和功能其实就是个类似Linux的分层架构,如下图所示,Kub
29、ernetes设计理念与分布式系统,核层: Kubernetes最核的功能,对外提供API构建层的应,对内提供插件式应执环境 应层:部署(状态应、有状态应、批处理任务、集群应等)和路由(服务发现、 DNS解析等) 管理层:系统度量 (如基础设施、容器和络的度量),动化(如动扩展、动态Provision等以及策略 (RBAC、 Quota、PSP、 NetworkPolicy等) 接层: kubectl命令具、客户端SDK以及集群联邦 态系统:在接层之上的庞容器集群管理调度的态系统,可以划分为两个范畴: Kubernetes外部:志、监控、配置管理、 CI、 CD、Workflow、 FaaS(功能即服务)、 OTS应、 ChatOps等 Kubernetes内部:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年木材加工、处理机械项目发展计划
- 2025年建筑工程合同的标的
- 观看警示教育片
- 学校预防近视
- 学校德育工作的政策支持与保障
- 2025建筑工程合同模板2
- 企业培训中的风险管理问题研究
- 学管师转正述职报告
- 中医康复理疗师考试常见问题解答试题及答案
- 预防静脉血栓的立项依据
- 盘筑成型专题知识培训
- (完整版)CST使用教程
- Q∕SY 02098-2018 施工作业用野营房
- 六年级下册心理健康教案-第三十一课 为升学做准备 释放压力 轻松迎考|北师大版
- 浙教版劳动五年级下册 项目三 任务三 环保小车我来造 教案
- 山东大学毕业论文答辩通用ppt模板
- 35kV高压电缆敷设专项施工方案(完整版)
- 天井施工方法及安全管理建议
- 隔膜压缩机(课堂PPT)
- 失效模式分析报告范例
- 风电齿轮箱结构原理及维护知识
评论
0/150
提交评论