【Docker-k8s学习和实战】(一)为什么要使用容器?物理机、虚拟机以及Docker的爱恨情仇

❤️ 专栏简介 :本专栏我们会从最基础的内容开始学习Docker的相关内容,循序渐进的掌握Docker知识并进行实战。

☀️ 专栏适用人群 :适用于具备基础 Linux 知识的 Docker 初学者,当然希望各位有经验的docker开发者不吝赐教。

🌙专栏特点:通俗易懂、图文并茂、非常详细;

🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。

🍄 专栏地址:https://blog.csdn.net/anchenliang_1002/category_11878561.html

在这里插入图片描述

本节中我们会讨论为什么要使用容器技术,即容器的前世今生;主要的内容包括纯物理机的优缺点虚拟机的优缺点虚拟化技术以及从虚拟化技术到容器的过程;最后总结为什么要使用容器

一、 纯物理机

比如我们现在有一台物理机,也就是一台普通的电脑,它长这样子,
在这里插入图片描述
首先我们看一下物理机的构成:

在这里插入图片描述

物理机首先是硬件,硬件上安装有具体的操作系统,比如windows、linux、macos等等,然后操作系统上安装有咱们常用的软件,比如qq、微信;或者linux上的nginx、mysql等等。物理机最大的优点就是稳定,但是缺点也是非常明显的:

纯物理服务器的缺点
1、部署非常慢;
2、成本非常高
3、资源浪费
4、难以迁移和扩展
5、会被限制硬件厂商

二、 虚拟机

基于物理机的这些缺点,虚拟化技术应运而生;一台物理机可以通过vmware虚拟化安装多个操作系统,每个操作系统都可以运行单独的app;因此一个物理机和安装部署多个app。虚拟机的部署结构如下图所示:

在这里插入图片描述

虚拟机的优点就正是填补了物理机的缺点,比如虚拟机部署比较迅速,成本低,充分利用了资源,方便迁移和扩展等;
但是虚拟机也有一定的局限性,比如每一个虚拟机都是一个完整的操作系统,要分配并占用物理机系统资源;当虚拟机多到一定程度时,比如我们物理机只有8G内存,200G的硬盘存储,当我们开了10个虚拟机,每个虚拟机给1G内存,20G固态,那么物理机本身的资源也就被消耗殆尽了。

三、 容器

上面两节我们学习了纯物理机和虚拟机技术,也了解了他们各自的优缺点;为了解决物理机和虚拟机的各种缺点,容器技术出现了。想要学习容器,“虚拟化技术”是必不可少的基础;那么什么是虚拟化技术呢?

3.1 虚拟化技术

首先附上百度百科对计算机虚拟化技术的定义:

虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

虚拟技术是一种将现有的计算机资源(CPU、内存、磁盘空间等)进行组合或分区,使得这些资源表现为一个或多个操作环境,从而提供优于原有资源配置的访问方式的技术。虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒。

借助虚拟化技术,作为用户的我们,能借助单个物理硬件系统,从而创建多个模拟环境或专用资源。虚拟机监控程序可直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,即虚拟机(VM)。

虚拟化技术的应用

虚拟化技术的一个例子就是云计算,云计算依赖的载体就是云服务器,比如我们之前购买过的腾讯云服务器、阿里云服务器、华为云服务器等。什么是云计算呢?云计算就是将服务器锁涉及到的计算的工作,放在云上去执行,这个“云”,就是指云服务器;比如说我们现在写好了一堆代码,我们需要用到数据库,但是数据库我又不想自己去计算,那我就可以去各大云计算厂商公司去购买别人的数据库服务,例如去阿里云购买RDS数据库服务,这样就不需要我自己搭建数据库;在阿里云上就可以做数据库高可用,实现对数据的增删改查等,这些计算工作都是用的云上的数据库。这就是一个云计算应用场景的例子。
那试想一下,我们为什么能用到腾讯云的云服务器呢?那肯定是腾讯云使用了虚拟化技术;可以参考一下1.2节中的虚拟机的图,首先腾讯买了一些物理机器,然后通过虚拟化手段虚拟出大量的虚拟的机器;所以我们购买的腾讯云服务器,其实就是他们虚拟出来的虚拟机。比如我们自己在笔记本上安装虚拟机的时候,是不是要分配一定的资源,比如2g内存,20G存储等;我们购买云服务器的时候也会让我们选择购买的配置(内存+存储等),配置越高价格就越高,所以其实云服务器跟我们自己的虚拟机是一样的道理;所以云计算、云服务器的基础,就是虚拟化技术

说起虚拟化技术,我们最熟知的就是VMware workstation(属于个人学习使用的虚拟工具);vmware无论是在Windows、linux还是macOS上,都能彰显它的强大。

3.2 从虚拟化到容器

vmware虽然厉害,但是在Linux系统下,最强大的虚拟技术还是KVM(for Kernel-based Virtual Machine),即基于内核的虚拟机。与VMware作为第三方软件安装在各种不同的操作系统上所不同的是,KVM已经集成在了Linux内核之中,因此只能在Linux下使用。

KVM实现虚拟化的结构图如下:
在这里插入图片描述

了解了以上这些知识,下面,我们可以开始讲到我们的Docker了。

前面讲到的,无论是VMware,还是KVM,他们的最终结果都是虚拟出了一台完整的计算机系统,其拥有底层的物理硬件、操作系统和应用程序执行的完整环境,都对硬件资源造成了一定的消耗,而且感觉这套系统非常沉重。

有没有这么一种可能,就是我们其实并不是需要完整的操作系统,而只是需要运行使用某一个软件呢?比如说,我可能不是为了得到一个完整的系统,而仅仅想使用多个应用程序,并且希望它们之间互相独立,互不影响。

举个例子,比如我现在有两个进程,进程1需要5.7版本的mysql数据库,而进程2需要5.8版本的数据库,而且我仅仅是需要数据库这个软件,其他的我不需要;很显然,一个centos系统上是不能既安装5.7的mysql又安装5.8的mysql,如果强行安装,只能是5.8版本的mysql覆盖掉5.7版本的mysql;如果使用虚拟机,如下图所示:那么我就要安装两个完整的CentOS系统,一个装5.7的mysql,另一个装5.8的mysql;这就是我前面提到的,为了使用一个软件,而安装了一整个系统,并且在每个系统里,我只用mysql,别的软件都用不到,这样是不是既繁琐又浪费呢?为了一个软件而虚拟出两个完整的系统,实在是太繁重了!!!
在这里插入图片描述

但是,我们用docker就能完美的解决这个问题,利用Docker容器,我们可以同时虚拟出两个环境(注意,是环境,不是系统),这样就能充分的利用宿主机的资源,利用Docker来实现上面的例子,如下图所示,我们宿主机上只需要安装一个CentOS系统即可,然后虚拟出两个Docker容器分别存放Mysql 5.7和Mysql 5.8即可,每一个容器相互独立,互不影响;这样是不是就轻便了很多,不只我们高兴,我们的宿主机也高兴,再也不用费力的去支撑三个系统了(一个宿主机+两个虚拟机环境),岂不是美滋滋。

在这里插入图片描述

3.3 为什么要使用容器

首先我们还是要总结一下虚拟机技术和容器技术的差异,用 两张图来概括吧:
传统虚拟机技术:
在这里插入图片描述
容器技术:
在这里插入图片描述

通过图中我们可以看出来,容器内的程序,就好比直接运行在宿主机上,能够使用宿主机最大的硬件资源,但是各个容器之间又是相互隔离的,互不影响

所以为什么要使用容器呢,当然是因为容器相比于虚拟机有诸多的优点。通过前面的例子我们已经大致了解了容器的前世今生,所以下面我们总结一下Docker的优点:

1、更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

2、更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

3、一致的运行环境
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

4、持续交付和部署
对开发和运维(DevOps (opens new window))人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) (opens new window)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) (opens new window)系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

5、更轻松的迁移
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

6、更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像 (opens new window),既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

至于容器具体的实现过程,那就是接下来我们要学习的docker知识了。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 搭建一个Kubernetes集群需要以下步骤: 1. 准备节点:至少需要两台器作为Master和Node。 2. 安装依赖:在所有节点上安装必要的依赖,如Docker,etcd,kubeadm等。 3. 初始化Master:使用kubeadm在Master节点上执行初始化。 4. 加入Node:在Node节点上执行kubeadm join命令,加入集群。 5. 安装网络组件:安装Kubernetes的网络组件,如Calico,Flannel等。 6. 部署应用:使用kubectl在集群上部署应用。 这些步骤中的每一步都需要仔细按照说明来执行,以确保集群的正确搭建。因为Kubernetes集群的搭建是一个复杂的过程,所以建议从官方文档或其他权威教程入手。 ### 回答2: 要搭建一个Kubernetes(简称K8s)集群,通常需要按照以下步骤进行: 1. 配置一组服务器:首先需要选择一组服务器来构建集群。这些服务器可以是物理虚拟或云服务器。确保服务器之间可以相互通信,并具备足够的计算和存储资源来支持集群中的各种工作负载。 2. 安装Docker和Kubernetes组件:在每个服务器上安装Docker引擎,用于容器化应用程序。然后,根据Kubernetes的官方文档,安装其他Kubernetes组件,如kubelet、kube-proxy、kube-controller-manager和kube-scheduler。 3. 初始化集群:选择一个服务器作为主节点(Master),使用kubeadm工具初始化集群。这将安装和配置所需的所有Kubernetes组件,并为集群生成一个唯一的证书和密钥。 4. 部署网络插件:选择和安装适当的网络插件,以便集群中的Pod可以相互通信。常见的网络插件包括Calico、Flannel和Weave等。配置网络插件以与Kubernetes集群一起工作。 5. 添加工作节点(Node):使用kubeadm命令将其他服务器添加为工作节点,这样它们就可以参与集群中的工作负载。根据需要,可以将多个工作节点添加到集群中。 6. 运行应用程序:通过创建Deployment等资源对象,将应用程序部署到Kubernetes集群中。这些资源定义了容器的副本数量、访问策略和其他相关配置。 7. 管理和监控集群:使用命令行工具(如kubectl)或Kubernetes的Web界面(如Kubernetes Dashboard)来管理和监控集群。可以查看节点状态、应用程序日志、扩展集群等。 总结起来,搭建一个Kubernetes集群需要配置服务器、安装Docker和Kubernetes组件、初始化集群、部署网络插件、添加工作节点和运行应用程序。随着Kubernetes的不断演进和发展,有关搭建集群的最佳实践也可能会有所变化。因此,在开始搭建之前,建议仔细阅读官方文档和相关文档,并参考社区中的经验和建议。 ### 回答3: 搭建一个k8s集群需要以下步骤: 1. 准备环境:首先,需要一台或多台运行Linux操作系统的主作为k8s节点。确保这些主具有稳定的网络连接,并且它们的操作系统版本符合k8s的要求。 2. 安装Docker:k8s使用Docker来创建和管理容器。因此,在开始搭建k8s集群之前,需要在每个节点上安装Docker。可以从Docker官网下载适应你的操作系统版本的Docker安装程序,并按照官方文档进行安装。 3. 设置主名:为了方便管理和识别节点,可以设置每个节点的主名。可以使用命令行或修改主的/etc/hostname文件来设置主名。 4. 安装kubeadm、kubelet和kubectl:kubeadm是k8s的命令行工具,用于初始化和管理集群。kubelet是k8s的组件之一,负责管理主上的容器。kubectl是k8s的命令行工具,用于与集群进行交互。在每个节点上安装kubeadm、kubelet和kubectl,可以使用官方提供的安装脚本或按照官方文档的步骤进行安装。 5. 初始化主节点:在搭建k8s集群的过程中,需要选择一个节点作为主节点,其他节点将作为工作节点加入到主节点中。在主节点上使用kubeadm init命令初始化集群,该命令会生成一个加入命令,用于将工作节点加入到集群中。 6. 加入工作节点:使用上一步骤生成的加入命令,在工作节点上执行命令,将其加入到集群中。 7. 配置网络插件:k8s需要一个网络插件来为容器提供网络功能。根据实际需求选择合适的网络插件,例如Calico、Flannel等,并按照插件提供的文档进行配置和安装。 8. 验证集群:最后,使用kubectl命令验证集群的状态和可用性。可以运行一些简单的测试应用程序来确保集群正常工作。 以上是搭建一个k8s集群的基本步骤,可以根据实际需求进行适当的调整和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值