日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么Kubernetes如此受歡迎?

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

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

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

以數(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 文件中表示。

 
 
 
  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 等編程語言編寫代碼。

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

  • GitOps 或 Git Operations 版本控制。使用這種方法,您可以將所有 Kubernetes YAML 文件保留在 git 存儲庫下,這使您可以準確地知道何時進行更改,由誰進行更改以及究竟進行了哪些更改。這樣可以避免整個組織需要成員去尋找可能模棱兩可的內(nèi)容,從而提高了整個組織的透明度并提高了效率。同時,通過合并請求,可以更輕松地自動更改 Kubernetes 資源。
  • 可擴展性。將資源定義為 YAML,使集群運營商可以非常輕松地更改 Kubernetes 資源中的一個或兩個數(shù)字來更改縮放行為。Kubernetes 具有水平 Pod 自動縮放器,可幫助您確定特定部署必須能夠處理的最小和最大數(shù)量的 Pod,才能處理低流量和高流量時間。例如,如果您運行的部署可能由于流量突然增加而可能需要更多容量,則可以將 maxReplicas 從 10 更改為 20:

 

 
 
 
  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 
  • 安全和控制。YAML 是驗證在 Kubernetes 中部署什么以及如何部署的好方法。例如,有關(guān)安全性的主要問題之一是您的工作負載是否以非 root 用戶身份運行。我們可以使用 conftest[11](一種 YAML /JSON 驗證器)之類的工具以及Open Policy Agent[12](一種策略驗證器)來檢查您的工作負載的 SecurityContext[13] 是否允許容器作為 root 運行。為此,用戶可以使用一個簡單的開放策略代理重新注冊策略,如下所示:

 

 
 
 
  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" 
  • 云提供商集成??萍夹袠I(yè)的主要趨勢之一是在公有云提供商中運行工作負載。借助云提供商組件,Kubernetes 允許每個群集與其運行的云提供商進行集成。例如,如果用戶正在 AWS 的 Kubernetes 中運行某個應用程序,并且希望通過服務(wù)訪問該應用程序,則云提供商將幫助自動創(chuàng)建 LoadBalancer 服務(wù),該服務(wù)將自動設(shè)置 Amazon Elastic Load Balancer 來將流量轉(zhuǎn)發(fā)給應用程序 pods。

可擴展性

Kubernetes 具有很好的可擴展性,開發(fā)人員對此非常滿意。內(nèi)置一些資源,例如 Pod,Deployment,StatefulSet,Secrets,ConfigMap 等。同時用戶和開發(fā)人員可以通過“自定義資源定義[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 

我們可以稍后使用以下內(nèi)容創(chuàng)建 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 可擴展性的另一種形式是開發(fā)人員編寫自己的 Operators[15] 的能力,Operator 是在 Kubernetes 集群中運行的,遵循 control loop pattern[16] 的特定進程。操作員允許用戶通過與 Kubernetes API 進行對話來自動管理 CRD(自定義資源定義)。

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

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

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

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

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

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

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

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

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

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

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

社區(qū)

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

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

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

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

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

未來

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

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


網(wǎng)站題目:為什么Kubernetes如此受歡迎?
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/cdosigg.html