kafka集群 kubernetes_为什么 Kubernetes 如此受欢迎?

点击上方蓝色“火丁笔记”关注我们,设个星标,每天学习全栈知识

在撰写本文时,Kubernetes 已有 6 年历史[1]了,在过去的两年中,它的流行度不断提高,一直是最受欢迎的平台之一[2]。今年,它成为最受欢迎的第三大平台[3]。如果您还没有听说过 Kubernetes,告诉你它是一个平台,可以让您运行和协调容器工作负载。

容器最初是一个 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 文件中表示。

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

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

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

  • GitOps 或 Git Operations 版本控制。使用这种方法,您可以将所有 Kubernetes YAML 文件保留在 git 存储库下,这使您可以准确地知道何时进行更改,由谁进行更改以及究竟进行了哪些更改。这样可以避免整个组织需要成员去寻找可能模棱两可的内容,从而提高了整个组织的透明度并提高了效率。同时,通过合并请求,可以更轻松地自动更改 Kubernetes 资源。
  • 可扩展性。将资源定义为 YAML,使集群运营商可以非常轻松地更改 Kubernetes 资源中的一个或两个数字来更改缩放行为。Kubernetes 具有水平 Pod 自动缩放器,可帮助您确定特定部署必须能够处理的最小和最大数量的 Pod,才能处理低流量和高流量时间。例如,如果您运行的部署可能由于流量突然增加而可能需要更多容量,则可以将 maxReplicas 从 10 更改为 20:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  • 安全和控制。YAML 是验证在 Kubernetes 中部署什么以及如何部署的好方法。例如,有关安全性的主要问题之一是您的工作负载是否以非 root 用户身份运行。我们可以使用 conftest[11](一种 YAML /JSON 验证器)之类的工具以及Open Policy Agent[12](一种策略验证器)来检查您的工作负载的 SecurityContext[13] 是否允许容器作为 root 运行。为此,用户可以使用一个简单的开放策略代理重新注册策略,如下所示:
package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}
  • 云提供商集成。科技行业的主要趋势之一是在公有云提供商中运行工作负载。借助云提供商组件,Kubernetes 允许每个群集与其运行的云提供商进行集成。例如,如果用户正在 AWS 的 Kubernetes 中运行某个应用程序,并且希望通过服务访问该应用程序,则云提供商将帮助自动创建 LoadBalancer 服务,该服务将自动设置 Amazon Elastic Load Balancer 来将流量转发给应用程序 pods。

可扩展性

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

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

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

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

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

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

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

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

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

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

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

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

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

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

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

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

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

$ kubectl kudo install kafka --instance=my-kafka-name \
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m \
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \
            -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 的新开源项目和技术,正如我们所提到的,贡献和社区无处不在。

原文链接:https://stackoverflow.blog/2020/05/29/why-kubernetes-getting-so-popular/

作者:Ricardo Aravena[32]

译者:Go语言中文网 polaris

参考资料

[1]

已有 6 年历史: https://en.wikipedia.org/wiki/Kubernetes

[2]

最受欢迎的平台之一: https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted

[3]

第三大平台: https://dev.insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-platforms

[4]

cgroups: https://en.wikipedia.org/wiki/Cgroups

[5]

namespaces: https://en.wikipedia.org/wiki/Linux_namespaces

[6]

LXC: https://en.wikipedia.org/wiki/LXC

[7]

Borg: https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/

[8]

Mesos: http://mesos.apache.org/

[9]

Puppet: https://github.com/puppetlabs/puppet

[10]

Chef: https://github.com/chef/chef

[11]

conftest: https://www.conftest.dev/

[12]

Open Policy Agent: https://www.openpolicyagent.org/

[13]

SecurityContext: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

[14]

自定义资源定义: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/

[15]

Operators: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/

[16]

control loop pattern: https://kubernetes.io/docs/concepts/#kubernetes-control-plane

[17]

Operator Framework: https://github.com/operator-framework

[18]

Operator SDK: https://github.com/operator-framework/operator-sdk

[19]

命令行: https://github.com/operator-framework/operator-sdk#create-and-deploy-an-app-operator

[20]

KUDO: https://kudo.dev/

[21]

以下内容: https://github.com/kudobuilder/operators/blob/master/repository/kafka/operator/operator.yaml

[22]

最新版本: https://kubernetes.io/docs/setup/release/notes/#changes-by-kind

[23]

GitHub 活动表明: https://k8s.devstats.cncf.io/d/12/dashboards?orgId=1&refresh=15m&from=now-1y&to=now-1h

[24]

Cloud Native Computing Foundation: https://www.cncf.io/

[25]

社区 SIG: https://github.com/kubernetes/community/blob/master/sig-list.md

[26]

技术监督委员会: https://github.com/cncf/toc

[27]

SIGs: https://github.com/cncf/toc/blob/master/sigs/README.md

[28]

现有项目: https://www.cncf.io/projects/

[29]

无服务器: https://stackoverflow.blog/2020/05/18/you-want-efficient-application-scaling-go-serverless/

[30]

Knative: https://github.com/knative

[31]

OpenFaas: https://github.com/openfaas/faas

[32]

Ricardo Aravena: https://stackoverflow.blog/author/ricardo-aravena/

0a41ac84b93a9f503d7cafca2572dbe2.png

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

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

相关文章

android 动画 返回,Android“菜单图标变返回”动画

此例用到SVG动画,其中涉及三个XML文件,分别为:Vector矢量图,objectAnimator动画,以及一个animated-vector文件将前两个文件联合起来。1.在drawable文件夹下新建vector文件描述矢量图android:height"200dp"an…

全志A10 Bootload加载过程分析

A10的启动过程大概可分为5步:BootRom,SPL,Uboot,Kernel,RootFileSystem。本文只关注镜像的加载过程,分析RootRom->SPL->Uboot的启动流程。系统上电后,ARM处理器在复位时从地址0x000000开始…

android老 电池,为什么安卓手机不会因为电池的老化而降频呢?

前段时间,苹果手机的降频事件也是闹的沸沸扬扬,库克也为此进行了公开道歉,各位的吃瓜群众也是看的不亦乐乎,于是,也有不少的小伙伴会问:“为什么安卓手机不会因为电池的老化而降频?”今天&#…

android 5.0.1 libdvm.so,Android逆向进阶—— 脱壳的奥义(基ART模式下的dump)

本文作者:i春秋作家HAI_ZHU000 前言市面上的资料大多都是基于Dalvik模式的dump,所以这此准备搞一个ART模式下的dump。Dalvik模式是Android 4.4及其以下采用的模式,之后到了Android 5.0 之后就是ART模式,关于这两个模式的详细内容&…

android+3.0新加的动画,Android动画片

使用Android两年多了,工作中的动画也动能应付,自认为Android中的动画自己也能用个八九不离十,结果我在学习[Periscope点赞效果](http://www.jianshu.com/p/03fdcfd3ae9c)的时候发现动画的这些高级功能我从没用过、也没见过,静下来…

在线打开html文件,html是什么文件?html文件怎么打开?

html是什么?html即超文本标记语言,现在大多网页都是html的格式。而所谓的html文件是一种超文本文件,其中超文本可以是图片或音乐等非文字元素,使用很广泛。但是很多用户都不太明白html是什么文件?也不清楚html文件要如…

gsoap使用心得! (win32)

最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习!gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在Window…

html怎么置顶导航栏,css怎么实现滚动页面导航栏固定在顶部

css怎么实现滚动页面导航栏固定在顶部(吸顶效果)功能:当网页向下滚动时,导航栏一直在固定在顶部一、css设置这里主要用到css中position中的relative与fixed;其中relative是生成相对定位的元素,相对于其正常位置进行定位。fixed是生…

numpy读取csv_Numpy——IO操作与数据处理

一、问题?大多数数据并不是我们自己构造的,存在文件当中。我们需要工具去获取,但是Numpy其实并不适合去读取处理数据,这里我们了解相关API,以及Numpy不方便的地方即可。二、Numpy读取genfromtxt(fname[, dtype, commen…

android 中radiogroup滑动切换,巧妙实现缺角radiogroup控制多个fragment切换和滑动

在android开发中,用一个radiogroup控制多个fragment切换是十分常见的需求。但是如果fragment是一个ListView,如何保证滑动的时候通过缺角可以看到下面的listview是一个难点。直接上图:(1)完美效果(2)较差效果另外,不妨假设缺角的高度是5dp&am…

荣耀智慧屏评测 鸿蒙OS加持,荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视...

原标题:荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视 来源:TechWeb.com.cn当华为选择在今年公布鸿蒙OS系统后,很多人都在期待它的庐山真面目。无论是以后非常时期不再受制于人,或是循序渐进将系统过渡给自家设备&a…

2021河南固高高考成绩查询,河南信阳最好的4所高中,前三所学霸如云,看看有没有你的母校?...

河南省信阳市处于豫之南,鄂之北。南边是连绵的群山,北边是广袤的平原。千里淮河,曲折盘旋,它的源头便是这里。都说信阳是一个神奇的地方,一点儿也不为过,狮河穿城而过,周围群山环抱,…

磁盘的磁道(Track)

写这篇文章,主要是为了解决长久以来的一个困惑。由此也可以看出偶以前确实不太聪明。 哈哈(虽然现在仍然还是) 以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解…

centos 卸载_CentOS安装mysql

安装mysql第一步,查看是否安装:rpm -qa| grep mysql-server没有我们就开始安装,点击 这里,获取下载页面,按照图示选择合适的版本:第二步,进入/usr/local/soft/目录,在里面执行wget 下…

细数改善WPF应用程序性能的10大方法

WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系,越高档的机器性能越有优势。 程序性能改善不是一蹴而就的&#xff…

javaweb宿舍管理系统源码_宿舍信息管理系统展示

宿舍信息管理系统今天整理学习笔记的时候发现了自己当时学SSM框架的时候写了一个简单的Javaweb宿舍信息管理系统,虽然现在看来写的不是很好,但今日写此文章也算是纪念自己的第一个SSM小项目了,话不多说,直接开始。项目简介&#x…

Qt UDP的初步使用

为了使用Qt自带的Socket进行网络编程,先必须熟悉Socket编程的原理,另外还需对Qt一些基本类的操作比较熟悉。由于刚接触不久,所以还是以看人家的代码来学习。这次主要是学Qt下UDP的编程,且熟悉一些Qt下代码的编写流程,所…

下列哪一项不是计算机网络的典型应用,09级计算机信息网络试卷A

…………密…………封…………线…………内…………请…………不…………要…………答…………题…………河北工程大学11~12学年第二学期期末考试试卷A一、填空题(每空1分,共10分)1、在因特网中,远程登录Telnet系统采用的应用工作模式为____客户机&#…

hdu 4452

今天模拟赛的一个模拟题&#xff1b; 每次看到这种题就感觉很繁琐&#xff1b; 这次静下心来写写&#xff0c;感觉还不错&#xff01;就是很多错误&#xff0c;浪费了一点时间&#xff1b; 代码&#xff1a; 1 #include<cstdio>2 #include<cstring>3 using namespa…

openpyxl 绘制饼形图_好享学丨快速上手Pythonmatplotlib 箱线图绘制,学术人必备

好享学是高下制图推出的关于数据可视化经验分享栏目&#xff0c;我们将定期与您分享各界优秀人士的制图经验&#xff0c;一同学习。01. 引言箱线图(Boxplot) 是一种用作显示一组数据分散情况资料的统计图表&#xff0c;本期推文就如何使用matplotlib和seaborn 绘制出高度定制化…