初學者常見的7種Kubernetes錯誤
?Kubernetes 是業界最流行的用于容器編排的開源平臺,可以讓我們與容器相關的很多工作變得自動化。公司使用它來解決與部署、可伸縮性、測試、管理等相關的問題。然而,Kubernetes是復雜的,需要一個陡峭的學習曲線。在本文中,我們將介紹大多數公司都會遇到的一些常見的Kubernetes陷阱。這些是許多擁抱Kubernetes的公司在擴大業務規模時所面臨的問題。在討論這些問題的同時,我們還將強調如何避免或解決這些問題。最終,我們將討論如何在不面對 Kubernetes 復雜性的情況下最大限度地發揮其作用的最佳解決方案。
下面,讓我進入正題。
1.不正確使用Label和Selector
初學者經常犯的錯誤之一是在配置中不正確地使用標簽(Label)和選擇器(Selector)。標簽是與諸如 Pods、Services 等對象相關聯的鍵/值對。選擇器允許您識別用標簽標記的對象。不匹配的選擇器將部署資源置于不受支持的狀態,您可能會看到與不正確的標簽和選擇器相關的錯誤。下面的例子說明了這個概念。注意,標簽是區分大小寫的。確保在 YAML 文件中使用了正確的標簽和選擇器,并仔細檢查是否有拼寫錯誤。
2.忽視健康檢查
在 Kubernetes 部署服務時,健康檢查在維持服務方面發揮著至關重要的作用。在Kubernetes中,健康檢查的使用率很低。通過健康檢查,你要密切關注Pod及其容器的健康狀況。Kubernetes 有三種主要的健康檢查工具。Startup 探測確認是否在沒有問題的情況下啟動和創建了Pod。Liveliness 探測將告訴您應用程序是否處于活動狀態。Readness 探測確保應用程序能否成功接收請求。
3.一直使用默認名稱空間
名稱空間(namespace)允許您對不同的資源進行分組,例如部署(Deployment)和服務(Service)。當多個團隊在同一個產品或基于微服務的應用程序上工作時,名稱空間是必不可少的。在開發環境中,使用默認名稱空間可能不是問題,但是如果在執行命令時不提及名稱空間,則可能會導致生產問題。請記住,如果您沒有提到任何名稱空間,您將不會看到錯誤,但是服務或部署將應用于默認名稱空間,而不是您想要的名稱空間。請看下面的例子。
4.使用“latest”標簽
許多用戶認為“ latest”標簽(Tag)總是指向鏡像的最新推送版本,但事實并非如此。“latest”標記并不總是部署您認為是最新的版本。在部署(Deployment)上使用的“latest”,您將無法回滾到之前的版本。
使用顯式版本標記將確保始終部署正確的版本,同時允許您的團隊使用以前已知版本的標記來控制回滾。
5.缺乏監測和日志
建立 Kubernetes 的一個陷阱是忽視適當的監測和日志。您應該設置一個日志聚合服務器和監視系統來監視您的應用程序。這不僅可以幫助您看到系統中的各種瓶頸,還可以幫助您測量和優化 Kubernetes 集群的性能。健全的監控系統包括各種資源指標的警報和通知。正如前面提到的,Kubernetes 是復雜的,因此您需要適當的監視和日志記錄來排除故障并解決不同的問題。
采用一個健全的監測系統對于順利運作和積極管理您的Kubernetes系統是必不可少的。由于原生監視工具缺乏許多有用的特性,如日志聚合、跟蹤審計事件和警報通知,因此最好使用第三方工具進行日志記錄和監視。
6.Pod與Service端口映射錯誤
如果您看到“連接被拒絕”或“容器沒有回復”的錯誤,那么這可能是映射到服務(Service)的容器端口不正確的問題。這是因為服務中的兩個參數彼此相似。一個是“ Targetport”,另一個是“port”,很容易弄混它們而導致這個問題。
請注意,您的服務(Service)的“targetPort”是 Pods 中的端口,服務轉發流量的目標端口。下面的圖片說明了這一點。而“port”參數指的是服務自己向訪問端公開的端口。
7.Crashloopbackoff 錯誤
Kubernetes 另一個經常出現的錯誤是Crashloopbackoff。這種情況發生在Pod運行時,但其中一個容器由于終止運行而不斷重新啟動。因此,容器不斷陷入啟動-崩潰-啟動-崩潰的循環。
出現此錯誤的原因有很多。可能是配置文件中的簡單輸入錯誤、內存不足、配置不正確等等。您需要檢查Pod描述和日志,以排除故障并修復根本原因。?