你需要知道的有關Kubernetes 1.23版的更新都在這里
譯文【51CTO.com快譯】近期即將發布的Kubernetes圣誕版共帶有45項針對成熟性、安全性、以及可擴展性方面的增強功能。在本文中,我將重點關注Kubernetes API、容器與基礎設施、存儲、網絡和安全性等方面的關鍵性更新。
Kubernetes API
讓我們首先來看看具有可擴展性的Kubernetes API。api-machinery、CLI和autoscaling SIG這三大變更將作為1.23版的一部分被發布。
Kubectl事件命令
一直以來,您可能會受到kubectl get命令的選項和數據收集方法的限制。對此,1.23的alpha版將首發一個新的命令--kubectl event。使用kubectl的get events,您可以更便捷地觀察到集群的整體狀態,并解決相關問題。具體而言,其主要特點包括:
- 能夠查看與特定資源相關的所有事件
- 監控集群中的特定事件
- 按照事件的狀態或特定命名空間中的類型,去過濾事件
除了上述特點,您也可以通過查看設計文檔,以了解在后續版本中即將推出的新功能。值得一提的是,您可以在安裝了新的kubectl版本后,立即開始使用kubectl events命令。
將HPA API升級為一般可用性
Horizontal Pod Autoscaler(HPA)是Kubernetes的核心組件,可以根據各項指標自動擴展Pod的數量。HPA可以擴展或縮減的資源包括:副本集、部署、以及CPU利用率等眾所周知的指標狀態集。自2015年以來,它一直是Kubernetes API中的一部分。如今,它最終走向了一般可用性(General Availability,GA)。
如果您已經在客戶端和控制器中使用到了HPA,那么您可以直接使用v2,而非v2beta1。從這次發布,我們可以看到HPA已經作為了Kubernetes API的核心組件,并為加入最終產品做好了準備。因此,您可以放心地使用HPA了。
CRD驗證表達式語言
作為一個強大的抽象層,Custom Resource Definition(CRD)擴展了Kubernetes,并使其與所有可自定義的資源協同工作。不過,如果用戶定義了新的自定義資源、及其相關規范,那么使用Webhooks、控制器和客戶端工具進行驗證時,則可能比較繁瑣。不過慶幸的是,我們可以將諸如Common Expression Language之類的內聯表達式語言,集成到CRD中進行驗證。
在1.23版本中,作為alpha功能被提供的驗證規則,可以方便您添加x-kubernetes-validation-rules。您可以在Kubernetes文檔中查看到如下類似的示例:
- ...
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- x-kubernetes-validation-rules:
- - rule: "self.minReplicas <= self.replicas"
- message: "replicas should be greater than or equal to minReplicas."
- - rule: "self.replicas <= self.maxReplicas"
- message: "replicas should be smaller than or equal to maxReplicas."
- properties:
- ...
- minReplicas:
- type: integer
- replicas:
- type: integer
- maxReplicas:
- type: integer
- required:
- - minReplicas
- - replicas
- - maxReplicas
假設您要創建如下違反了第二條規則的自定義資源實例:
- apiVersion: "stable.example.com/v1"
- kind: CronTab
- metadata:
- name: my-new-cron-object
- spec:
- minReplicas: 0
- replicas: 20
- maxReplicas: 10
那么Kubernetes API將會以如下錯誤消息作為響應:
- The CronTab "my-new-cron-object" is invalid:
- * spec: Invalid value: map[string]interface {}{"maxReplicas":10, "minReplicas":0, "replicas":20}: replicas should be smaller than or equal to maxReplicas.
可見,如果您在集群中準備使用CRD,那么就必須在Open API架構和控制器中使用相應的驗證機制。而在這次新的版本中,您可以將它們遷移到x-kubernetes-validation-rules,讓Kubernetes API為您完成繁瑣的工作。
容器與基礎設施
在新的版本中,我發現了Windows和node SIG兩個值得注意的功能。它們屬于臨時容器和Windows特權容器。
臨時容器
臨時容器可以起到觀察其他Pod的狀態、故障排除和調試等作用。這個新的功能還附帶了一個CLI命令。用戶可以使用kubectl debug,來輕松地進行排障。其實,該命令運行在pod的一個容器中,而kubectl exec命令則在該容器中運行一個進程。
使用1.23版本,您將能夠在PodSpec.EphemeralContainer下添加臨時容器,作為pod規范的一部分。雖然與容器規范類似,但是它們并不涉及到各種資源請求或端口,畢竟它們只是臨時被添加到pod中的。例如,您將能夠為my-service pod添加一個Debian的容器,并以交互的方式連接,從而讓用戶進行實時調試。具體請見如下代碼段:
- $ kubectl debug -it -m debian my-service -- bash
- root@debug:~# ps x
- PID TTY STAT TIME COMMAND
- 1 ? Ss 0:00 /pause
- 11 ? Ss 0:00 bash
- 127 ? R+ 0:00 ps x
其實,臨時容器在1.22版本中已經處于alpha版狀態了。這次,它們將在1.23版本中被升級為beta版。如果您尚未試用它的話,我建議您最好創建各種調試容器的鏡像,并在自己的工具箱中包含kubectl debug命令。
Windows特權容器和主機網絡模式
作為一種強大的容器實例,特權容器可以訪問和使用主機資源。這和直接運行在主機上的進程非常類似。在Linux容器被廣泛使用時,它們雖然在某種程度上構成了安全威脅,但是有利于管理主機的實例。
隨著1.23版本的發布,Windows實例的特權容器和主機網絡模式將升級為beta版。如果您的集群中有Windows節點,或計劃在將來包含這些節點的話,那么請查看功能性和GA計劃的設計文檔。
貯存
在1.23版本中,存儲SIG變化主要體現在卷掛載期間,卷的所有權更改上。
目前,在卷綁定之前,卷的權限會遞歸地更新為pod規范中的fsGroup值。顯然,當卷的體積過大時,所有權的更改可能會導致在創建Pod期間的等待時間過長。因此,我們往往需要添加一個新的字段--pod.Spec.SecurityContext.FSGroupChangePolicy,來允許用戶指定該如何操控權限和所有權的更改。
而在1.23版中,此功能已升級到了GA,您可以使用以下兩個選項去指定相關策略:
- Always:始終更改各種權限和所有權,以匹配fsGroup字段。
- OnRootMismatch:僅當頂級目錄與fsGroup字段不匹配時,才更改相應的權限和所有權。
如果您正在使用諸如數據庫等,對于權限更改敏感的應用,那么請檢查新的字段,并將其包含在您的pod規范中,以避免在pod創建的過程中,等待過長的時間。
聯網
自從IPv6在Kubernetes 1.9版中作為alpha功能被添加以來,它已是用戶對Kubernetes團隊期待已久的功能。在最新版本中,雙棧式的IPv4/IPv6網絡終于具有了一般可用性。
該功能包括了對于各種Pod和服務的多個IPv4/IPv6地址的感知。同時,它還支持原生IPv4到IPv4的通信,以及與集群之間IPv6到IPv6的通信。
盡管Kubernetes提供了雙棧式網絡,但您可能會受到底層基礎架構和云提供商的能力的限制。由于節點需要具有可路由的IPv4/IPv6網絡接口,而pod需要具有雙棧式網絡連接,因此您還需要一個能夠感知雙棧式網絡的插件,來為pod和服務分配IP地址。目前,諸如kubenet之類的CNI插件已經可以支持雙棧式網絡了,并且Kubeadm和kind也正在逐漸增加對于此類生態系統的支持。
安全性
1.23版本在auth SIG方面的增強主要體現在,將Pod安全標準升級到了beta版。
在之前的版本中,Pod安全標準是作為Alpha功能,用來替換PodSecurityPolicy的。在命名空間和標簽的幫助下,他們創建了一種限制pod權限的方法,來執行相應的策略。在將其包含到部署之中后,您便可以提高pod和集群的安全性了。
小結
在2021年的最后一個版本中,Kubernetes帶來了更具可擴展性和可靠性的API和基礎設施的增強功能。此外,在存儲、網絡和安全性方面的改進,也使得Kubernetes成為了真正的、面向未來的、業界領先的容器編排平臺。
最后,請通過Kubernetes的博客和其發行說明,來進一步了解更多最新的增強功能吧!
原文標題:Kubernetes Version 1.23 Is Out: Everything You Should Know,作者: Amir Kaushansky
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】