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

news2024/11/28 12:48:18

概述

  • 传统虚拟机,利用 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.coloradmin.cn/o/2227573.html

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

相关文章

ansible开局配置-openEuler

ansible干啥用的就不多介绍了,这篇文章主要在说ansible的安装、开局配置、免密登录。 ansible安装 查看系统版本 cat /etc/openEuler-latest输出内容如下: openeulerversionopenEuler-24.03-LTS compiletime2024-05-27-21-31-28 gccversion12.3.1-30.…

img 标签的 object-fit 属性

设置图片固定尺寸后,可以通过 object-fit 属性调整图片展示的形式 object-fit: contain; 图片的长宽比不变,相应调整大小。 object-fit: cover; 当图片的长宽比与容器的长宽比不一致时,会被裁切。 object-fit: fill; 图片不再锁定长宽…

基于边缘计算的智能门禁系统架构设计分析

案例 阅读以下关于 Web 系统架构设计的叙述,回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统,用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前,可以通过线上提前预约的方式将自己的个人信息…

数学建模清风——论文写作方法教程笔记

PS:本文不讲LateX的使用!讲述论文的写作方法 首页:论文标题摘要关键词 一、问题重述 二、问题分析 三、模型假设 四、符号说明 五、模型的建立与求解 六、模型的分析与检验 七、模型的评价、改进与推广 八、参考文献 附录 首页&#xff…

Laravel5 抓取第三方网站图片,存储到本地

背景 近期发现,网站上的部分图片无法显示, 分析发现,是因为引用的第三方网站图片(第三方服务器证书已过期) 想着以后显示的方便 直接抓取第三方服务器图片,转存到本地服务器 思路 1. 查询数据表&#xff0…

自适应神经网络架构:原理解析与代码示例

个人主页:chian-ocean 文章专栏 自适应神经网络结构:深入探讨与代码实现 1. 引言 随着深度学习的不断发展,传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

《Python游戏编程入门》注-第4章1

《Python游戏编程入门》的第4章是“用户输入:Bomb Cathcer游戏”,通过轮询键盘和鼠标设备状态实现Bomb Cathcer游戏。 1 Bomb Cathcer游戏介绍 “4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法,即通过鼠标来控制红色“挡板”…

【Java基础】2、Java基础语法

f2/fnf2:选中点中的文件名 ​​​​​​​ 1.注释 为什么要有注释? 给别人和以后的自己可以看懂的解释 注释含义 注释是在程序指定位置的说明性信息;简单理解,就是对代码的一种解释 注释分类 单行注释 //注释信息 多行注释…

Spring Boot 应用开发概述

目录 Spring Boot 应用开发概述 Spring Boot 的核心特性 Spring Boot 的开发模式 Spring Boot 在企业应用开发中的优势 结论 Spring Boot 应用开发概述 Spring Boot 是由 Pivotal 团队开发的一个框架,基于 Spring 框架,旨在简化和加速基于 Spring …

微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式

前言 因官方文档描述不清晰,本文主要介绍微信小程序动画 实现过程 / 实现方式。 实现过程 推荐你对照 官方文档 来看本文章,这样更有利于理解。 简单来说,整个动画实现过程就三步: 创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的 export 方法…

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列出…

【Spring】Cookie与Session

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 一、Cookie是什么? Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…

论文略读:Can We Edit Factual Knowledge by In-Context Learning?

EMNLP 2023 第一个探索in-context learning在语言模型知识编辑方便的效果 传统的知识编辑方法通过在包含特定知识的文本上进行微调来改进 LLMs 随着模型规模的增加,这些基于梯度的方法会带来巨大的计算成本->论文提出了上下文知识编辑(IKE&#xff0…

WebGL 添加背景图

1. 纹理坐标(st坐标)简介 ST纹理坐标(也称为UV坐标)是一种二维坐标系统,用于在三维模型的表面上精确地定位二维纹理图像。这种坐标系统通常将纹理的左下角映射到(0,0),而右上角映射到(1,1)。 S坐标&#x…

基于Multisim的可编程放大电路设计与仿真

74LS279(RS触发器),结合开关,将输出接入74LS163实现的8位计数器的时钟端,每拨动两次开关K,将产生一个脉冲信号,计数器将加一,产生的结果为000,001,010,011,100,101,110,111&#xff…

面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int removeDuplicates(int[] nums) …

并发编程(2)——线程管控

目录 二、day2 1. 线程管控 1.1 归属权转移 1.2 joining_thread 1.2.1 如何使用 joining_thread 1.3 std::jthread 1.3.1 零开销原则 1.3.2 线程停止 1.4 容器管理线程对象 1.4.1 使用容器 1.4.2 如何选择线程运行数量 1.5 线程id 二、day2 今天学习如何管理线程&a…

5个可替代Gamma的国产ppt软件推荐!职场办公不要太简单!

Gamma ppt是海外一款非常受欢迎的ai做ppt软件,这款软件上线的时间不长,却在短时间内收获了众多用户的好评和资本市场的青睐。 对国内用户而言,Gamma PPT在国内虽然可以使用,但是由于其站点架设在海外,访问时往往存在延…

2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷

2024年9月青少年软件编程Python等级考试(三级)真题试卷 选择题 第 1 题 单选题 以下python表达式的值为True的是?( ) A.all( ,1,2,3) B.any([]) C.bool(abc) D.divmod(6,0) 第 2 题 单选题 下列python代码的…

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的? mysql中使用 【like “%中国%”】,这样的使用方案 缺点1:mysql索引会失效缺点2:不能模糊,比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树,又称前缀树…