什么是 微服务、微服务架构、devops、研运一体化、 Docker、k8s、容器化

 最近几个朋友问 微服务相关的问题,聊下来之后发现,对于 微服务涉及的知识体系 有必要整理一下 ,供大家参考。

 微服务 是一个抽象 很庞大的 知识体系、他的学习和理解,我个人认为 扫盲时 “先面后点” 。

 我不建议 通过 搜索知识点的方式 入门,先把 知识脉络整理清楚,然后 再 挑重点深入。

 由微服务 引发了一系列的配套改革,在日常开发中 解决了很多问题,而 这些概念 是不得不 搞清楚的,

所以 我个人建议,在学习的过程中 得搞明白以下几个问题:

1、什么微服务?为什么要用微服务?他解决了什么问题?

2、微服务架构有哪些?如何选?

3、devops 是什么、研运一体化 跟微服务有什么关系?

4、什么是docker,为什么要用docker?

5、k8s 是什么?解决什么问题? k8s 和docker 是什么关系?

6、容器化 解决了什么问题,有哪些解决方案?

 

以下 我罗列一些 觉得 写到好的 文章:

微服务架构是什么?
https://www.zhihu.com/question/65502802

什么是微服务?为什么你要用微服务?
https://www.cnblogs.com/xiao2shiqi/p/11298663.html

什么是devops 跟微服务有什么关联?
从定义来看,其实devops就是为了让开发、运维和QA可以高效协作的流程。(可以把DevOps看作开发、技术运营和质量保障(QA)三者的交集。)
研运一体化:整合了 开发运维和测试

为什么大厂一定要用DevOps
https://baijiahao.baidu.com/s?id=1676154242201588726&wfr=spider&for=pc

很多时候 我们以为自己懂了 实际是 一知半解。
写文档 可以考验 你对 知识体系的掌握程度 。


容器化
到底什么是Docker?什么是K8S?

https://blog.csdn.net/qq_38987057/article/details/109589863

 

关于 容器化 我的个人表述:

关于应用的部署:

第一阶段  一个物理机上面部署一堆应用 ,共用的同一个操作系统,应用之间会 互相影响,抢占CPU 内存 硬盘 网络带宽 资源,经常出问题。
 

第二阶段:  通过linux 虚拟化技术LXC(可以理解为虚拟机 比如你电脑(物理机)上 可以装好几个 虚拟机),然后各个应用 在 虚拟机里面跑,这样的好处是 重复使用 物理机资源,而且 各个虚拟机 资源相对隔离,里面的应用 互不影响,每个虚拟机也可以用不同的操作系统。

重点:通过虚拟化 隔离环境和资源,使得应用独立 减少干扰

随着技术的进步,相对而言,这个 阶段的问题也 很突出,
比如:我们这个项目要部署xx应用,需要把给的 2台机器 挨个 手动装上 jdk 配置环境变量、nginx,手动把springboot jar上传上去,手动启停。 
如果要做集群 还要 把  其他机器上 也部署一个应用,这一切都是手动、而且都是重复工作。

ps:关于tomcat 部署方式的进化:

过去我们要单独安装tomcat 、然后里面放 应用, 一个tomcat 下面可以放多个应用 ,tomcat 启停 影响的是全部应用、多个应用 公用一个tomcat端口。

但是 一个应用一个tomcat 也麻烦。后面进化出 springboot 这种微服务 内嵌tomcat ,通过jar包方式启动。修改端口也方便。


所以 需要的是 把一个应用需要运行的 环境(linux系统,jdk,nginx)这些 通过一个描述文件 描述清楚,

然后 通过 仓库 去拉取 对应的 软件,形成一个镜像,这个过程 可以 理解 是 maven 引用jar包一样的思想。

这个镜像 可以理解是 之前装系统用的 iso文件


docker 所做的是就是 解析这个 描述文件,通过描述文件 把 你这个 jar 运行所需要的 系统 软件清单 按需找齐 ,打成一个镜像iso文件,然后并 运行这个镜像,运行起来的镜像 就是 一个容器(可以 理解是一个虚拟机),

docker 可以理解是一个 虚拟化的软件 比如 vmvare ,Docker镜像就是iso文件,拉起不同的iso镜像 就像 新建了一个虚拟机 装了不同的系统一样,然后系统自启动了以后 开机自启 拉起了 jar的启动命令。这样jar服务就跑起来了。


这就是 第三阶段 容器化 ,其实 就是把第二阶段 由Lxc 、vmare、OpenStack 这些 虚拟机 管理软件 做轻了、把虚拟机系统 做小了,变成 一个系统就一个jar服务。做到最小 启动最快,不用的时候就停掉 释放资源。

 

那么k8s 是干嘛的呢,解决的是什么问题呢?

说到底 就是把 软件所需要的的运行环境 一路拆解 到最小化。标准化,做成容器 拿过来就跑,不需要手动再处理什么。

理解这些问题,得看发展史,到底解决什么问题,来龙去脉

Docker和容器技术为什么会这么火爆?说白了,就是因为它标准化,并且“轻”。

把 复杂的事情 简化,简化的事情 标准化,标准的事情 自动化

需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。
Docker技术的三大核心概念,分别是:
镜像(Image)
容器(Container)
仓库(Repository)

K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。
Kubernetes 这个单词来自于希腊语,含义是舵手或领航员。K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。

 

容器化部署方案有哪些?

阿里云的 容器服务ACKServerless 容器服务 ASK

腾讯云的 容器服务 TKE , 弹性容器服务 EKS

私有云 自建部署方案:Rancher + k3s

 

基于腾讯云 弹性容器服务EKS 费用实测

以一个pod 1核0.5G,1M公网带宽 为例:

公网负载均衡CLB 按量计费小时结 带宽 1M 0.02/小时

弹性容器服务EKS 按量计费小时结 CPU,内存 1核0.5G 0.08/小时

0.1/小时*24 =2.4元 *30 =72元 *12月 = 864元/年

标准集群 每小时 0.5,会自动创建一台 机器、挂载一块硬盘

总结:

容器化部署方案 首先要选择的是 自建还是 使用公用云。

自建的成本高、维护难度大。生产环境 不推荐。开发测试环境可以 玩一玩。 

公有云方案中

阿里云的ACK 和 腾讯云的TKE 是 对标产品,是 基于 服务器的,就是说要先买几个云服务器 比如 阿里云的ECS 。然后 基于已有的云服务器 部署k8s集群。

这个种方式比较重。成本比较高。因此有了 ASK和EKS。

ASK和EKS 都是 基于serverless 的概念,不用提前买云服务器,按量付费,只关心 应用和pod 不用关注 云服务器。适合快速上手。

 


版权声明:本文为xiaozei523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。