一、源起

最早在大学时代使用VMware安装Ubuntu学习Linux,12年实习使用kvm虚拟机搭建测试环境,14-15年那会儿docker有点火,开始基于docker搭建测试环境。使用体验是VMware安装挺复杂的,启动Ubuntu也很慢,操作很卡(可能那会儿电脑也差)。而docker使用体验非常好,mysql,redis,zookeeper,memcahce等这些开发环境能够快速搭建,使用docker desktop管理很方便。

二、初探

1、虚拟机 VS Docker

虚拟机:在硬件层面实现虚拟化, 需要有额外的虚拟机管理应用和虚拟机操作系统层。

虚拟机简易原理图

docker:在操作系统层面上实现虚拟化, 直接复用本地主机的操作系统,更加轻量级。

docker简易原理图

以上是自己使用时简单体验,引用网上规范对比(请自行了解鉴别):

  1. Docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
  2. Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。
  3. Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高。
  4. 与虚拟机相比,Docker隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离。
  5. 安全性:Docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。
  6. 可管理性:Docker的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如VMware vCenter提供完备的虚拟机管理能力。
  7. 高可用和可恢复性:Docker对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡、高可用、容错、迁移和数据保护等经过生产实践检验的成熟保障机制,VMware可承诺虚拟机99.999%高可用,保证业务连续性。
  8. 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
  9. 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。

PS:如果对隔离性、安全性要求较高,依然会首选虚拟机。

2、Docker 和 K8S

概念

  1. Docker是最早的成熟的一种容器运行时(一种虚拟化隔离形式)
  2. kubernetes是做容器编排的,pod是它调度最小单位,表示"容器集"

k8s出现背景

docker用于测试时简单方便,但运用到线上时,编排、管理、调度、安全等各个方面,尤其容器非常多时,非常困难。

k8s对多种容器运行时提供基本的部署,维护以及应用伸缩等能力。docker作为容器运行时鼻祖,一开始k8s主动提供dockershim来兼容docker,不过维护成本比较高,需要不断兼容docker。近年来在CNCF基金会大力支持下,k8s发展迅猛,有了定义容器运行时标准的需求和资格,新版本已经废弃dockershim,将docker和其他容器运行时一视同仁。目前主流容器运行时有:

  • docker
  • CRI-O:Container Runtime Interface(容器运行时接口)+OCI open container initiative(开放容器倡议)
  • rkt
  • kata containerd

k8s主要功能简介

1. 数据卷

pod中容器之间共享数据,可以使用数据卷

2. 应用程序健康检查

容器内服务可能进程阻塞无法处理请求,可以设置监控检查策略保证应用健壮性

3. 复制应用程序实例

控制器维护着pod副本数量,保证一个pod或一组同类的pod数量始终可用

4. 弹性伸缩

根据设定的指标(cpu利用率)自动缩放pod副本数

5. 服务发现

使用环境变量或者DNS插件保证容器中程序发现pod入口访问地址

6. 负载均衡

一组pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。在集群内部其他pod可通过这个clusterIP访问应用

7. 滚动更新

更新服务不中断,一次更新一个pod,而不是同时删除整个服务

8. 服务编排

通过文件描述部署服务,使得应用程序部署变得更高效

9. 资源监控

node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDb时序数据库,再由Grafana展示

10.提供认证和授权

支持角色访问控制(RBAC)认证授权等策略

k8s入门

k8s中文社区

3、OpenStack VS Kubernetes

两者都是目前主流云计算平台框架,在摩尔定律逐渐失效的情况下,发展必然越来越好。简单对比两者如下:

OpenStack(KVM)
虚拟化优点:隔离性强,所有的虚拟机都有自己的协议栈,各个虚拟机底层相互隔离。
虚拟化缺点:资源占用多,虚拟化技术本身占用资源,宿主机性能有10%左右的消耗。

Kubernetes(Docker)
容器优点:启动快,资源占用小,移植性好。
容器缺点:隔离性不好,共用宿主机的内核,底层能够访问。依赖宿主机内核所以容器的系统选择有限制。

OpenStack VS Kubernetes 谁是云计算平台王者?

4、云原生和云原生应用

概念

  • 云原生:基于“云”的架构设计和开发模式理念。
  • 云原生应用:天然适合云特点的应用,不依赖操作系统等基础设施或某个云平台。应用从开始就设计为运行在云中,无论私有云或公有云(云中互相迁移);其次,该应用必须满足水平扩展(多节点部署)
  • 传统云三层概念:
三层云架构

IaaS:比如服务器,AWS的EC2,S3,阿里云的ECS。(使用CPU、内存、显存、网络等)

PaaS:比如Tomcat加MySQL。(使用操作系统、中间件、数据库、运行库、软件应用)

SaaS:比如三千块一套的加个Logo就能开业的电商网站。(登录即可使用)

5、实践现状

目前公司有3个产品,但都不是天然的云原生应用(不可以跨云部署)

  1. 基于docker的测试环境(逐渐废弃)
  2. 基于k8s+docker的devOps流水线产品(CI/CD测试环境)
  3. 基于k8s+docker的线上发布平台

运维掌握k8s技术,业务部门想要k8s能力,需和k8s团队配合。我们推荐部门的机器学习平台,希望在海外架设(aws),如果把它改造成天然的云原生应用(它依赖的组件也云原生化,比如mysql,zookeeper),那么就可以实现天然跨云部署,那是最完美的,也是后续优化方向。

读书笔记-云原生应用初探相关推荐

  1. QT Creator快速入门读书笔记:窗口部件初探

    QWidget基础窗口部件 Qt把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样.QMainWindow和大量的QDialog子类是最一般的窗口 ...

  2. 青云科技周小四:汽车行业云原生应用初探

    本文为青云科技副总裁周小四在蓝驰创投"软件定义汽车"分享会上的主题分享.他结合青云科技容器产品 KubeSphere,从云原生技术趋势和汽车行业容器典型落地场景等角度,阐述了软件给 ...

  3. 读书笔记--云边有个小卖部

    自从读了张嘉佳的<从你的全世界路过>之后发现了张老师写的文章里的那种莫名觉得心酸,觉得很想要揍人但是无法去发泄的情感.没一个小故事带给我的感触都不一样.也让我在书里尝到了各种不同的人生的酸 ...

  4. QT Creator快速入门读书笔记:新建HelloWorld工程

    窗口部件 QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,QWidget类是所有用户界面对象的基类,被称为基础窗口部件.QWidget继承自QObject类和Q ...

  5. 读书笔记——《迁移到云原生架构》

    读书笔记--迁移到云原生架构 总体框架 为什么 -- 云原生能带来什么? 怎么做 非技术变革 技术迁移步骤--如何进行云原生的迁移 参考 总体框架 这本书整体遵循的是,为什么(能带来什么) -> ...

  6. 《数字银行的云原生架构解密》读书笔记

    他山之石,可以攻玉 随着互联网的蓬勃发展及近年来疫情的影响,越来越多人离开银行柜台涌向互联网端.银行的客户分为两类:对公客户和对私客户.对公客户一般体量较大,业务笔数相对少.对私客户体量小,但笔数多. ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 初探云原生应用管理之:聊聊 Tekton 项目

    [编者的话]"人间四月芳菲尽,山寺桃花始盛开." 越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,帮助大家管理和发布不断增多的 Kubernetes 应用.在做 ...

最新文章

  1. IHttpHandler 概述
  2. spark-submit参数说明--on YARN
  3. oracle 唯一递增列,在oracle中创建unique唯一约束(单列和多列)
  4. Flutter ListView解决底部或顶部留白问题
  5. 军转干部计算机测试题,2015福建军转干考试计算机基础知识:计算机网络
  6. 我是如何学习写一个操作系统(三):操作系统的启动之保护模式
  7. iPhone上运行Linux也要来了
  8. 四、PHP框架Laravel学习笔记——路由命名和分组
  9. 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python
  10. c++全局变量,局部变量,内存布局,默认初始化
  11. c#自带类实现的多文件压缩和解压
  12. SaaS服务和个性化需求,就不能鱼和熊掌兼得吗?
  13. 移动端element日期插件不弹软键盘
  14. 关于信号强度单位db和dBm
  15. 用小马激活的千万小心!!
  16. 海洋cms漏洞——search.php
  17. 手机助手+for+linux,你的手机助手(com.microsoft.appmanager) - 3.5.8 - 应用 - 酷安
  18. alin42490怎样解除_最新版农药通用名称与CIPAC编号对照表
  19. mpv播放器键盘快捷键
  20. web安全:XSS测试平台使用教程

热门文章

  1. 加强我国人工智能国防应用的研究与思考
  2. 自学电脑专业技术可以考证吗
  3. linux define路径,linux架设BT Tracker服务器小记
  4. 深度强化学习DQN网络
  5. IoT黑板报0210:Google 发布 Android Things 开发者第二预览版
  6. 牛客网题库公司真题 2021阅文C++方向笔试卷答案
  7. 威纶通屏幕(HMI)开发进阶教程三:数据地址格式的讲解
  8. 三、HDMI与I2C
  9. 「Vue自我检验」Vue 组件进阶知识,你了解多少?
  10. VS编程,快速折叠或者展开代码到 #region 级别的设置方法。