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