您好,登錄后才能下訂單哦!
這篇文章主要講解了“為什么Kubernetes這么受歡迎”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“為什么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 就不會取得成功。
感謝各位的閱讀,以上就是“為什么Kubernetes這么受歡迎”的內容了,經過本文的學習后,相信大家對為什么Kubernetes這么受歡迎這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。