您好,登錄后才能下訂單哦!
這篇文章給大家介紹Kubernetes中如何自動檢測和處理棄用的API,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
隨著Kubernetes 1.16可用一段時間,并開始在許多托管Kubernetes平臺上緩慢推出,你可能聽說過API棄用(deprecation)。雖然處理起來相當簡單,但是如果無人參與,這種更改可能會嚴重地中斷你的服務。
API棄用是什么?
隨著Kubernetes的特性集的發展,API也必須發展以支持這種變化。有一些規則旨在保證兼容性和穩定性。這種情況不會在每個版本中都發生,但最終,你將不得不使用新的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中使用其中之一創建資源,操作將會失敗。
如何檢查我是否受到影響?
你可以手動遍歷所有清單,但這可能相當耗時。如果有多個團隊部署到集群中,或者在一個地方沒有當前的所有清單,那么很容易丟失一些清單,并且可能非常不實際。這就是kubent(Kube-No-Trouble)來幫忙的地方。
問題是什么?
用于創建給定資源的API版本的信息通常是不容易找到,因為資源總是在內部轉換為首選存儲版本并存儲在首選存儲版本中。然而。如果你使用kubectl或Helm來部署資源,原始清單也存儲在集群中,我們可以利用它。如果是kubectl,則形式為kubectl.kubernetes.io/last-applied-configuration注釋;如果是Helm,則形式為ConfigMap或Secret。
如何解決棄用產生的問題
最簡單的方法是安裝:
sh -c "$(curl -sSL 'https://git.io/install-kubent')"
這將把kubent的最新版本安裝到/usr/local/bin中。
(如果你和我一樣,不相信別人在博客文章中發布的隨機腳本,請下載針對你的平臺的最新版本,然后解壓縮到你喜歡的任何地方。)
配置kubectl的當前上下文,以指向你想要檢查和運行kubent工具的集群:
圖1:kubent運行的示例輸出
Kubent將連接到你的集群,檢索所有可能受到影響的資源,掃描并打印那些受到影響的資源的摘要。
你還可以使用-f json標記來獲得JSON格式的輸出,這更適合讓你將其集成到你的CI/CD流水線中或進一步處理結果。關于可用配置選項的更多細節在doitintl/kube-no-trouble倉庫的README文件中描述。
我應該如何處理檢測到的資源?
在某些情況下,這就像改變manifest中的apiVersion一樣簡單,但在其他情況下,結構可能已經改變,需要調整。另外,要注意,版本之間有很多默認值會發生變化(關于這方面的好文章是David Schweikert的Kubernetes 1.16 API deprecations and changed defaults),因此,僅更改apiVersion并應用相同的清單,就會得到不同的結果。例如,StatefulSet的updateStrategy.type從OnDelete更改為RollingUpdate,導致了非常不同的行為。
https://medium.com/google-cloud/kubernetes-1-16-api-deprecations-and-changed-defaults-e53ccc5c73d5
以前使用的kubectl convert命令現已棄用,可能不能根據前面提到的默認值正確地轉換資源。
最好的方法可能是簡單地應用資源(如果你使用kubent檢測到它們,那么你已經有了這些資源)并從API檢索新版本。這將確保資源被正確地轉換為新版本。你可能已經注意到,kubectl在某種程度上不確定地返回的版本。要請求一個特定的API版本,使用完整的形式:
kubectl get ingress.v1beta1.extensions -o yaml
關于Kubernetes中如何自動檢測和處理棄用的API就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。