一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

服務器資訊|IT/互聯網|云計算|區塊鏈|軟件資訊|操作系統|手機數碼|百科知識|免費資源|頭條新聞|

服務器之家 - 新聞資訊 - 云計算 - 為什么Kubernetes這么受歡迎?

為什么Kubernetes這么受歡迎?

2020-06-16 23:24Dockone.io馮旭松編譯 云計算

在本文發表時,Kubernetes大約已經有6年的歷史,在過去的兩年里,它的受歡迎程度不斷上升,成為最受歡迎的平臺之一。今年,它成為第三大最受歡迎平臺。如果你還沒聽說過Kubernetes,它是一個允許你運行和協調容器工作負載的平

在本文發表時,Kubernetes大約已經有6年的歷史,在過去的兩年里,它的受歡迎程度不斷上升,成為最受歡迎的平臺之一。今年,它成為第三大最受歡迎平臺。如果你還沒聽說過Kubernetes,它是一個允許你運行和協調容器工作負載的平臺。

為什么Kubernetes這么受歡迎?

容器最開始是一種Linux內核進程隔離構造,包含2007年的cgroups和2002年的namespaces。自LXC在2008年面世后,容器變得更為重要,谷歌也開發了自己內部的“在容器中運行一切”的機制,名為Borg。快進到2013年,Docker發布,徹底普及了容器。當時Mesos是編排容器的主要工具,然而它并沒有被廣泛采用。Kubernetes在2015年發布,并迅速成為容器編排的事實標準。

為了了解Kubernetes的流行度,我們來思考一些問題。開發人員最后一次就部署生產應用程序的方式達成一致是什么時候?你知道有多少開發者是按開箱即用的方式運行工具的?如今有多少云操作工程師不了解應用程序的工作原理?我們將在本文中探討答案。

基礎設施即YAML

從Puppet和Chef的世界來看,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或SRE無需使用Python、Ruby或JavaScript等編程語言編寫代碼,即可更輕松且充分表達其工作負載。

將基礎設施作為數據的其他好處包括:

GitOps或Git操作版本控制。通過這種方法,你可以將所有的Kubernetes YAML文件都保存在Git倉庫下,這樣你就可以精確地知道什么時候進行了更改,誰進行了更改,以及到底更改了什么。這使得整個組織更加透明,避免了成員需要到哪里去尋找所需內容的歧義,提高了效率。同時,只需合并一個拉取請求就可以更容易地自動對Kubernetes資源進行更改。

可伸縮性。將資源定義為YAML使群集操作員能夠非常輕松地更改Kubernetes資源中的一個或兩個數字來更改縮放行為。Kubernetes有Pod水平自動縮放控制器來幫助你確定一個特定部署需要擁有的最小和最大的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中部署了什么以及如何部署的好方法。例如,在安全性方面,其中一個主要關注點是工作負載是否以非root用戶身份運行。我們可以利用conftest這樣的工具,一個YAML/JSON驗證器,加上Open Policy Agent這個策略驗證器,來檢查你的工作負載的SecurityContext是否允許容器以root身份運行。為此,用戶可以使用一個簡單的OPA rego策略表示,例如:

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

云提供商集成。科技行業的主要趨勢之一是在公共云提供商中運行工作負載。在云提供商組件的幫助下,Kubernetes允許每個集群與它所運行的云提供商進行集成。例如,如果用戶在AWS中的Kubernetes中運行應用程序,并希望該應用程序可以通過Service訪問,云提供商可幫助自動創建一個LoadBalancer服務,該服務將自動配置一個Amazon Elastic Load Balancer,以將流量轉發到應用程序Pod中。

擴展

Kubernetes的可擴展性很強,開發者很喜歡這一點。現有的資源有例如Pods、Deployments、StatefulSets、Secrets、ConfigMaps等。但是,用戶和開發者可以通過自定義資源定義的形式添加更多的資源。例如如果我們想定義一個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可擴展性的另一種形式是它能夠讓開發人員編寫自己的Operator,Operator是運行在Kubernetes集群中的特定進程,遵循控制循環模式。Operator允許用戶通過與Kubernetes API通信自動管理CRD(自定義資源定義)。

社區有一些工具允許開發者創建自己的Operator。其中一個工具是Operator Framework及其Operator SDK。SDK為開發者提供了一個框架,以便快速開始創建Operator。例如,你可以使用它的命令行用這樣的方法開始入門:

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

這將為你的Operator創建整個模版,包括YAML文件和Golang代碼:

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

然后你可以這樣添加APIs和控制器:

  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  

如果開發者需要有更多的控制權,他們可以修改Golang文件中的模板代碼。例如,要修改控制器的具體細節,他們可以對controller.go文件進行修改。

另一個項目,KUDO,允許你只使用聲明性的YAML文件來創建Operator。例如,一個Apache Kafka的Operator將像這樣定義,它允許用戶通過幾個命令在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每隔三四個月就會有一個重要的版本,也就是說每年都會有三四個重要的版本。推出新功能的數量并沒有放緩,在上一個版本中,有超過30個不同的新增功能和變化就是證明。此外,正如Kubernetes項目GitHub活動所顯示的那樣,即使在這些困難時期,貢獻也沒有放緩的跡象。

新功能讓集群操作人員在運行各種不同的工作負載時更加靈活。軟件工程師也喜歡擁有更多的控制權,可以直接將他們的應用程序部署到生產環境中。

社區

Kubernetes受歡迎的另一大方面是其強大的社區。首先,Kubernetes在2015年打出1.0版本時,就被捐給了一個廠商中立的機構:云原生計算基金會。

隨著項目的推進,還有大量針對Kubernetes的不同領域的社區SIG(特殊興趣小組),他們不斷增加新的功能,使其更加用戶友好。

云原生基金會還組織了CloudNativeCon/KubeCon,截至目前,該活動是世界上有史以來最大的開源活動。該活動通常每年最多舉辦三次,聚集了成千上萬的技術專家和專業人士,他們希望改進Kubernetes及其生態系統,并利用每三個月發布的一些新功能。

此外,云原生基金會還有一個技術監督委員會,該委員會與其SIG一起研究基金會在云原生生態系統中的新項目和現有項目。大多數項目都有助于提升Kubernetes的價值主張。

最后,我相信,如果沒有社區有意識的努力,互相彼此并歡迎任何新來者,Kubernetes就不會取得現在這樣的成功。

未來

開發者在未來面臨的主要挑戰之一是如何更加關注代碼的細節,而非代碼運行的基礎設施。為此,無服務器正在成為解決這一挑戰的領先架構范例之一。目前已經有一些非常先進的框架,如Knative和OpenFaas,它們使用Kubernetes將基礎設施從開發者中抽象出來。

在本文中,我們簡單地介紹了Kubernetes,但這僅是冰山一角,用戶還可以利用更多的資源、功能和配置。我們將繼續看到新的開源項目和技術來增強和發展Kubernetes,正如我們提到的,貢獻和社區占據了很大地位。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 60岁妇女毛片免费观看 | jk制服白丝超短裙流白浆 | 免费xxxxx大片在线观看影视 | 亚洲精品www久久久久久久软件 | 91传媒制片厂制作传媒破解版 | jj视频免费看 | 91av免费| 91麻豆国产福利精品 | 高跟丝袜麻麻求我调教 | 男人狂擦女人的下面视频 | 国产1区2区三区不卡 | chinaspanking调教| chinese国产老太性 | 日本在线精品视频 | 好姑娘在线视频观看免费 | 免费看隐私男生网站 | 免费国产成人高清视频网站 | 男人v天堂 | 国产玖玖在线观看 | 免费看片aⅴ免费大片 | 亚州第一页 | 5x社区在线观看直接进入 | 国产精品永久免费视频 | 亚洲人成伊人成综合网久久 | 2015台湾永久免费平台 | 青草草在线| tube8最近日本护士 | 天天色一色| 四虎2023| aaa级黄色片 | 亚洲日本中文字幕天堂网 | 欧美8x8x| 精品一区二区三区在线视频观看 | 国产在线伊人 | 扒开女人屁股眼看个够 | 天天摸天天操天天爽 | 成人在线一区二区三区 | 国产卡一卡二卡三乱码手机 | 日本aa大片在线播放免费看 | 日本高清在线看免费观看 | a∨79成人网 |