0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

k8s架构篇:服务部署模式是如何变迁的

马哥Linux运维 来源:csdn 2023-10-15 15:39 次阅读

kubernetes,简称 K8s,是用 8 代替中间 8 个字符 “ubernete” 而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

k8s 在企业中的应用场景

首先我们了解一下 k8s 的三个基本特点:

可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)

可扩展: 模块化,插件化,可挂载,可组合

自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

自动化运维平台

对于中小型企业,为了降本增效,使用 k8s 来构建一套自动化运维平台,提供了应用部署,规划,更新,维护的一种机制。 对于大型互联网公司更要使用容器化部署。现在服务器越来越多,不可能都人工部署,需要使用自动化的运维平台来监控服务,来实现自动服务化的部署、运维。

充分利用服务器资源

假设现在有一个开发量为 200 个的请求,服务器配置为 2cpus 4G

静态请求:150(访问 CDN,Nginx,cache 等)

动态请求:50(访问数据库,需要把数据读入内存)

估算服务器资源(只考虑内存,不考虑程序响应时间RT,不考虑CPU切换时间) 假设一个静态请求进程占用2M,一个动态请求进程占用10M,则这200个请求并发占用:150×2M + 50×10M = 800M 内存 可以支持的 QPS (批发量,每秒查询率) 为:200×4=800(因为 800 M× 4 < 4G) 因此如果要充分利用服务器资源,需要达到 QPS=800,此时占用内存 3.2G(剩下 0.8G 给 OS 等) 实际上:800QPS 无法达到,还要考虑 RT、CPU 切换、内存等因素,那就保守把 QPS=300,但这时没能充分利用服务器的资源。更何况当下服务器配置可不止 2cpus 4G 容器化解决方案,在服务器部署多个容器,容器当中运行着我们部署的各种服务

0b90baaa-6a68-11ee-939d-92fbcf53809c.png

服务无缝迁移

在开发环境开发,然后拿到测试环境去测试,但往往一上线就会有 bug,因为应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,所以生产环境的不一致就可能导致错误。 使用容器化解决方案,每个应用可以被打包成一个容器镜像(红色圈起来表示把服务部署在容器中),使用容器可以在 开发 或 测试 的阶段,为应用创建容器镜像,这些镜像能够完全脱离环境,每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。使用 kubernetes 来管理这些容器,便能够实现服务的无缝迁移。

0ba1fee6-6a68-11ee-939d-92fbcf53809c.png

服务部署模式变迁 & 服务部署变化问题的思考

服务部署模式是如何变迁的

物理机:传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作。

虚拟化 (虚拟机):当然上面的问题可以通过创建虚拟机的方式来实现某些功能,但是虚拟机本身就很占用资源,并不利于可移植性。(就是把服务部署在虚拟机中,达到分隔物理资源的作用——充分利用服务器资源)

容器部署:每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。而且更轻量级、运行效率更快。

服务部署模式变化,带来了哪些问题

前提条件:SOA 架构,微服务架构模式下,服务拆分越来越多,部署维护的服务越来越多,该如何管理? 虚拟机服务部署方式(通过 openstack 软件提供可视化的方式来管理虚拟机) 容器化部署模式(通过 k8s 软件管理容器,其实容器也可以看成一个虚拟机,只不过更轻量级) 容器化部署问题:

如何对服务横向扩展?

容器宕机怎么办?如何恢复?

重新发布版本如何更新且更新后不影响业务?

如何监控容器?

容器如何调度创建?

数据安全性如何保证?

使用 k8s 管理容器,以上问题都能够完美的解决

云架构 & 云原生

云 和 k8s 的关系

云:使用容器构建的一套服务集群网络,云是由很多的容器构成。 k8s:用来管理云中的容器

云架构

iaas:基础设施即服务

用户角度:租用(购买或分配权限)云主机,用户不用考虑网络、DNS、存储和硬件环境等方面的问题。 运营商角度:提供网络、DNS、存储等这样的服务就叫做基础设置服务

paas:平台即服务

在平台上提供了很多服务,如 MySQL 服务、Redis 服务、MQ 服务、Elasticsearch 服务等等

saas:软件即服务

钉钉、财务管理等等,一些软件维护工作都是由运行商来做,用户只管体验软件提供的服务就行了。

serverless:server 服务,less 无 —— 无服务 不需要服务器

站在用户角度考虑问题,用户只需要使用云服务器即可。 在云服务器上的所有的基础环境、软件环境都不需要考虑和维护,非常方便。 未来开发的趋势都是 severless,企业都构建了自己的私有云或者公有云环境。使用 k8s 构建非常方便。

云原生

为了让应用程序(项目,服务软件)都运行在云上的解决方案,这样方案叫做云原生,有以下特点:

容器化:所有的服务都必须部署在容器中。

微服务:web 服务架构是微服务架构

CI/CD:可持续交互和可持续部署

DevOps:开发和运维密不可分

kubernetes 架构原理

k8s 的历史

k8s 是由 Google 公司 用go 语言开发的。google 在全球有相当多的服务器,当然需要一个管理软件。Google内部本身就有一个叫 borg 的系统云平台管理工具,已经使用了十几年。后来参照 borg 系统架构开发了 k8s,主要用它来编排、管理容器,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

k8s 的架构

k8s 集群(Cluster)

0bae4dc2-6a68-11ee-939d-92fbcf53809c.png

一个 master 对应一群 node 节点

master 节点

0bbc2410-6a68-11ee-939d-92fbcf53809c.png

api server:相当于 k8s 的网关,所有的指令请求都必须经过 api server

scheduler:调度器,使用调度算法,把请求资源调度到某个 node 节点

controller:控制器,维护 k8s 资源对象(CRUD:添加、删除、更新、修改)

etcd:存储资源对象(可以服务注册、发现等等)

node 节点

0bc7e976-6a68-11ee-939d-92fbcf53809c.png

docker:运行容器的基础环境,容器引擎

kubelet:每个 node 节点都有一份kubelet,在 node 节点上的资源操作指令由 kuberlet 来执行,scheduler 把请求交给api ,然后 api sever 再把信息指令数据存储在 etcd 里,于是 kuberlet 会扫描 etcd 并获取指令请求,然后去执行

kube-proxy:代理服务,负载均衡

fluentd:日志收集服务

pod:k8s 管理的基本单元(最小单元),pod 内部是容器。k8s 不直接管理容器,而是管理 pod

回顾架构特点

k8s 是用来管理容器的,但是不直接操作容器,最小的操作单元是 pod(间接管理容器)

一个 master 对应一群 node 节点。

master 节点不存储容器,只负责调度,网关,控制器,资源对象存储等

容器存储在 node 节点 的 pod 内部

pod 内部可以有一个或多个容器

kubelet 负责本地的 pod 的维护,CRUD

kube-proxy 负责负载均衡,在多个 pod 间负载均衡
编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211584
  • 服务器
    +关注

    关注

    12

    文章

    9123

    浏览量

    85324
  • 容器
    +关注

    关注

    0

    文章

    495

    浏览量

    22060
  • 进程
    +关注

    关注

    0

    文章

    203

    浏览量

    13960
  • kubernetes
    +关注

    关注

    0

    文章

    224

    浏览量

    8712

原文标题:通俗易懂 k8s ——架构篇

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
    发表于 02-28 12:49

    如何利用K8S全面拥抱微服务架构

    K8S是第一个将“一切以服务为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S
    的头像 发表于 10-08 15:59 2.7w次阅读

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    Docker不香吗为什么还要用K8s

    。 关于 K8s 的基本概念我们将会围绕如下七点展开: Docker 的管理痛点 什么是 K8s? 云架构 云原生 K8s 架构原理
    的头像 发表于 06-02 11:56 3437次阅读

    简单说明k8s和Docker之间的关系

    这篇文章主要介绍了k8s和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以研究下 最近项目用到kubernetes(以下简称k8sks之间有
    的头像 发表于 06-24 15:48 3405次阅读

    K8S集群服务访问失败怎么办 K8S故障处理集锦

    问题1:K8S集群服务访问失败?     原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Fa
    的头像 发表于 09-01 11:11 1.6w次阅读
    <b class='flag-5'>K8S</b>集群<b class='flag-5'>服务</b>访问失败怎么办 <b class='flag-5'>K8S</b>故障处理集锦

    mysql部署k8s上的实现方案

    的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署k8s 上,mysql 部署
    的头像 发表于 09-26 10:39 2506次阅读

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 1113次阅读

    什么是K3sK8sK3sK8s有什么区别?

    Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
    的头像 发表于 08-03 10:53 7518次阅读

    K8S落地实践经验分享

    k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 1117次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    常用的k8s容器网络模式有哪些?

    常用的k8s容器网络模式包括Bridge模式、Host模式、Overlay模式、Flannel模式
    的头像 发表于 09-19 11:29 235次阅读

    服务部署k8s需要什么配置?

    服务部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群,工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker,选择兼容的Kubernetes版本,配置网络插件,以及确保系
    的头像 发表于 10-09 15:31 204次阅读

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实现资源互通。然后,编写Deploym
    的头像 发表于 11-07 09:37 140次阅读

    k8s服务架构就是云原生吗?两者是什么关系

    k8s服务架构就是云原生吗?K8s服务架构并不等同于云原生,但两者之间存在密切的联系。Kub
    的头像 发表于 11-25 09:39 136次阅读

    k8s和docker区别对比,哪个更强?

    部署、扩展、管理和应用生命周期管理能力,可实现高可用性和自动伸缩,两者常结合使用以优化容器化和应用管理。UU云小编将对k8s和docker区别进行详细对比:
    的头像 发表于 12-11 13:55 74次阅读