溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes中如何自動檢測和處理棄用的API

發(fā)布時間:2021-12-21 17:53:06 來源:億速云 閱讀:127 作者:柒染 欄目:云計算

這篇文章給大家介紹Kubernetes中如何自動檢測和處理棄用的API,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

隨著Kubernetes 1.16可用一段時間,并開始在許多托管Kubernetes平臺上緩慢推出,你可能聽說過API棄用(deprecation)。雖然處理起來相當簡單,但是如果無人參與,這種更改可能會嚴重地中斷你的服務(wù)。

API棄用是什么?

隨著Kubernetes的特性集的發(fā)展,API也必須發(fā)展以支持這種變化。有一些規(guī)則旨在保證兼容性和穩(wěn)定性。這種情況不會在每個版本中都發(fā)生,但最終,你將不得不使用新的API版本和格式,因為舊的API將不再受支持。

為什么這對于1.16版本如此重要?

在最近幾個K8s版本中保留了一些棄用的API,最終在Kubernetes 1.16版本中被完全刪除。即以下API組和版本:

  • Deployment — extensions/v1beta1, apps/v1beta1 and apps/v1beta2

  • NetworkPolicy — extensions/v1beta1

  • PodSecurityPolicy — extensions/v1beta1

  • DaemonSet — extensions/v1beta1 and apps/v1beta2

  • StatefulSet — apps/v1beta1 and apps/v1beta2

  • ReplicaSet — extensions/v1beta1, apps/v1beta1 and apps/v1beta2

如果嘗試在1.16中使用其中之一創(chuàng)建資源,操作將會失敗。

如何檢查我是否受到影響?

你可以手動遍歷所有清單,但這可能相當耗時。如果有多個團隊部署到集群中,或者在一個地方?jīng)]有當前的所有清單,那么很容易丟失一些清單,并且可能非常不實際。這就是kubent(Kube-No-Trouble)來幫忙的地方。

問題是什么?

用于創(chuàng)建給定資源的API版本的信息通常是不容易找到,因為資源總是在內(nèi)部轉(zhuǎn)換為首選存儲版本并存儲在首選存儲版本中。然而。如果你使用kubectl或Helm來部署資源,原始清單也存儲在集群中,我們可以利用它。如果是kubectl,則形式為kubectl.kubernetes.io/last-applied-configuration注釋;如果是Helm,則形式為ConfigMap或Secret。

如何解決棄用產(chǎn)生的問題

最簡單的方法是安裝:

sh -c "$(curl -sSL 'https://git.io/install-kubent')"

這將把kubent的最新版本安裝到/usr/local/bin中。

(如果你和我一樣,不相信別人在博客文章中發(fā)布的隨機腳本,請下載針對你的平臺的最新版本,然后解壓縮到你喜歡的任何地方。)

配置kubectl的當前上下文,以指向你想要檢查和運行kubent工具的集群:

Kubernetes中如何自動檢測和處理棄用的API

圖1:kubent運行的示例輸出

Kubent將連接到你的集群,檢索所有可能受到影響的資源,掃描并打印那些受到影響的資源的摘要。

你還可以使用-f json標記來獲得JSON格式的輸出,這更適合讓你將其集成到你的CI/CD流水線中或進一步處理結(jié)果。關(guān)于可用配置選項的更多細節(jié)在doitintl/kube-no-trouble倉庫的README文件中描述。

我應(yīng)該如何處理檢測到的資源?

在某些情況下,這就像改變manifest中的apiVersion一樣簡單,但在其他情況下,結(jié)構(gòu)可能已經(jīng)改變,需要調(diào)整。另外,要注意,版本之間有很多默認值會發(fā)生變化(關(guān)于這方面的好文章是David Schweikert的Kubernetes 1.16 API deprecations and changed defaults),因此,僅更改apiVersion并應(yīng)用相同的清單,就會得到不同的結(jié)果。例如,StatefulSet的updateStrategy.type從OnDelete更改為RollingUpdate,導(dǎo)致了非常不同的行為。

https://medium.com/google-cloud/kubernetes-1-16-api-deprecations-and-changed-defaults-e53ccc5c73d5

以前使用的kubectl convert命令現(xiàn)已棄用,可能不能根據(jù)前面提到的默認值正確地轉(zhuǎn)換資源。

最好的方法可能是簡單地應(yīng)用資源(如果你使用kubent檢測到它們,那么你已經(jīng)有了這些資源)并從API檢索新版本。這將確保資源被正確地轉(zhuǎn)換為新版本。你可能已經(jīng)注意到,kubectl在某種程度上不確定地返回的版本。要請求一個特定的API版本,使用完整的形式:

kubectl get ingress.v1beta1.extensions -o yaml

關(guān)于Kubernetes中如何自動檢測和處理棄用的API就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI