开源是如何促成Kubernetes成功的

news/2024/7/10 18:58:01 标签: kubernetes, 开源, 云原生, 容器, docker

本文基于与Kubernetes联合创始人Brendan Burns的采访,他出现在《Dev Interrupted》播客中。

Kubernetes的成功从未是注定的,它经历了多年的努力。

如今,它已成为最大且最受欢迎的开源项目之一,并成为构建全球云原生应用程序的首选API,但最初它几乎没有成为开源项目。

自2014年创立以来,Kubernetes(一个用于部署容器化应用程序的开源编排器)已经从一个由Joe Beda、Craig McLuckie和Brendan Burns三人共同创办的小型项目,发展成为一个生产级基础架构,为各个领域的大规模生产应用程序提供支持,包括机器学习和在线服务。

Kubernetes的目标是简化构建、部署和维护分布式系统的任务,使全球范围内的人们能够实现新的速度、灵活性和可靠性水平。多年来,Kubernetes已发展成为一个庞大而成功的开源社区,但这是一个漫长的过程。

什么是容器

在深入了解Kubernetes的历史之前,让我们先定义一下“容器”,因为它通常具有广泛的含义。

从根本上讲,容器是将应用程序打包、构建应用程序组成部分的二进制表示(如软件、配置文件等),并具有分发协议以在全球范围内分发应用程序的过程。

容器的三个支柱是:

1. 将所有内容打包,使其在笔记本电脑和云端等环境中完全相同。

2. 第一步的分发需要在全球范围内轻松进行。

3. 创建一个环境,其中一个组件的错误不会影响另一个组件。

它是如何开始的

当我们在Dev Interrupted播客上采访Kubernetes联合创始人Brendan Burns时,他告诉我们,作为一名工程师,他发现自己倾向于寻找机会。在谷歌工作时,他注意到云端有很多空白空间,认为这将是一个有吸引力的领域。当时,他领导着一个由约七名工程师组成的小团队,并决定将他的团队转移到云端。

与此同时,他最终的Kubernetes联合创始人Joe和Craig创建了Compute Engine,这是Google Cloud的虚拟机产品,他们三人开始在Google的云部门共同工作。虽然Joe和Craig专注于计算,但Brendan在配置管理方面工作,例如CloudFormation和Terraform。

想法开始凝聚,他们三人目睹了人们在尝试采用云端时面临的挑战——这是一个过于困难的过程。谷歌内部也有一些系统,特别是一个名为Borg的系统,它是一个集群管理器,至今仍在使用,它为这三位开发人员构思Kubernetes提供了最初的灵感。

然而,如果没有Docker,这一切都不会成为现实。

Docker改变了一切

作为 Kubernetes 功能的先决条件,需要激励人们构建容器镜像并运行容器。Docker 是一家出现并说服人们为什么应该关心遏制的初创公司。突然间,一个用例出现了,一个惊人的机会出现了。

Docker 在规模化方面没有太多经验,他们专注于一台机器,在那台机器上有一个容器和守护进程——他们缺乏的是编排。如果构建了一个可以充当容器编排器的系统,那么它不仅代表着改变市场而且改变整个云环境的巨大机会。

当您考虑将应用程序部署到云端甚至内部部署的机器集合需要什么时,这是一个漫长的过程。它需要您打包一个应用程序、分发它、保持它运行、在应用程序的各个部分之间实现负载均衡流量,以及一个将它们连接在一起的 API。

在 Kubernetes 之前,其中一些系统已经存在,但与今天完全不同。Kubernetes 负责将分布式系统应用程序环境的思想主流化,以构建和构建跨机器的分布式系统。

随着对编排的需求的实现,下一步是向高管推销这个想法。

销售开源软件

说服人们相信这是可能的并且是一个好主意相当简单。在谷歌有一些人了解Joe、Craig和Brendan试图做的事情。真正的战斗是争取将Kubernetes变成开源的过程。正如Brendan在我们的采访中所分享的,他们在谷歌内部就是否开源进行了很多争论。

大部分争议归结于金钱和控制。从商业角度来看,如果一个产品或系统取得巨大成功,并且只有你能够销售它,那么你就处于一个很好的位置。相反地,Brendan告诉我们,他一直觉得只有在拥有一个生态系统的情况下,Kubernetes才能取得巨大成功,而培育生态系统的最佳方式就是将其开源

这种观点围绕着共同建设软件的社区。早期形成了一个令人惊叹的社区,其中的人们帮助构建文档,撰写教程,并在会议上讨论他们的工作,而且还有一批公司构建在Kubernetes的成功上进行业务投资的生态系统。初创公司开始出现,他们会说:“使用我的监控软件的前提是你拥有一个Kubernetes集群。”所有这些关注和善意形成了一个围绕Kubernetes的良性循环。

成功总是看起来很容易

很快,Kelsey Hightower,Google Cloud的首席工程师和Brendan的合著者(书名为《Kubernetes: Up and Running: Dive into the Future of Infrastructure》)加入进来,开始大力宣传和关注Kubernetes。

回顾过去,很容易认为一切都变得容易了,因为Kubernetes取得了巨大成功。它目前在每个主要的公共云平台都存在。人们期望它出现在新的系统中。但事实是,在那些早期的年份里,建立和宣传Kubernetes需要付出大量的辛勤工作。

Brendan与我们分享了他对未来的希望,他希望Kubernetes的各个组成部分在某种程度上渐渐淡出人们的视线。它将一直存在并且非常重要,但日常生活中不会被讨论或思考,因为正如他所说,“还有许多其他需要构建的东西”。


作者:Dan Lines

更多技术干货请关注公号【云原生数据库】

 


http://www.niftyadmin.cn/n/339642.html

相关文章

最流行的开源 LLM (大语言模型)整理

本文对国内外公司、科研机构等组织开源的 LLM 进行了全面的整理。 Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 所谓"语言模…

【STL模版库】模拟实现vector类模版

一、成员变量 template<class T> class Myvector{typedef T *iterator; //[1]typedef const T *const_iterator;private:iterator _start; //指向存存储空间的开头 //[2]iterator _finish; //指向实际存储元素的下一个位置iterator _end_of_storage; //指向存储空间结尾…

《游戏编程模式》--序列模式--学习

在线阅读&#xff1a; 序列模式 游戏设计模式 (tkchu.me) 参考文章&#xff1a; GameDesignPattern_U3D_Version/Assets/007SequencingPatterns at master TYJia/GameDesignPattern_U3D_Version GitHub 目录 序列模式 双缓冲模式 何时使用 提醒&#xff1a; 缓冲区是…

【数据结构】——排序

排序的概念及其运用 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&am…

什么是webshell,它和XSS有什么不同

什么是webshell&#xff0c;它和XSS有什么不同 webshell简介与XSS的不同点XSS简介与webshell的区别 webshell常用的工具 webshell简介 Webshell 是一种用于对网站服务器进行远程控制的脚本程序。它通常是一个命令行界面的脚本&#xff0c;可以在服务器上执行各种操作&#xff…

lidar camera calibration

1 Automatic Extrinsic Calibration Method for LiDAR and Camera Sensor Setups 2022 vel2cam git 2 A Novel Method for LiDARCamera Calibration by PlaneFitting 本文介绍了一种使用带ArUco标记的立方体的3D-3D对应特征来校准LiDAR和相机的新方法。在LiDAR坐标系中&…

自定义线程池 ThreadPoolExecutor

ThreadPoolExecutor 自定义线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultT…

算法第一天——移除元素

常用方法 暴力破解&#xff08;费时间&#xff0c;效率低&#xff09;快慢指针&#xff08;双指针&#xff09; 题目 1、移除元素 暴力破解思路&#xff1a; 使用两个for循环嵌套第一个循环顺序遍历数组当nums[i]val 的时候 &#xff0c;执行第二层循环&#xff0c;将后面的…