日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kafka集群 kubernetes_为什么 Kubernetes 如此受欢迎? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
點(diǎn)擊上方藍(lán)色“火丁筆記”關(guān)注我們,設(shè)個(gè)星標(biāo),每天學(xué)習(xí)全棧知識(shí)

在撰寫本文時(shí),Kubernetes 已有 6 年歷史[1]了,在過去的兩年中,它的流行度不斷提高,一直是最受歡迎的平臺(tái)之一[2]。今年,它成為最受歡迎的第三大平臺(tái)[3]。如果您還沒有聽說過 Kubernetes,告訴你它是一個(gè)平臺(tái),可以讓您運(yùn)行和協(xié)調(diào)容器工作負(fù)載。

容器最初是一個(gè) Linux 內(nèi)核進(jìn)程隔離結(jié)構(gòu),其中包含 2007 年的 cgroups[4] 和 2002 年的 namespaces[5](命名空間)。當(dāng) LXC[6] 在 2008 年可用時(shí),容器變得越來越重要,而 Google 開發(fā)了自己的內(nèi)部“在容器中運(yùn)行所有機(jī)制”系統(tǒng),稱為 Borg[7]。快進(jìn)到 2013 年,Docker 正式發(fā)布,并完全面向大眾。當(dāng)時(shí),Mesos[8] 是編排容器的主要工具,但并未得到廣泛采用。Kubernetes 于 2015 年發(fā)布,并迅速成為事實(shí)上的容器編排標(biāo)準(zhǔn)。

為了嘗試了解 Kubernetes 的受歡迎程度,請考慮一些問題。開發(fā)人員最后一次可以在何時(shí)達(dá)成部署生產(chǎn)應(yīng)用程序的方式?您知道有多少開發(fā)人員開箱即用地運(yùn)行工具?如今有多少云運(yùn)營工程師不了解應(yīng)用程序如何工作?我們將在本文中探討答案。

以數(shù)據(jù)(YAML)為基礎(chǔ)的的架構(gòu)

來自 Puppet[9] 和 Chef[10] 的世界,Kubernetes 的重大轉(zhuǎn)變之一就是從以代碼為基礎(chǔ)的基礎(chǔ)架構(gòu)過渡到以數(shù)據(jù)為基礎(chǔ)的基礎(chǔ)架構(gòu)(特別是 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 或站點(diǎn)可靠性工程師可以更輕松地完全表達(dá)其工作負(fù)載,而無需使用 Python,Ruby 或 Javascript 等編程語言編寫代碼。

以數(shù)據(jù)為基礎(chǔ)的架構(gòu)的其他好處包括:

  • GitOps 或 Git Operations 版本控制。使用這種方法,您可以將所有 Kubernetes YAML 文件保留在 git 存儲(chǔ)庫下,這使您可以準(zhǔn)確地知道何時(shí)進(jìn)行更改,由誰進(jìn)行更改以及究竟進(jìn)行了哪些更改。這樣可以避免整個(gè)組織需要成員去尋找可能模棱兩可的內(nèi)容,從而提高了整個(gè)組織的透明度并提高了效率。同時(shí),通過合并請求,可以更輕松地自動(dòng)更改 Kubernetes 資源。
  • 可擴(kuò)展性。將資源定義為 YAML,使集群運(yùn)營商可以非常輕松地更改 Kubernetes 資源中的一個(gè)或兩個(gè)數(shù)字來更改縮放行為。Kubernetes 具有水平 Pod 自動(dòng)縮放器,可幫助您確定特定部署必須能夠處理的最小和最大數(shù)量的 Pod,才能處理低流量和高流量時(shí)間。例如,如果您運(yùn)行的部署可能由于流量突然增加而可能需要更多容量,則可以將 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 是驗(yàn)證在 Kubernetes 中部署什么以及如何部署的好方法。例如,有關(guān)安全性的主要問題之一是您的工作負(fù)載是否以非 root 用戶身份運(yùn)行。我們可以使用 conftest[11](一種 YAML /JSON 驗(yàn)證器)之類的工具以及Open Policy Agent[12](一種策略驗(yàn)證器)來檢查您的工作負(fù)載的 SecurityContext[13] 是否允許容器作為 root 運(yùn)行。為此,用戶可以使用一個(gè)簡單的開放策略代理重新注冊策略,如下所示:
package?main

deny[msg]?{
??input.kind?=?"Deployment"
??not?input.spec.template.spec.securityContext.runAsNonRoot?=?true
??msg?=?"Containers?must?not?run?as?root"
}
  • 云提供商集成。科技行業(yè)的主要趨勢之一是在公有云提供商中運(yùn)行工作負(fù)載。借助云提供商組件,Kubernetes 允許每個(gè)群集與其運(yùn)行的云提供商進(jìn)行集成。例如,如果用戶正在 AWS 的 Kubernetes 中運(yùn)行某個(gè)應(yīng)用程序,并且希望通過服務(wù)訪問該應(yīng)用程序,則云提供商將幫助自動(dòng)創(chuàng)建 LoadBalancer 服務(wù),該服務(wù)將自動(dòng)設(shè)置 Amazon Elastic Load Balancer 來將流量轉(zhuǎn)發(fā)給應(yīng)用程序 pods。

可擴(kuò)展性

Kubernetes 具有很好的可擴(kuò)展性,開發(fā)人員對此非常滿意。內(nèi)置一些資源,例如 Pod,Deployment,StatefulSet,Secrets,ConfigMap 等。同時(shí)用戶和開發(fā)人員可以通過“自定義資源定義[14]”添加更多資源。例如,如果我們想定義 CronTab 資源,則可以使用以下方法來做到這一點(diǎn):

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

我們可以稍后使用以下內(nèi)容創(chuàng)建 CronTab 資源:

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

Kubernetes 可擴(kuò)展性的另一種形式是開發(fā)人員編寫自己的 Operators[15] 的能力,Operator 是在 Kubernetes 集群中運(yùn)行的,遵循 control loop pattern[16] 的特定進(jìn)程。操作員允許用戶通過與 Kubernetes API 進(jìn)行對話來自動(dòng)管理 CRD(自定義資源定義)。

該社區(qū)有幾種工具,允許開發(fā)人員創(chuàng)建自己的 Operators。這些工具之一是 Operator Framework[17] 及其 Operator SDK[18]。SDK 為開發(fā)人員提供了一個(gè)框架,使他們可以快速開始創(chuàng)建 operator。例如,您可以從命令行[19]輸入以下命令開始:

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

它將為您的 operator 創(chuàng)建整個(gè)樣板,包括 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

最后構(gòu)建并將 operator 推送到您的容器注冊表:

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

如果開發(fā)人員需要更多控制權(quán),則可以修改 Go 文件中的樣板代碼。例如,要修改控制器的詳細(xì)信息,他們可以對 controller.go 文件進(jìn)行更改。

另一個(gè)項(xiàng)目 KUDO[20] 允許您僅使用聲明性 YAML 文件來創(chuàng)建運(yùn)算符。例如,Apache Kafka 的運(yùn)算符將定義為以下內(nèi)容[21],它允許用戶使用以下命令在 Kubernetes 上安裝 Kafka 集群:

$?kubectl?kudo?install?zookeeper
$?kubectl?kudo?install?kafka

然后還使用另一個(gè)命令對其進(jìn)行調(diào)整:

$?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 每三四個(gè)月發(fā)布一次主要版本,這意味著每年都有三到四個(gè)主要版本。推出的新功能的數(shù)量并未減慢,最新版本[22]的 30 多種新增功能和更改證明了這一點(diǎn)。此外,Kubernetes 項(xiàng)目 GitHub 活動(dòng)表明[23],即使在這些困難時(shí)期,貢獻(xiàn)也沒有放緩的跡象。

這些新功能使集群運(yùn)營商在運(yùn)行各種不同的工作負(fù)載時(shí)具有更大的靈活性。軟件工程師還喜歡擁有更多控件,以將其應(yīng)用程序直接部署到生產(chǎn)環(huán)境中。

社區(qū)

Kubernetes 受歡迎的另一個(gè)重要方面是其強(qiáng)大的社區(qū)。首先,Kubernetes 在 2015 年發(fā)布 1.0 版本時(shí)捐贈(zèng)給了一個(gè)與供應(yīng)商無關(guān)的家庭:Cloud Native Computing Foundation[24]

隨著項(xiàng)目的推進(jìn),針對 Kubernetes 中的不同區(qū)域還有各種各樣的社區(qū) SIG[25](特殊興趣小組)。他們不斷添加新功能,并使其對用戶更加友好。

Cloud Native Foundation 還組織了 CloudNativeCon/KubeCon,截至撰寫本文時(shí),CloudNativeCon/KubeCon 是世界上最大的開源活動(dòng)。該活動(dòng)通常每年舉行三屆,吸引了數(shù)千名希望改善 Kubernetes 及其生態(tài)系統(tǒng)以及利用每三個(gè)月發(fā)布的新功能的技術(shù)人員和專業(yè)人士。

此外,Cloud Native Foundation 擁有一個(gè)技術(shù)監(jiān)督委員會(huì)[26],與 SIGs[27] 一起,研究基金會(huì)在云原生生態(tài)系統(tǒng)中的新項(xiàng)目和現(xiàn)有項(xiàng)目[28]。大多數(shù)項(xiàng)目都有助于增強(qiáng) Kubernetes 的價(jià)值主張。

最后,我相信,如果沒有社區(qū)的有意識(shí)的努力來互相包容并歡迎任何新來者,Kubernetes 就不會(huì)取得成功。

未來

開發(fā)人員未來面臨的主要挑戰(zhàn)之一是如何將更多的精力放在代碼的細(xì)節(jié)上,而不是代碼運(yùn)行所在的基礎(chǔ)結(jié)構(gòu)上。為此,無服務(wù)器[29]正在成為應(yīng)對這一挑戰(zhàn)的領(lǐng)先架構(gòu)范例之一。已經(jīng)有非常高級(jí)的框架,例如 Knative[30] 和 OpenFaas[31],它們使用 Kubernetes 從開發(fā)人員那里提取基礎(chǔ)架構(gòu)。

我們在本文中對 Kubernetes 進(jìn)行了簡要介紹,但這只是冰山一角。用戶可以利用更多資源,功能和配置。我們將持續(xù)看到可增強(qiáng)或發(fā)展 Kubernetes 的新開源項(xiàng)目和技術(shù),正如我們所提到的,貢獻(xiàn)和社區(qū)無處不在。

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

作者:Ricardo Aravena[32]

譯者:Go語言中文網(wǎng) polaris

參考資料

[1]

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

[2]

最受歡迎的平臺(tái)之一: https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted

[3]

第三大平臺(tái): 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]

以下內(nèi)容: 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 活動(dòng)表明: 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]

社區(qū) SIG: https://github.com/kubernetes/community/blob/master/sig-list.md

[26]

技術(shù)監(jiān)督委員會(huì): https://github.com/cncf/toc

[27]

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

[28]

現(xiàn)有項(xiàng)目: https://www.cncf.io/projects/

[29]

無服務(wù)器: 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/

總結(jié)

以上是生活随笔為你收集整理的kafka集群 kubernetes_为什么 Kubernetes 如此受欢迎?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。