文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

为什么 Kubernetes 如此受欢迎?

2024-12-24 16:54

关注

[[328678]]

容器最初是一个 Linux 内核进程隔离结构,其中包含 2007 年的 cgroups[4] 和 2002 年的 namespaces[5](命名空间)。当 LXC[6] 在 2008 年可用时,容器变得越来越重要,而 Google 开发了自己的内部“在容器中运行所有机制”系统,称为 Borg[7]。快进到 2013 年,Docker 正式发布,并完全面向大众。当时,Mesos[8] 是编排容器的主要工具,但并未得到广泛采用。Kubernetes 于 2015 年发布,并迅速成为事实上的容器编排标准。

为了尝试了解 Kubernetes 的受欢迎程度,请考虑一些问题。开发人员最后一次可以在何时达成部署生产应用程序的方式?您知道有多少开发人员开箱即用地运行工具?如今有多少云运营工程师不了解应用程序如何工作?我们将在本文中探讨答案。

以数据(YAML)为基础的的架构

来自 Puppet[9] 和 Chef[10] 的世界,Kubernetes 的重大转变之一就是从以代码为基础的基础架构过渡到以数据为基础的基础架构(特别是 YAML)。Kubernetes 中的所有资源,包括 Pod,配置,部署,卷等,都可以简单地在 YAML 文件中表示。

 

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: site 
  5.   labels: 
  6.     app: web 
  7. spec: 
  8.   containers: 
  9.     - name: front-end 
  10.       image: nginx 
  11.       ports: 
  12.         - containerPort: 80 

这种表示形式使 DevOps 或站点可靠性工程师可以更轻松地完全表达其工作负载,而无需使用 Python,Ruby 或 Javascript 等编程语言编写代码。

以数据为基础的架构的其他好处包括:

 

  1. apiVersion: autoscaling/v2beta2 
  2. kind: HorizontalPodAutoscaler 
  3. metadata: 
  4.   name: myapp 
  5.   namespace: default 
  6. spec: 
  7.   scaleTargetRef: 
  8.     apiVersion: apps/v1 
  9.     kind: Deployment 
  10.     name: myapp-deployment 
  11.   minReplicas: 1 
  12.   maxReplicas: 20 
  13.   metrics: 
  14.   - type: Resource 
  15.     resource: 
  16.       name: cpu 
  17.       target: 
  18.         type: Utilization 
  19.         averageUtilization: 50 

 

  1. package main 
  2. deny[msg] { 
  3.   input.kind = "Deployment" 
  4.   not input.spec.template.spec.securityContext.runAsNonRoot = true 
  5.   msg = "Containers must not run as root" 

可扩展性

Kubernetes 具有很好的可扩展性,开发人员对此非常满意。内置一些资源,例如 Pod,Deployment,StatefulSet,Secrets,ConfigMap 等。同时用户和开发人员可以通过“自定义资源定义[14]”添加更多资源。例如,如果我们想定义 CronTab 资源,则可以使用以下方法来做到这一点:

 

  1. apiVersion: apiextensions.k8s.io/v1 
  2. kind: CustomResourceDefinition 
  3. metadata: 
  4.   name: crontabs.my.org 
  5. spec: 
  6.   group: my.org 
  7.   versions: 
  8.     - name: v1 
  9.       served: true 
  10.       storage: true 
  11.       Schema
  12.         openAPIV3Schema: 
  13.           type: object 
  14.           properties: 
  15.             spec: 
  16.               type: object 
  17.               properties: 
  18.                 cronSpec: 
  19.                   type: string 
  20.                   pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' 
  21.                 replicas: 
  22.                   type: integer 
  23.                   minimum: 1 
  24.                   maximum: 10 
  25.   scope: Namespaced 
  26.   names: 
  27.     plural: crontabs 
  28.     singular: crontab 
  29.     kind: CronTab 
  30.     shortNames: 
  31.     - ct 

我们可以稍后使用以下内容创建 CronTab 资源:

 

  1. apiVersion: "my.org/v1" 
  2. kind: CronTab 
  3. metadata: 
  4.   name: my-cron-object 
  5. spec: 
  6.   cronSpec: "* * * * */5" 
  7.   image: my-cron-image 
  8.   replicas: 5 

Kubernetes 可扩展性的另一种形式是开发人员编写自己的 Operators[15] 的能力,Operator 是在 Kubernetes 集群中运行的,遵循 control loop pattern[16] 的特定进程。操作员允许用户通过与 Kubernetes API 进行对话来自动管理 CRD(自定义资源定义)。

该社区有几种工具,允许开发人员创建自己的 Operators。这些工具之一是 Operator Framework[17] 及其 Operator SDK[18]。SDK 为开发人员提供了一个框架,使他们可以快速开始创建 operator。例如,您可以从命令行[19]输入以下命令开始:

 

  1. $ operator-sdk new my-operator --repo github.com/myuser/my-operator 

它将为您的 operator 创建整个样板,包括 YAML 文件和 Go 代码:

 

  1. |____cmd 
  2. | |____manager 
  3. | | |____main.go 
  4. |____go.mod 
  5. |____deploy 
  6. | |____role.yaml 
  7. | |____role_binding.yaml 
  8. | |____service_account.yaml 
  9. | |____operator.yaml 
  10. |____tools.go 
  11. |____go.sum 
  12. |____.gitignore 
  13. |____version 
  14. | |____version.go 
  15. |____build 
  16. | |____bin 
  17. | | |____user_setup 
  18. | | |____entrypoint 
  19. | |____Dockerfile 
  20. |____pkg 
  21. | |____apis 
  22. | | |____apis.go 
  23. | |____controller 
  24. | | |____controller.go 

然后,您可以添加 API 和类似的控制器:

 

  1. $ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService 
  2. $ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService 

最后构建并将 operator 推送到您的容器注册表:

 

  1. $ operator-sdk build your.container.registry/youruser/myapp-operator 

如果开发人员需要更多控制权,则可以修改 Go 文件中的样板代码。例如,要修改控制器的详细信息,他们可以对 controller.go 文件进行更改。

另一个项目 KUDO[20] 允许您仅使用声明性 YAML 文件来创建运算符。例如,Apache Kafka 的运算符将定义为以下内容[21],它允许用户使用以下命令在 Kubernetes 上安装 Kafka 集群:

 

  1. $ kubectl kudo install zookeeper 
  2. $ kubectl kudo install kafka 

然后还使用另一个命令对其进行调整:

 

  1. $ kubectl kudo install kafka --instance=my-kafka-name \ 
  2.             -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \ 
  3.             -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \ 
  4.             -p BROKER_COUNT=5 -p BROKER_MEM=4096m \ 
  5.             -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \ 
  6.             -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20 

革新

在过去的几年中,Kubernetes 每三四个月发布一次主要版本,这意味着每年都有三到四个主要版本。推出的新功能的数量并未减慢,最新版本[22]的 30 多种新增功能和更改证明了这一点。此外,Kubernetes 项目 GitHub 活动表明[23],即使在这些困难时期,贡献也没有放缓的迹象。

这些新功能使集群运营商在运行各种不同的工作负载时具有更大的灵活性。软件工程师还喜欢拥有更多控件,以将其应用程序直接部署到生产环境中。

社区

Kubernetes 受欢迎的另一个重要方面是其强大的社区。首先,Kubernetes 在 2015 年发布 1.0 版本时捐赠给了一个与供应商无关的家庭:Cloud Native Computing Foundation[24]。

随着项目的推进,针对 Kubernetes 中的不同区域还有各种各样的社区 SIG[25](特殊兴趣小组)。他们不断添加新功能,并使其对用户更加友好。

Cloud Native Foundation 还组织了 CloudNativeCon/KubeCon,截至撰写本文时,CloudNativeCon/KubeCon 是世界上比较大的开源活动。该活动通常每年举行三届,吸引了数千名希望改善 Kubernetes 及其生态系统以及利用每三个月发布的新功能的技术人员和专业人士。

此外,Cloud Native Foundation 拥有一个技术监督委员会[26],与 SIGs[27] 一起,研究基金会在云原生生态系统中的新项目和现有项目[28]。大多数项目都有助于增强 Kubernetes 的价值主张。

最后,我相信,如果没有社区的有意识的努力来互相包容并欢迎任何新来者,Kubernetes 就不会取得成功。

未来

开发人员未来面临的主要挑战之一是如何将更多的精力放在代码的细节上,而不是代码运行所在的基础结构上。为此,无服务器[29]正在成为应对这一挑战的领先架构范例之一。已经有非常高级的框架,例如 Knative[30] 和 OpenFaas[31],它们使用 Kubernetes 从开发人员那里提取基础架构。

我们在本文中对 Kubernetes 进行了简要介绍,但这只是冰山一角。用户可以利用更多资源,功能和配置。我们将持续看到可增强或发展 Kubernetes 的新开源项目和技术,正如我们所提到的,贡献和社区无处不在。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯