zoukankan      html  css  js  c++  java
  • 系统综合实践6:docker容器和K8s的技术总结报告

    系统综合实践——第6次实践作业:docker容器和K8s的技术总结报告

    通过前5次的实践作业,我们已经对于容器技术有了一个直观的理解和体会,此次报告,按老师要求把自己设想成相关领域的一个技术大牛,面对技术小白们,介绍一下docker容器和K8s的相关技术。

    一、实践记录

    课题小组-19:【源且归于本能】

    成员1:032092133-潘杰
    成员2:032092135-兰昌龙
    

    1.实践问答

    (1)时间记录

    - 开始时间——2021/05/16 19:00
    - 结束时间——2021/05/21 22:00
    - 有效时长——10h
    

    (2)难易程度

    - B.比较困难
    

    2.实验环境

    • VisualBox_6.1虚拟机
    • Ubuntu 18.04.5 Desktop amd64 的虚拟机系统;

    【软件工具】

    • K8s
    • nano/Text Editor
    • Docker Engine-Community
    • docker-hub
    • aliyun镜像仓库
    • Firefox浏览器
    • NginX
    • mysql-5.7
    • PHP
    • apache-tomcat-8.5.65.tar.gz
    • jdk-8u211-linux-x64.tar.gz
    • python:3.9.4

    3.实验任务

    汇报内容:

    1)引言:包含相关技术的起源、背景,文章结构 
    2)容器:对于传统技术的影响,应用场景等 
    3)K8S:主要功能,核心组件,网络插件等 
    4)相关技术在使用过程中的一些重点和难点 
    5)总结与展望 
    6)参考文献
    

    (提示:为便于程序修改调试,在容器启动时需将本地文件目录挂载至容器内的工作目录; )

    (1)容器docker

    (2)K8s



    二、技术模块1——容器

    In a word:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

    1.技术背景

    (1)容器技术

    基本概念

    • 容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;同时,方便这个沙盒可以被转移到其它宿主机器上。
    • 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。

    发展历程

    • 容器技术在约二十年前就出现了,从1979年的Chroot Jail开始,但直到2013年Docker推出之后才遍地开花,其中有偶然因素,也有大环境造就的必然因素。

    组成

    • 本质上,它是一个特殊的进程:
    • 通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。

    (2)容器 -vs- 虚拟机

    虚拟机

    • 虚拟机通常包括整个操作系统和应用程序,里面运行的是一个真实的操作系统。

    比较

    • 本质上虚拟机是Hypervisor虚拟化出来的硬件上安装不同的操作系统,而容器是宿主机上运行的不同进程。
    • 从用户体验上来看,虚拟机是重量级的,占用物理资源多,启动时间长。容器则占用物理资源少,启动迅速。
    • 相对地,虚拟机隔离的更彻底,容器则要差一些。

    (3)docker

    起源

    Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

    基本架构

    • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
    • Docker 主要有以下几部分组成:
      • Docker Client 客户端
      • Docker daemon 守护进程
      • Docker Image 镜像
      • Docker Container 容器
      • Docker Registry 仓库

    2.对传统技术的影响

    作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势:

    (1)更快速的交付和部署

    Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。

    例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

    (2)高效的部署和扩容

    Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

    Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。

    (3)更高的资源利用率

    Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

    (4)更简单的管理

    使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。而且,随着容器技术的不断普及和发展,随之而来的容器管理、编排技术也会同样得到发展。

    3.应用场景

    (1)作为云主机使用

    相比虚拟机来说,容器使用的是一系列非常轻量级的虚拟化技术,使得其启动、部署、升级跟管理进程一样迅速,用起来灵活又感觉跟虚拟机一样没什么区别,所以有些人直接使用Docker的Ubuntu等镜像创建容器,当作轻量的虚拟机来使用。

    (2)作为服务使用

    如果你仅仅把Docker容器当作一个轻量的固定虚拟机用,那其实只能算是另类用法,Docker容器最重要价值在于提供一整套平台无关的标准化技术,简化服务的部署、升级、维护,只要把需要运维的各种服务打包成标准的集装箱,就可以在任何能运行Docker的环境下跑起来,达到开箱即用的效果,这个特点才是Docker容器风靡全球的根本原因。

    Web应用服务
    持续集成和持续部署

    (3) 微服务架构使用

    如果说上面两种应用场景还不足以体现出与传统的PaaS平台相比的巨大优势的话,那么对微服务的架构这种复杂又灵活的使用场景的无缝支持绝对具有革命意义。

    微服务架构将传统分布式服务继续拆分解耦,形成一些更小服务模块,服务模块之间独立部署升级,这些特性与容器的轻量、高效部署不谋而合。

    4.实现的重、难点

    (1)网络配置

    Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。

    Docker的4种网络模式

    我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:

    • host模式,使用--net=host指定。
    • container模式,使用--net=container:NAME_or_ID指定。
    • none模式,使用--net=none指定。
    • bridge模式,使用--net=bridge指定,默认设置。

    解决方案

    • Docker自身的网络功能比较简单,不能满足很多复杂的应用场景。因此,有很多开源项目用来改善Docker的网络功能,如pipework、weave、flannel等。
    • 我们应该注意到,诸如pipework并不是一套解决方案,它只是一个网络配置工具,我们可以利用它提供的强大功能,帮助我们构建自己的解决方案。
    • pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。

    (2)数据库的容器化部署

    近2年Docker的火热,使得开发者恨不得把所有的应用、软件都部署在Docker容器中,但是,Docker并不适合部署数据库,有如下7大原因:

    ①数据安全问题

    使用当前的存储驱动程序,Docker 仍然存在不可靠的风险。如果容器崩溃并数据库未正确关闭,则可能会损坏数据。

    ②性能问题

    MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。
    针对性解决方案:
    (1)数据库程序与数据分离
    (2)跑轻量级或分布式数据库
    (3)合理布局应用

    ③网络问题

    要理解 Docker 网络,您必须对网络虚拟化有深入的了解。

    ④状态

    在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。但是,将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。

    ⑤资源隔离

    资源隔离方面,Docker 确实不如虚拟机KVM,Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。需要的隔离级别越多,获得的资源开销就越多。

    ⑥云平台的不适用性

    大部分人通过共有云开始项目。云简化了虚拟机操作和替换的复杂性,因此不需要在夜间或周末没有人工作时间来测试新的硬件环境。当我们可以迅速启动一个实例的时候,为什么我们不需要担心这个实例运行的环境?这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。

    ⑦运行数据库的环境需求

    常看到 DBMS 容器和其他服务运行在同一主机上。然而这些服务对硬件要求是非常不同的。数据库(特别是关系型数据库)对 IO 的要求较高。一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。因为你需要为该实例配置大量额外的资源。

    docker适合跑轻量级或分布式数据库,当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务。

    解决方案

    容器化的优点使得开发者尝到了甜头,希望随着技术的发展能够更加完美的解决方案出现。

    三、技术模块2——K8s

    1.技术背景

    • Kubernetes(k8s)是跨主机集群的自动部署、扩展以及运行应用程序容器的开源平台,这些操作包括部署,调度和节点集群间扩展。
    • wikipedia给出的定义:K8s是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。它支持一系列容器工具, 包括Docker等。CNCF于2017年宣布首批Kubernetes认证服务提供商(KCSPs),包含IBM、华为、MIRANTIS、inwinSTACK迎栈科技等服务商。
    • 在《Kubernetes权威指南(第二版)》中给出的定义:她是一个全新的基于容器技术的分布式架构领先方案,她提供了强大的自动化机制,系统后期的运维难度和运维成本大幅度降低。她是Google的大闺女Borg的开源版本。使用K8s提供的解决方案,可以节省大概30%的开发成本,可以将精力更加集中于业务本身。

    2.应用场景

    云 和 k8s 的关系
    云:使用容器构建的一套服务集群网络,云是由很多的容器构成。
    k8s:用来管理云中的容器

    k8s 在企业中的应用场景
    首先我们了解一下 k8s 的三个基本特点:
    可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
    可扩展: 模块化,插件化,可挂载,可组合
    自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
    1.1 自动化运维平台
    对于中小型企业,为了降本增效,使用 k8s 来构建一套自动化运维平台,提供了应用部署,规划,更新,维护的一种机制。
    对于大型互联网公司更要使用容器化部署。现在服务器越来越多,不可能都人工部署,需要使用自动化的运维平台来监控服务,来实现自动服务化的部署、运维。
    1.2 充分利用服务器资源
    1.3 服务无缝迁移
            在开发环境开发,然后拿到测试环境去测试,但往往一上线就会有 bug,因为应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,所以生产环境的不一致就可能导致错误。

    使用容器化解决方案,每个应用可以被打包成一个容器镜像(红色圈起来表示把服务部署在容器中),使用容器可以在 开发 或 测试 的阶段,为应用创建容器镜像,这些镜像能够完全脱离环境,每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。使用 kubernetes 来管理这些容器,便能够实现服务的无缝迁移。

    3.实现的重、难点

    核心概念

    1. 集群
      在集群管理方面,K8s将集群中的机器划分为一个Master节点和一群工作节点Node。Master节点上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler。这些进程自动化实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能。

    2. Kubernetes Master
      Master指的是集群控制节点。每个K8s集群里需要有一个Ms节点负责整个集群的管理和控制。Kubernetes Master提供集群的独特视角,并且拥有一系列组件。

    3. Node
      节点是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件:
      (1) Kubelet:与Master节点协作,是主节点的代理,负责Pod对应容器的创建,启动,停止等任务。默认情况下Kubelet会向Master注册自己。Kubelet定期向主机点汇报加入集群的Node的各类信息。
      (2) Kube-proxy:Kubernetes Service使用其将链接路由到Pod,作为外部负载均衡器使用,在一定数量的Pod之间均衡流量。比如,对于负载均衡Web流量很有用。
      (3) Docker或Rocket:Kubernetes使用的容器技术来创建容器

    4. Pod
      Pod是K8s最重要也是最基础的概念!每个Pod都有一个特殊的被称为“根容器”的Pause容器,此容器与引入业务无关并且不易死亡。且以它的状态代表整个容器组的状态!Pause容器对应的镜像属于K8s平台的一部分,除了Pause容器,每个Pod还包含一个或多个用户业务容器

    5. Lable
      Lable类似Docker中的tag,一个是对“特殊”镜像、容器、卷组等各种资源做标记,一个是attach到各种诸如Node、Pod、Server、RC资源对象上。不同的是Lable是一对键值对!Lable类似Tag,可使用K8s专有的标签选择器(Label Selector)进行组合查询。

    6. Replication Controller
      Replication Controller,简称RC,她用来干啥呢?就是通过她来实现Pod副本数量的自动控制!RC确保任意时间都有指定数量的Pod“副本”在运行。

    7. Service
      微服务架构中的一个“微服务”,她是正真的新娘,而之前的Pod,RC等资源对象其实都是嫁衣。
      每个Pod都会被分配一个单独的IP地址,而且每个Pod都提供了一个独立的Endpoint(Pod lP + ContainerPort)以被客户端访问,现在多个Pod副本组成了一个集群来提供服务,客户端要想访问集群,一般的做法是部署一个负载均衡器(软件或硬件),为这组Pod开启一个对外的服务端口如8000端口,并且将这些Pod的Endpoint列表加入8000端口的转发列表中,客户端就可以通过负载均衡器的对外IP地址 + 服务端口来访问此服务,而客户端的请求最后会被转发到哪个Pod,则由负载均衡器的算法所决定。
      K8s的server定义了一个服务的访问入口地址,前端(Pod)通过入口地址访问其背后的一组由Pod副本组成的集群实例,service与其后端Pod副本集群之间通过Label Selector 实现“无缝对接”。


    四、总结与展望

    五、参考文献

  • 相关阅读:
    [BZOJ 1066] [SCOI2007] 蜥蜴 【最大流】
    [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】
    [BZOJ 1070] [SCOI2007] 修车 【费用流】
    [BZOJ 1878] [SDOI2009] HH的项链
    [BZOJ 3110] [Zjoi2013] K大数查询 【树套树】
    [HDOJ 1171] Big Event in HDU 【完全背包】
    Shell基本语法---函数
    Shell基本语法---shell数组
    Shell基本语法---while语句
    Shell基本语法---for语句
  • 原文地址:https://www.cnblogs.com/lance-haha/p/14797734.html
Copyright © 2011-2022 走看看