DEVOPS: 容器与虚拟化与云原生

概述

  • 传统虚拟机,利用 hypervisor,模拟出独立的硬件和系统,在此之上创建应用
  • 虚拟机是一个主机模拟出多个主机
  • 虚拟机需要先拥有独立的系统
  • docker 是把应用及配套环境独立打包成一个单位
  • docker 是在主机系统中建立多个应用及配套环境
  • docker 是进程级的隔离
  • 如下图所示:

Devops

  • DevOps 是一个必然趋势,是一种方法,也是一种观念
  • 原始的互联网公司工作模式是瀑布流,但用户越多,需求越大,公司的管理,人力成本都是问题
  • 而如果更新间隔太慢,一定会导致用户的满意程度下滑,DevOps 的观念应运而生
  • DevOps 实际上是两个单词:Development 和 Operations
  • 开发人员:根据需求情况,把需求拆分成多个小需求,小步快跑大幅增加需求完成的频率
  • 运维人员:运用自动化和 CI/CD 的概念,运用工具,实现稳定、快速的版本更新上线
  • 打破开发人员和运维人员的壁垒
  • 对运维人员的技术要求和经验大大提升。
    • 开发人员根据需求情况,把需求拆分成多个小需求,小步快跑大幅增加完成需求频率
    • 运维人员是运用自动化 CI/CD 的概念,运用工具,实现稳定,快速的版本更新上线
    • 运维和开发往底层说,实际就是岗位要的东西不一样
    • 运维要的是保持业务的稳定持续运行,开发是为了快速开发,开发完就快速上线
    • 一个要稳定,一个要赶紧上线,开发上线的越多,更新的就越多,运维就更不稳定
  • 可能产生的问题
    • 问题 1:资源利用率
      • 服务器的治理,环境的迁移容灾上会产生问题,一个虚拟机要管多个配置的话
      • 治理起来一定是难度更大的,端口容易冲突,一个虚拟机跑多个项目
      • 治理、迁移、容灾?
    • 问题 2:扩容不及时
      • 脚本化启动 50 台虚拟机要多久?
      • 脚本化启动 50 台容器要多久?
      • 环境部署要多久?
      • 风险大不大?

容器


1 ) 容器是什么

  • 一艘船的载重比如是 10000 吨,卡车本身体积很大
  • 所有卡车上船加上货物也就 2000 吨,大部分载重都浪费了
  • 但船不能少,油费人工等成本也不能少
  • 这怎么办?是不是可以造小一点的船,载重也不用那么大,多造几艘,这样是不是解决了?
  • 后来仔细一想,卡车完全没必要上船,只要货物上去就可以了!到了码头再卸下来
  • 有人专门做过实验:如果运啤酒,用原始的卡车方法全程陆运,每吨成本是 27 美金
  • 且非常慢, 如果用卡车运送到码头——卸载到船上——船到另一个码头——再装再到终端卸载
  • 成本是 25美分!节省了 99%左右的运输成本。且因为船的负载和卡车负载根本没法比
  • 效率还大大提高了,之后 Container(集装箱,容器)改变了整个世界物流行业的面貌
  • 极大地推动了物流生产力的发展。到现在,集装箱都是外贸、零售、电商等交易的必不可少的环节
  • 我个人不太喜欢把 container 翻译成容器,我更想把他叫做“集装箱”
  • 现在是谁把“容器”命名成为 container 我暂时没办法考证,但我真心佩服这位命名者
  • 它起这个名字,首先是非常形象,甚至解决的问题和解决的方案都能看到集装箱的影子
  • 更重要的是,我能感受到他想要改变 IT 生态的一个理想和决心,而且他做到了!如他的命名
  • 容器是什么?简单说,他就是一个集装箱,这个集装箱可以在各个系统之间来回搬运
  • 集装箱里面,放着的是一个或多个应用,以及运行环境
  • 作用简而言之,就是把环境和应用封装成一个标准的单元,用于开发、部署、交付等环节
  • 他解决了几个重要的问题:
    • 一个应用,因为环境不同,可能会出现各种各样本可以避免的问题
    • 一个系统中,多个应用之间可能引发的各种冲突故障
    • 相比传统虚拟化,不吃资源、节省成本

2 )注意

  • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样
  • 镜像是静态的定义,容器是镜像运行时的实体
  • 容器可以被创建、启动、停止、删除、暂停等
  • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名 空间
  • 前面讲过镜像使用的是分层存储,容器也是如此
  • 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡
  • 因此,任何保存于容器存储层的信息都会随容器删除而丢失

容器和虚拟化比较


1 )特性

  • 再次提高服务器资源利用率
  • 重量更轻,体积更小
  • 匹配微服务的需求
  • 保持多环境运行的一致性
  • 快速部署迁移,容错高
  • 安全性较差
  • 多容器管理存在难度。
  • 稳定性较差
  • 排错难度较大

2 )与虚拟机的比较

容器虚拟机
启动速度秒级分钟级
性能接近原生较弱
内存代价很少较多
硬盘使用一般为 MB 虚拟机一般为 GB
运行密度单机支持千个容器一般几十个
隔离性安全隔离完全隔离
迁移性优秀一般

3 ) 优缺点

  • 容器的优点
    • 再次提高服务器资源利用率
    • 重量更轻,体积更小
    • 匹配微服务的需求
    • 保持多环境运行的一致性
    • 快速部署迁移,容错高
  • 虚拟机的缺点
    • 安全性较差
    • 多容器管理存在难度
    • 稳定性较差
    • 排错难度较大

4 ) 容器与镜像

  • 镜像可以看做是一个压缩包,里面包含所需要的应用和应用要的配置文件及底层的库、参数、环境变量等
  • 容器是运行这个压缩包,实现具体功能的存在

docker 与容器


1 )docker

  • docker13 年初开源,公司本来叫 dotcloud,后改名叫 docker
  • 被 Mitantis 收购。基于Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术
  • 对进程进行封装隔离,属于操作系统层面的虚拟化技术
  • 由于隔离的进程独立于宿主和其他的隔离的进程,因此也称其为容器
  • docker 镜像是简化的 linux
    • 镜像里面只包含两种东西,它的依赖环境和它实际要做的一个应用
    • 镜像是把它两个融合在一起的
    • 就是应用和它底层的一些依赖环境变量,或者一些参数也好等等
    • 它把它们融合到一起了

2 ) 区别

  • docker 就是容器,容器就是 docker,并不是这样的,容器就是一个技术类型
  • 而 docker 是当下最主流的,容器的一种实现容器的方案
  • docker 只是容器其中一种实现方案,其他方案包括:LXC,Mesos,RKT 等等
  • 最大区别当容器和服务器的数量达到一定规模的时候,就会碰到管理的问题
  • 即如何有效管理大量的服务器和容器,保证应用的稳定运行、方便升级和故障的快速解决
  • 容器编排工具提供图形化界面或者命令行来管理容器和服务器集群
  • 提供容器配置、任务发布、服务发现、负载均衡、系统监控和故障恢复、声明式系统配置
  • 以及有关容器部署和性能的规则和约束定义机制等

3 )进程级封装

  • docker 或者容器和传统虚拟化最大的一点区别
  • 就是虚拟化的封装是系统级的封装,docker或者其他容器是进程级的封装
  • 和传统虚拟化最大的一点区别,就是虚拟化是系统级的封装,进程级封装
  • 用户量越来越大,功能越来越多。代码越来越重。耦合越来越高
  • 一旦某个哪怕小的逻辑出错,甚至会影响整个站点
  • bug 频率大增,bug 频率增加耦合越来越高,简直对于互联网公司来说就是灾难
  • 代码重复率高,维护难度大
  • 代码越来越吃性能,服务器成本大增

4 )docker 底层技术

4.1 Namespaces

作用:访问隔离

  • Docker 主要就是借助 Linux 内核技术 Namespace 来做到隔离的,Linux Namespaces 机制提供一种资源隔离方案
  • PID,IPC,Network 等系统资源不再是全局性的,而是属于某个特定的 Namespace
  • 每个 namespace 下的资源对于其他 namespace 下的资源都是透明,不可见的
  • 因此在操作系统层面上看,就会出现多个相同 pid 的进程
  • 系统中可以同时存在两个进程号为 0, 1,2 的进程,由于属于不同的 namespace,所以它们之间并不冲突
  • 而在用户层面上只能看到属于用户自己 namespace 下的资源
  • 例如使用 ps 命令只能列出自己 namespace 下的进程
  • 这样每个 namespace 看上去就像一个单独的 Linux 系统

4.2 Control groups

作用:做资源控制,CPU\MEM\宽带等

  • 提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、memory、磁盘 IO 等等)
    的机制,被 LXC、docker 等很多项目用于实现进程资源控制
  • cgroup 将任意进程进行分组化管理的 Linux 内核功能
  • cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构
  • I/O 或内存的分配控制等具体的资源管理功能是通过这个功能来实现的

4.3 Rootfs

作用:文件系统隔离

k8s-容器编排管理工具


1 ) K8s 功能

  • 微服务需要跑多个容器,容器多又会涉及到通信、架构、伸缩、更新、监控等等问题
  • 自愈:重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器
  • 弹性伸缩:通过监控容器的 cpu 的负载值,如果这个平均高于 80%,增加容器的数量,如果这
    个平均低于 10%,减少容器的数量
  • 服务的自动发现和负载均衡:不需要修改应用程序来使用不熟悉的服务发现机制

2 )K8s 作用

  • Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡
  • 滚动升级和一键回滚
    • Kubernetes 逐渐部署对应用程序或其配置的更改
    • 同时监视应用程序运行状况,以确保它不会同时终止所有实例
  • 如果出现问题,Kubernetes 会恢复更改,利用日益增长的部署解决方案的生态系统
  • 要使用 Kubernetes,你需要用 Kubernetes API 对象 来描述集群的 预期状态(desired state)
  • 包括你需要运行的应用或者负载,它们使用的镜像、副本数,以及所需网络和磁盘资源等等
  • 你可以使用命令行工具 kubectl 来调用 Kubernetes API 创建对象,通过所创建的这些对象来配置预期状态
  • 你也可以直接调用 Kubernetes API 和集群进行交互,设置或者修改预期状态
  • 一旦你设置了你所需的目标状态,Kubernetes 控制面(control plane)
    • 会通过 Pod 生命周期事件生成器( PLEG ),促成集群的当前状态符合其预期状态
    • 为此,Kubernet es 会自动执行各类任务
    • 比如运行或者重启容器、调整给定应用的副本数等等
  • Kubernetes 控制面由一组运行在集群上的进程组成

云原生

  • 云原生是一个生态概念、是一线互联网公司发展到某个极端的必然选择
  • 包含三大要素:容器及编排管理、DevOps、微服务

1 )技术模块

  • 应用定义及部署(App Definition and Development)
  • 编排与管理(Orchestration & Management)
  • 运行环境(Runtime)
  • 配置(Provisioning)
  • 平台(Platform)
  • 可观测性和分析(Observability and Analysis)
  • 无服务(Serverless)

2 )云原生时代

  • 技术升级,概念先行。云原生、容器、devops 等一定是未来若干年的发展方向
  • 为什么说容器划时代?
    • 一方面容器解决了大型架构的发展瓶颈
    • 另一方面,从运维岗位讲,传统运维已经跟不上脚步了
    • 会新技术的运维一定会取代传统运维,更别说其他运维岗位
  • docker 是云原生时代的基石也是应用基础
  • 而这个基础也需要有一定的经验积累才能学通
  • 所以,对运维的要求越来越高

云原生的技术栈

  • 云原生的技术栈实际上三个方面,devops,微服务,还有一块是容器 K8s,从系统层次来看,从上到下分别是:
    • 应用层:应用定义及部署(App Definition and Development)、配置(Provisioning)、可
      观测性和分析(Observability and Analysis)、无服务(Serverless)
    • 集群:编排与管理(Orchestration & Management)
    • 底层运行环境:运行环境(Runtime)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

西瓜书《机器学习》符号表KaTex表示

写这篇post的缘故是最近整理机器学习的相关公式,经常要用到 KaTeX \KaTeX KATE​X, 但网络上搜索到的西瓜书符号表的表示有些并不准确或不严谨,本着严谨治学的态度,整理了一下符号表的 KaTeX \KaTeX KATE​X表示,希望有所帮助,整理…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…

从线性代数到unity mvp矩阵

坐标变换:矩阵是一种线性空间变换的描述(矩阵的列向量,是坐标变换后的基向量)。 如: 如上图,即向量(-1,2)在经过由基底x轴:(1, -2) ,y轴:(3, 0)组成的矩阵变换后得到向量(5,2) 实际上就是-1倍的x轴:(1, -2)加上2倍的y轴:(3,…

线程同步 线程安全

这里写目录标题 线程安全互斥锁**互斥锁初始化****互斥锁加锁和解锁****销毁互斥锁****互斥锁死锁****互斥锁的属性** 条件变量条件变量初始化通知和等待条件变量条件变量的判断条件 自旋锁自旋锁初始化自旋锁加锁和解锁 读写锁读写锁初始化读写锁上锁和解锁读写锁的属性 线程安…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释: 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述: 导入库:代码首先导入必要的库: cv2:用于图像和视频处理…

蓝桥杯基本算法~~~一维/二维前缀和问题

文章目录 1.一维前缀和2.二维前缀和3.移动零问题4.颜色的分类问题 1.一维前缀和 问题说明:一维就是表示的是一维数组的计算,我们的这个一维前缀和是基于这个一维数组进行计算的; 什么是前缀和:就是10 20 30 40 50这个数组&#…

ubuntu20.04系统安装

文章目录 前言参考1 一、准备工作1、进入BIOS,设置 UEFI/Legacy Boot选项 为UEFI2、进入BIOS界面将Secure Boot禁用3、USB启动为enable 二、单系统安装1、插入U盘,电脑正常开机后 总结 前言 装了很多次ubuntu系统,整理一篇自己的文章很费时间…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加,犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣,更在多个领域中发挥着重要作用,如导盲、搜救、疗愈等。因此,准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日,2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商,移远通信再次亮相,并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

虚拟机桥接模式连不上,无法进行SSH等远程操作

说明:以下情况在window10上遇到,解决后顺便做了个笔记,以防后续再次用到,也给同道中人提供一个解决方案 一、首先按照以下步骤进行检查 1、是否连接了对应的wifi 2、是否设置了桥接模式 3、上述1、2确认无误的情况下请查看右上…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥(牟羽)带来的主题演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化,支持按量付费、自适应弹性、跨可…

一款专业获取 iOS 设备的 UDID 工具|一键获取iPhone iPad设备的 UDID

什么是UDID? UDID,是iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID( Unique Device Identifier) 扫描后系统提示输入密码&am…

IDEA连接EXPRESS版本的SQL server数据库

我安装的版本是SQL2019-SSEI-Expr.exe 也就是EXPRESS版本的SQL Server安排非常简单和快速。 但是默认没有启动sa用户。 启动sa用户名密码登录 默认安装完以后没有启用。 使用Miscrosoft SQL Server Management Studio 使用Windows身份连接后。 在安全性》登录名中找到sa并修改…

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】 问题一:讲一讲计算图中pytorch是什么,TensorFlow是什么?1. PyTorch2. TensorFlow区别总结 问题二:Llama…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere:视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

隨筆 20241025 Kafka数据一致性的韭菜比喻

在Kafka中,数据一致性是通过Leader和Follower副本之间的协调来实现的。为了更容易理解这个复杂的概念,我们可以用韭菜作为比喻。 韭菜的角色 Leader韭菜:代表数据的主导者,它负责更新和维护最新的数据。Follower韭菜&#xff1a…

【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文,均为可选项: 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上,这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前,铭文的默…