前言

如标题中的问题所提到的虚拟化,容器,Docker和K8s那样,我们不妨这样问:这些技术到底适用于哪些场景,有没有别的技术可以替代?这些技术的优劣在哪里?

下面我将针对性地从以上几个问题的出发点,去和大家分享自己的答案。

一、虚拟化—历史的选择

我们现在提到虚拟化技术,一般会知道有5种:软件虚拟化,硬件虚拟化,完全虚拟化,半虚拟化和容器虚拟化。

在这里,主要探讨的是硬件虚拟化和容器虚拟化的出现,对云计算的发展带来了哪些影响甚至是推动。

对于云原生来说,尤其是应用上云,我们会直接想到使用物理机节点去部署我们的应用。这样做首先是没有问题的,物理机在早期确实也承担了这样的任务,如图1所示。

但这样也会有直接的问题:对于物理机资源的利用暂且不说,众多的应用环境隔离怎么解决?前端是node.js+Vue,后端是Golang,对于版本的维护成本是比较大的,买三台服务器来实现硬件级别隔离显然并不合理。

此外,还有物理机内应用的资源分配问题、动态负载等等问题。

图1

那么,得想个办法(或者工具)来解决环境隔离的问题。举个简单的例子,平时在PC上使用比较多的虚拟化是Vmwear(一个桌面软件),这类软件可以在windows上安装下linux虚拟机(可以学习linux系统),且安装完成的虚拟机就是一个文件夹,可以拷贝到任意其他PC电脑上使用,只要那台电脑上也装了Vmwear,等同于一个移动操作系统,如图2所示:

图2

但是这仅仅是我们个人在PC端使用的虚拟化软件,在企业级别服务器上相应的工具最具代表性的是KVM。

我们可以把原始装的那个linux系统称为Host OS(主机),在这之上我们安装各种应用,JVM,Docker,Python等。其运行原理如图3所示:

图3

到这里,我们已经大致知晓了虚拟化技术存在的原因和所适用的场景。接下来就是对于容器这一部分进行解答,同时将Docker和容器一起进行比较。

二、容器化—演进的结果

为何要容器化?

结论先行:虚拟机≠容器,容器≠Docker。

虚拟化技术解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。

基于上面的介绍,容器的特点可以更好地理解:

  • 容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。
  • 高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。
  • 快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。

区别与联系:

  • 虚拟机虽然可以隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如 VMWare。
  • 容器技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,类似「沙箱」。
  • 运行空间,虚拟机一般要几 GB 到 几十 GB 的空间,而容器只需要 MB 级甚至 KB 级。

将容器这一理念发挥到淋漓尽致的,就是著名的Docker容器技术。即是创建容器的工具,也是应用容器引擎。Docker的中文意思,就是码头工人。而它的LOGO,就是一只鲸鱼背着很多货柜箱,如图4所示:

图4

为什么一提到容器就会联想到Docker?

Docker是业内容器概念的最好践行者之一。

Docker容器使应用程序不仅彼此隔离,而且与底层系统隔离。这不仅可以实现更清晰的软件堆栈,还可以更轻松地指定给定的容器化应用程序如何使用系统资源- CPU,GPU,内存,I / O,网络等,它还可以更轻松地确保数据和代码保持独立。

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

我想,上述对于容器和Docker区别大家或多或少有所了解。下面,对于为什么要K8s的问题,分享我的看法。

K8s—业界的标准

众所周知,Docker是应用最为广泛的容器技术,通过打包镜像、启动容器来创建一个服务。但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题。

而K8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用、应用的部署、应用提供服务、扩容缩容应用、应用更新等,都非常的方便,而且可以做到故障自愈。例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。

K8s集群由Master节点和Node(Worker)节点组成,具体如表1所示:

Master节点 Node节点
etcd Control plane
kube-apiserver kube-proxy
kube-controller-manager kubelet
kebu-scheduler docker
kube-dns other apps
kube-proxy
Control plane

表1

各关键组件的简单介绍如下:

- etcd:一个高可用的Key/Value键值对存储和服务发现系统
- flannel:实现跨主机的容器网络的通信
- kube-apiserver:提供kubernetes集群的API调用
- kube-controller-manager:确保集群服务
- kube-scheduler:调度容器,分配到Node
- kubelet:在Node节点上按照配置文件中定义的容器规格启动容器
- kube-proxy:提供网络代理服务

多节点之间关系和所需的组件如图5所示:

图5

最后,可以来总结一下虚拟化,容器,Docker和K8s之间的关系了:虚拟化技术将应用从物理机搬进了虚拟机,虚拟机里的容器隔离了应用之间的环境,而Docker是容器技术的知名践行者,K8s则是目前业内公认的容器编排工具(标准)。

我的分享到此结束了,期待大家的交流与指

为什么要虚拟化,为什么要容器,为什么要Docker,为什么要K8S?的更多相关文章

  1. 『现学现忘』Docker相关概念 — 8、虚拟化技术和容器技术的关系

    目录 1.云计算中虚拟化技术和容器技术到的关系 2.虚拟机和容器对比 3.虚拟化技术和容器技术区别 1.云计算中虚拟化技术和容器技术到的关系 通过一个关于房间和住人的小问题,我们来初步的理解一下虚拟化 ...

  2. docker虚拟化之将容器做成镜像

    1,docker ps -a 选择要启动的容器. 2,docker start  容器+ID 启动容器 3,docker exec -i -t   容器ID /bin/bash   进入容器 这里的/ ...

  3. 容器部署解决方案Docker

      容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...

  4. 容器技术|Docker三剑客之docker-machine

    docker-machine是什么? ocker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实 ...

  5. 操作系统-容器-引擎容器-百科:Docker

    ylbtech-操作系统-容器-引擎容器-百科:Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  6. 容器技术与docker

    名词介绍 IaaS:基础设施即服务,要搭建上层数据应用,先得通过互联网获得基础性设施服务 PaaS:平台即服务,搭建平台,集成应用产品,整合起来提供服务 SaaS:软件即服务,通过网络提供程序应用类服 ...

  7. 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识

    使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...

  8. Docker容器化【Docker镜像与容器相关命令】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

  9. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  10. Windows Server 2019 容器化探索-Docker安装

    Docker on Windows Server 2019 微软自Windows Server 2016开始支持Docker,今天我们将介绍在Windows Server 2019上安装并使用Dock ...

随机推荐

  1. nrf9160做主控连接阿里云——(mqtt_simple例程)

    简介:基本每一个云都支持MQTT,这种轻量级协议在数据量不大的应用上是一个很好的选择.上一篇博客使用SLM例程去连接了阿里云,本次使用mqtt_simple去连接云进行测试,关于一些已近在前面文章中演 ...

  2. Java Timer使用介绍

    java.util包下提供了对定时任务的支持,涉及2个类: Timer:定时器类 TimerTask:任务抽象类 使用该定时任务我们需要继承TimerTask抽象类,覆盖run方法编写任务执行代码,并 ...

  3. OpenCV图像处理与视频分析详解

    1.OpenCV4环境搭建 VS2017新建一个控制台项目 配置包含目录 配置库目录 配置链接器 配置环境变量 重新启动VS2017 2.第一个图像显示程序 main.cpp #include< ...

  4. 带你从0到1开发AI图像分类应用

    摘要:通过一个垃圾分类应用的开发示例,介绍AI Gallery在AI应用开发流程中的作用. 本文分享自华为云社区<AI Gallery:从0到1开发AI图像分类应用>,作者: yd_269 ...

  5. Go语言核心36讲37

    你好,我是郝林,今天我们继续来分享并发安全字典sync.Map的内容. 我们在上一篇文章中谈到了,由于并发安全字典提供的方法涉及的键和值的类型都是interface{},所以我们在调用这些方法的时候, ...

  6. EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频

    一.序言 在实际项目开发过程中,总有数据实体类互相转换的需求,DO.BO.VO.DTO等数据模型转换经常发生.今天推荐几个好用的实体类转换工具,分别是EntityUtils MapStruct Bea ...

  7. MyBatis01:框架概述、环境搭建及入门案例、自定义框架

    课程介绍 第一天:mybatis的入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 自定义mybatis框架(目的:了解mybatis的执行细节) 第二天:mybatis基 ...

  8. 【Hadoop学习】下:MapReduce程序编写、Hadoop序列化、框架原理、Yarn组件、设置队列

    一.MapReduce概述 1.定义 编程框架,组成分布式运算程序,运行在集群上 2.特点 优点:易于编程.扩展性.容错性(内部完成).海量数据离线处理 缺点:非实时.不擅长流式计算.不擅长DAG有向 ...

  9. 【实时数仓】Day01-数据采集层:数仓分层、实时需求、架构分析、日志数据采集(采集到指定topic和落盘)、业务数据采集(MySQL-kafka)、Nginx反向代理、Maxwell、Canel

    一.数仓分层介绍 1.实时计算与实时数仓 实时计算实时性高,但无中间结果,导致复用性差 实时数仓基于数据仓库,对数据处理规划.分层,目的是提高数据的复用性 2.电商数仓的分层 ODS:原始日志数据和业 ...

  10. React DevUI 18.0 正式发布🎉

    Jay 是一位经验丰富并且对质量要求很高的开发者,对 Angular.React 等多种框架都很熟悉,我们在开源社区认识,在我做开源社区运营的过程中,Jay 给了我很多帮助,他也是 React Dev ...