前言

如标题中的问题所提到的虚拟化,容器,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. JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域

    文章目录 1.对象的简介 2.对象的基本操作 2.1 代码 2.2 测试结果 3.属性和属性值 3.1 代码 3.2 测试结果 4.对象的方法 4.1 代码 4.2 测试结果 5.对象字面量 5.1 ...

  2. 齐博x1token字段,请务加在请求地址的头部header

    如下图所示,你必须在请求的头部加上 token参数,主要原因有两个.第一点,这个是登录标志,因为接口访问用不了cookie,所以只能通过这个header请求标志判断用户是否已经登录.第二点,系统有时候 ...

  3. python django搭建一个简易博客的解析(按照文件顺序逐一讲解)

    上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版. 源代码请在http://github/Cheng0829/mysite自行下载 mysite: db.sqlite3:数据库文件. ...

  4. 13.内建函数eval()

      eval函数 eval()函数十分强大 -- 将字符串当成有效的表达式来求值并返回计算结果 例如下图,eval会将字符串的引号去掉并且计算返回结果  

  5. 聪明的暴力枚举求abcde/fghij=n

    目录 前言 一.题目 二.暴力初解 三.优化再解(借鉴bitmap) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...

  6. echarts标题(title)配置

    var option = {         //标题         title : {             show:true,//显示策略,默认值true,可选为:true(显示) | fa ...

  7. 6、将两个字符串连接起来,不使用strcat函数

    /* 将两个字符串连接起来,不使用strcat函数 */ #include <stdio.h> #include <stdlib.h> void strCat(char *pS ...

  8. mysql 在连接表中的要点

    思路:分析需求,分析字段来自哪些表 (连接查询)            确定使用哪种连接查询?  确定交叉点(这两个表中哪些数据是相同的)            判断条件 such as  学生表中的 ...

  9. 第2-3-7章 个人网盘服务接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5.8 导入其他接口代码 5.8.1 接口导入-分页查询附件 5.8.2 接口导入-根据业务类型/业务id查询附件 5.9 导入网盘服务接口 5.9.1 导入FileController 5.9 ...

  10. 网络编程:软件开发架构、架构总结、网络编程前戏、OSI七层协议简介、OSI七层协议之物理连接层、数据链路层、网络相关专业名词、OSI七层协议之网络层

    目录 软件开发架构 架构总结 网络编程前戏 OSI七层协议简介 OSI七层协议之物理连接层 OSI七层协议之数据链路层 网络相关专业名词 OSI七层协议之网络层 OSI七层协议之传输层 软件开发架构 ...