溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

為什么Kubernetes這么受歡迎

發(fā)布時(shí)間:2021-11-02 17:17:50 來(lái)源:億速云 閱讀:135 作者:iii 欄目:web開(kāi)發(fā)

這篇文章主要講解了“為什么Kubernetes這么受歡迎”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“為什么Kubernetes這么受歡迎”吧!

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

來(lái)自 Puppet[9] 和 Chef[10] 的世界,Kubernetes  的重大轉(zhuǎn)變之一就是從以代碼為基礎(chǔ)的基礎(chǔ)架構(gòu)過(guò)渡到以數(shù)據(jù)為基礎(chǔ)的基礎(chǔ)架構(gòu)(特別是 YAML)。Kubernetes 中的所有資源,包括  Pod,配置,部署,卷等,都可以簡(jiǎn)單地在 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ù)載,而無(wú)需使用 Python,Ruby 或 Javascript  等編程語(yǔ)言編寫(xiě)代碼。

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

  • GitOps 或 Git Operations 版本控制。使用這種方法,您可以將所有 Kubernetes YAML 文件保留在 git  存儲(chǔ)庫(kù)下,這使您可以準(zhǔn)確地知道何時(shí)進(jìn)行更改,由誰(shuí)進(jìn)行更改以及究竟進(jìn)行了哪些更改。這樣可以避免整個(gè)組織需要成員去尋找可能模棱兩可的內(nèi)容,從而提高了整個(gè)組織的透明度并提高了效率。同時(shí),通過(guò)合并請(qǐng)求,可以更輕松地自動(dòng)更改  Kubernetes 資源。

  • 可擴(kuò)展性。將資源定義為 YAML,使集群運(yùn)營(yíng)商可以非常輕松地更改 Kubernetes 資源中的一個(gè)或兩個(gè)數(shù)字來(lái)更改縮放行為。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)安全性的主要問(wèn)題之一是您的工作負(fù)載是否以非 root  用戶身份運(yùn)行。我們可以使用 conftest[11](一種 YAML /JSON 驗(yàn)證器)之類的工具以及Open Policy  Agent[12](一種策略驗(yàn)證器)來(lái)檢查您的工作負(fù)載的 SecurityContext[13] 是否允許容器作為 root  運(yùn)行。為此,用戶可以使用一個(gè)簡(jiǎn)單的開(kāi)放策略代理重新注冊(cè)策略,如下所示:

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

可擴(kuò)展性

Kubernetes 具有很好的可擴(kuò)展性,開(kāi)發(fā)人員對(duì)此非常滿意。內(nèi)置一些資源,例如  Pod,Deployment,StatefulSet,Secrets,ConfigMap  等。同時(shí)用戶和開(kāi)發(fā)人員可以通過(guò)“自定義資源定義[14]”添加更多資源。例如,如果我們想定義 CronTab 資源,則可以使用以下方法來(lái)做到這一點(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ò)展性的另一種形式是開(kāi)發(fā)人員編寫(xiě)自己的 Operators[15] 的能力,Operator 是在 Kubernetes  集群中運(yùn)行的,遵循 control loop pattern[16] 的特定進(jìn)程。操作員允許用戶通過(guò)與 Kubernetes API 進(jìn)行對(duì)話來(lái)自動(dòng)管理  CRD(自定義資源定義)。

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

$ 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 推送到您的容器注冊(cè)表:

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

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

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

$ kubectl kudo install zookeeper $ kubectl kudo install kafka

然后還使用另一個(gè)命令對(duì)其進(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

革新

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

這些新功能使集群運(yùn)營(yíng)商在運(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)商無(wú)關(guān)的家庭:Cloud Native Computing Foundation[24]。

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

Cloud Native Foundation 還組織了  CloudNativeCon/KubeCon,截至撰寫(xiě)本文時(shí),CloudNativeCon/KubeCon  是世界上比較大的開(kāi)源活動(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à)值主張。

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

感謝各位的閱讀,以上就是“為什么Kubernetes這么受歡迎”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)為什么Kubernetes這么受歡迎這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI