不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式

出身豪门、大厂背书的 Kubernetes 项目自 2014 年 6 月开源以来,在众多厂商和开源爱好者的共同努力下迅速崛起,时至今日已成长为容器管理领域的事实标准。凭借超前的设计理念、开放的参与门槛、国内外大厂和开发者的大力支持,它的成功不言而喻。

国内外对 Kubernetes 这波潮流的追捧,包括各大云厂商,蚂蚁金服、京东、美团、滴滴等各大公司都把 Kubernetes 作为自己的基础设施重心,"一万个人眼中就有一万个哈姆雷特",虽说 Kubernetes 是容器管理领域的事实标准,但实际上在不同背景的企业中,Kubernetes 的落地方式上是存在差异的。大致可分为三类:

 

  • 一类是完全在 Kubernetes 的之上 (Above) 以其原生方式部署和应用,这类用户大部分是一些初创企业,没有过多的技术栈负担,并且主要集中在使用公有云的 Kubernetes 方案和服务;
  • 一类是基于 Kubernetes (On) 构建的容器管理平台,复用了 Kubernetes 的一些概念但是并没有把应用的管理交给 Kubernetes 来管理,保持着旧的服务治理方式,这类企业发展时间比较久,技术负担比较重,无法立即切换到云原生的服务治理方式,一时无法抛弃多年的技术积累,这类用户主要集中在一些中型或大型的私有云的 Kubernetes 使用场景;
  • 另一类是基于 Kubernetes 的设计理念 (In) 通过自定义应用负载来解决和适应本地化的应用管理需求,将本地化的负载和管理融入到原生的 Kubernetes 架构中,这也是目前应用管理的一个趋势,既能吃到云原生和社区 Kubernetes 的红利,又能更好地将多年的技术积累发展演进,融入其中,这是一种拥抱云原生的一种绝佳道路。

基础"斧":Above Kubernetes

如果现在让你选择一个容器管理平台,相信应该没人会错过 Kubernetes,尤其对于没有任何技术负担的用户,选择 Kubernetes 无疑是最明智的一个选择。

Above Kubernetes,这种落地方式很好理解,就是你把原生的、标准的、无任何接触和侵入改动的社区版本的 Kubernetes 拿来,直接部署运行起来即可,完全在 Kubernetes 之上构建自己的应用,通过标准的 Kubernetes API 来访问集群。你可以完全跟着社区升级演进你的 Kubernetes,保持与社区同步,完全借助于社区的力量维护你的 Kubernetes。

这种落地方式无疑是最理想的,你不必考虑与社区和业界的主流脱离,同时也降低了管理和运维的成本。

如上图,你可以安装标准的、主流的云原生体系来落地 Kubernetes,可以拥抱社区的一整套完整的架构方案,并且足以满足你的需求。

高阶"斧":On Kubernetes

能够使用原生的 Kubernetes 集群诚然非常好,但是有些场景并不一定走得通。大家都知道,Kubernetes 的概念和设计其实是很超前的,谷歌的软件开发和应用部署理念虽然好,但业界大部分的企业还是陈旧的技术理念和更复杂的场景,对于一些由技术积淀的企业用户而言,想要一下子抛弃当前的应用管理和部署方式改为原生的 Kubernetes 的应用部署和管理方式,确实有些吃不消。那对于这些用户而言,肯定不能看着别人吃肉自己啃窝窝头。

On Kubernetes 的落地形态其实是一种妥协和中间过程,一方面很难一下子抛弃已有的基础设施,例如服务治理、监控、网络拓扑等等,只能在原生的 Kubernetes 基础上做一些本地化改造使得 Kubernetes 能够满足当前的应用管理方式,例如抛弃 kube-proxy 使用扁平化的内网环境、通过富容器的方式包装一些监控和代理组件等等。

这种落地方式一方面能够做少了改动就吃到这波技术红利,一方面可以探索属于自己的云原生的道路,内部技术栈也可以朝着云原生的方向发展演进,不至于在这波潮流中落后太多,而且可以根据自己的场景做定制化的 Kubernetes 开发,甚至比社区的 Kubernetes 走的更远或者解决一些社区没有解决的问题。

有得必有失,虽然可以借助于 Kubernetes 的设计理念和管理能力,但是同时由于本地化的改造不能完全与社区版本的 Kubernetes 兼容,升级就会比较麻烦,每次升级不得不重新打 patch,还会出现同时维护多个 Kubernetes 版本的窘境,这无疑会给开发和运维带来很多麻烦,所以这也不是一般的小公司能够走得通的道路,需要一定的研发和技术能力。比较典型的是阿里巴巴的 Sigma、美团点评的 HULK 2.0 以及京东的 JDOS 2.0 。

在这种高阶的玩法中,没有标准的套路,只有符合自己的方案。例如美团点评结合自己已有的设施在 Kubernetes 上构建了 HULK2.0 系统,在存储、网络、负载生命周期管理以及应用监控等方面做了本地化改造,但是仍然保持对 Kubernetes API 的完全兼容。你可以根据自有的基础设施,例如存储、监控、链路追踪、服务发布以及网络等等一系列组件融合,甚至根据业务场景和自身需求对 Kubernetes 做深度的定制化,例如网易云基于 Kubernetes 的深度定制化实践。

绝杀"斧":In Kubernetes

云原生这一说法在技术圈已经广为流传,甚至一些同学并不理解什么是云原生,但都知道要朝着云原生的方向发展演进。不管怎样,对于用户而言,改变以往虚拟机的部署和管理方式以及服务的治理策略是必要的。不得不说,All in Kubernetes 是一个趋势,CRD 自 Kubernetes 1.7 版本产生到上周发布的 1.16 版本的 GA,也就是说我们完全有了可以在生产环境扩展 Kubernetes 的能力。

大家如果深入了解 Kubernetes 会发现,Kubernetes 本身就是一个平台,Kubernetes 除了提供了很多的功能:例如它可以简化应用程序的工作流,加快开发速度;用户可以使用 Label 以自己的方式组织管理资源;还可以使用 Annotation 来自定义资源的描述信息,比如为管理工具提供状态检查等。此外,Kubernetes 控制器也是构建在跟开发人员和用户使用的相同的 API 之上,用户还可以编写自己的控制器和调度器,也可以通过各种插件机制扩展系统的功能。

这就是说,我们完全可以在 Kubernetes 里面通过扩展 API 和负载类型完成任何形式和类型的应用负载和管理方法,即使你有复杂的技术栈不可摆脱或者说有复杂的工作流,没问题,你可以根据自己的需要在资源和应用生命周期注入任何外部依赖和逻辑。

这种落地方式其实是借助于 Kubernetes 提供的扩展机制,完全将本地化、复杂化的逻辑转化为 Kubernetes 的设计和管理理念,不仅仅是使用 Kubernetes,而是融入和弱化原生 Kubernetes,最终每个用户都有着自己的一套独一无二的 Kubernetes。你中有我,我中有你。此外,它仍然完全和原生的 Kubernetes 兼容,可以优雅地升级和合并社区的 patch 等等。比较有代表性的是阿里开源的 Openkruise 项目。https://github.com/openkruise/kruise

用户使用 Kubernetes 核心是对工作负载的管理,其实选择 On Kubernetes 的一个很大原因是用户当前的工作负载管理方式与 Kubernetes 的已有工作负载类型不能很好地匹配。CRD 和 Operator 很好地解决了这个问题,让用户可以定制自己的负载。OpenKruise 项目就是这样一个典型的例子, 它是一组控制器,可扩展和补充 Kubernetes 核心控制器的工作负载管理。例如它提供三种工作负载控制器:

  • 高级 StatefulSet:默认 StatefulSet 的增强版本,具有额外的功能,例如 inplace-update,pasue 和 MaxUnavailable。
  • BroadcastJob:在集群中的所有节点上运行 Pod 以完成的作业。
  • SidecarSet:一个控制器,它根据选择器将边车容器注入 Pod 规范,并且能够升级边车容器。

理想的情况下,任何负载都可以做到 All in Kubernetes,甚至 Kubernetes 本身的负载管理,即 kube-on-kube,以及对于有状态服务的管理,例如 Mysql 集群 Operator 等等,你可以在 operatorhub 找到一些非常经典的例子。

总结

虽说不同的落地方式互有差异,但其实都是不同背景下的最好选择,它们都可以做到完全兼容 Kubernetes 的 API,脱离了问题本身,都不能说哪种方式最好。

  • Above Kubernetes:如果你是一家初创公司,只想使用 Kubernetes 满足正常的容器管理或者服务部署,没有什么负担,同时人力也不足,没有能力自己维护 Kubernetes;
  • On Kubernetes:如果你是一家中型甚至大型公司,有着大量的技术积累和设施,并且有能力和人力改造和开发 Kubernetes 或者原生的 Kubernetes 并不能满足你的需求;
  • In Kubernetes:你不满足于单纯使用 Kubernetes 或者说原生的 Kubernetes 不能满足你的需求,你可以从 Above Kubernetes 转变而来;当然,如果痛定思痛,或者想彻底地改造当前的基础设施和应用管理方式,想更加靠近云原生的道路或者想要升级陈旧的机器部署和交付模式,你可以从 On Kubernetes 转变而来,最终 All in Kubernetes。

你的 Kubernetes 落地方式是什么样子呢?

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

当我们在聊 Serverless 时你应该知道这些

作者 | 杨泽强(竹涧)阿里云技术专家 说起当前最火的技术,除了最新的区块链、AI,还有一个不得不提的概念是 Serverless。Serverless 作为一种新型的互联网架构,直接或间接推动了云计算的发展,从 AWS Lambda…

nacos集成dubbo实现远程服务调用

文章目录1. 模块划分设计2. 创建父工程3. 创建公共接口4. 服务端5. 客户端6. nacos7. 测试8. 码云开源地址1. 模块划分设计 模块名工程名端口父工程nacos-dubbo无服务端nacos-dubbo-provider9000消费端nacos-dubbo-consumer8000公共接口nacos-dubbo-interface无 2. 创建父工程…

如何在容器内高效编程?

作者 | Daniel Lemire译者 | 苏本如,责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN(ID:CSDNnews)以下为译文:我个人的编程环境中包括了一些服务器、笔记本电脑和台式电脑。我的服务器是在不同的时间购买和配置的&am…

(企业案例)Nacos Config 进阶使用

文章目录一、SpringBoot 使用 Nacos Config 实现多环境切换1. 现象2. 引入依赖3. 添加bootstrap.yaml配置文件4. 配置对应关系图5. 文件格式简述6. 启动nacos7. 添加生产配置8. 添加测试controller9. 启动Springboot工程并观察到如下日志则为成功10. 浏览器验证11. 调整激活环境…

OceanBase如何获得TPC-C测试第1名?

阿里妹导读:TPC-C是TPC组织(国际事务性能委员会)制定的关于商品销售的订单创建和订单支付等的基准测试标准,是数据库联机交易处理系统的权威基准测试标准。 蚂蚁金服自研的分布式关系数据库OceanBase获得TPC-C测试第一名后&#…

由一次磁盘告警引发的“血案”——你知道 du 和 ls 区别吗?

来源 | 程序猿石头责编 | Carol封图 | CSDN下载自视觉中国图来源于 SkyPixel知道为什么会有上面的结果吗?什么又是稀疏文件?这篇文章将为你揭秘。问题背景确切地说,不是收到的自动告警短信或者邮件告诉我某机器上的磁盘满了,而是某…

如何优化大规模推荐?下一代算法技术JTM来了

阿里妹导读:搜索,推荐和广告是互联网内容提供商进行价值创造的核心业务,在阿里巴巴的电子商务交易平台上,搜索,推荐和广告业务同样具有举足轻重的意义和价值。现在,阿里推荐技术又双叒优化了,新…

Sentinel 基于Nacos规则持久化-推模式

文章目录一、推模式架构图二、原理简述2.1. 组件版本关系2.2. 控制台推送规则三、Sentinel控制台改造3.1. 下载源码3.2. 修改pom3.3. 重要文件复制3.4. 注册地址修改3.5. 请求实例需改3.6. 菜单新增四、编译 & 启动4.1. 先启动nacos4.2. 编译打包4.3. 创建微服务 &&…

都听我的,会养猪种菜的工程师最帅了!

来了!今天,阿里数字农业事业部在黑龙江首次亮相,并且定了一个小目标:到2022年,阿里涉农产品全年网络销售额破4000亿元。 黑龙江省牡丹江市的阿里巴巴响水大米种植基地,又到了收割季 数字农业事业部将建立产…

清华硕士一针见血:这些才是机器学习必备的数学基础

现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

如何查看使用 Cloud Toolkit 部署应用的实时日志

之前,我们介绍了《在 IntelliJ IDEA 中部署应用到服务器》。最新版本 Cloud Toolkit 新增了对远程服务器应用部署时,实时日志的查看功能。功能预览如下: 打开应用部署的配置界面,如上图所示,点击「Advanced」标签页&am…

这 10 个云计算错误,会让你的业务一蹶不振!

作者 | John Edwards译者 | 火火酱,责编 | Carol出品 | CSDN 云计算(CSDNcloud)封图 | CSDN 付费下载自视觉中国乐观主义者们总爱说:“乌云总是镶着金边的”,但他们没有说的是,在乌云下常有狂风、暴雨、闪电…

MySQL 8.0.26 简易配置安装教程 (windows 64位)

文章目录一、软件下载解压1. 官网下载2.下载完成后解压二、mysql配置2.1. my.ini2.2. 初始化MySQL2.3. 安装MySQL服务2.4. mysql已经安装过了2.5. 启动MySQL的服务三、密码修改3.1. 登录mysql3.2. 修改密码3.3. 退出mysql四、客户端连接mysql4.1. Navicat4.2. 登录mysql4.3. 操…

类与字节码技术

类文件结构 1.1 魔数 0-3字节,表示它是否是【class】类型的文件 ​ |java| 0000000 ca fe ba be 00 00 00 34 00 23 0a 00 06 00 15 09 1.2 版本 4-7字节,表示类的版本00 34 (52) 表示是Java8 0000000 ca fe ba be 00 00 00…

支付宝 App 是如何建设移动 DevOps 的?

本文系InfoQ对蚂蚁金服技术专家洪锋的采访,洪锋老师即将在 QCon 上海站 2019 分享《移动研发 DevOps 在支付宝 App 内的落地实践》,欢迎关注。 微软 MSDN 上的一篇文章有这样一段话:“移动应用的理想环境需要满足两个条件,一是可以…

淘宝端智能演进和思考

今天分享内容包括三部分,第一是端智能整体趋势和淘宝应用现状,第二是淘宝在应用端智能过程中面临的问题和挑战,以及我们的应对和解决思路,我们构建了端到端的完整技术体系,第三是开源推理引擎 MNN 的最新情况。 01、端…

从零开始入门 K8s | 可观测性:你的应用健康吗?

一、需求来源 首先来看一下,整个需求的来源:当把应用迁移到 Kubernetes 之后,要如何去保障应用的健康与稳定呢?其实很简单,可以从两个方面来进行增强: 首先是提高应用的可观测性;第二是提高应…

技术差的程序员,90%都输在这点上!骨灰级开发:其实都是在瞎努力!

01从未得到过重视的问题“一流程序员学数学,二流程序员学算法,低端看高端就是黑魔法”。可能有人会以为这是段子,而有过开发经验的都知道,这就是程序员的真实写照!而数学不好的程序员,我想你开发过程中&…

layui 单选项 点击显示与隐藏 很实用

html <div class"layui-form-item"><label class"layui-form-label">类型</label><div class"layui-input-block"><input type"radio" name"type" lay-filter"type" value"0&quo…

2. 字节码指令

2. 字节码指令 2.1 入门 public cn.itcast.jvm.t5.HelloWorld();构造方法的字节码指令 ​ 2a b7 00 01 b1 2a> aload_0加载slot 0的局部变量&#xff0c;即this&#xff0c;做为下面的invokespecial 构造方法调用的参数b7 >invokespecial预备调用构造方法&#xff0c…