從 Docker 遷移到 Docker Swarm,再到 Kubernetes,而後處理了多年來的全部各類 API 更改以後,我很是樂意發現部署中出現的問題和把問題進行修復。
我今天分享下我認爲最有用的5條故障排除技巧,以及一些其餘的使用技巧。linux
kubectl 就是咱們的瑞士軍刀,咱們常常在出現問題的時候使用他們,在出現問題如何使用他們很重要,讓咱們從5個「實際案例」開始,看出現問題時如何使用它們。nginx
狀況將是:個人YAML已被接受,但個人服務未啓動且已啓動,但沒法正常工做。vim
這個命令如此重要的緣由是它無需顯示大量內容便可顯示頗有用的信息。app
若是要爲工做負載使用部署,則有兩種選擇:編輯器
kubectl get deploy kubectl get deploy -n 名稱空間kubectl get deploy –all-namespaces [或「 -A」]
理想狀況下,您但願看到的是1/1或等值的2/2,以此類推。這代表您的部署已被接受,並已嘗試進行部署。工具
接下來,您可能須要查看kubectl get pod,以查看部署的後備Pod是否正確啓動。學習
我感到驚訝的是,我不得不常常向與Kubernetes有問題的人們解釋這個小技巧。此命令將打印出給定名稱空間中的事件,很是適合查找關鍵問題,例如崩潰的pod或沒法pull容器鏡像。測試
Kubernetes中的日誌是「未排序的」,所以,您將須要添加如下內容,這些內容取自OpenFaaS文檔。spa
$ kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get事件的另外一個接近的命令是是kubectl describe,就像get deploy / pod同樣,它與對象的名稱一塊兒工做:.net
kubectl describe deploy/figlet -n openfaas
您會在這裏得到很是詳細的信息。您能夠描述大多數事情,包括節點,這些節點將顯示因爲資源限制或其餘問題而沒法啓動 Pod。
這個命令確定常常你們常用,但不少人使用了錯誤的方式。
若是您進行了部署,比方說cert-manager命名空間中的cert-manager,那麼不少人認爲他們首先必須找到Pod的長(惟一)名稱並將其用做參數。不對。
kubectl logs deploy/cert-manager -n cert-manager
要跟蹤日誌,請添加-f
kubectl logs deploy/cert-manager -n cert-manager -f
您能夠將全部三個結合起來。
若是您的 Deployment 或 Pod 有任何標籤,則可使用 -l app = name 或任何其餘標籤集來附加到一個或多個匹配Pod的日誌中。
kubectl logs -l app=nginx
有一些工具,例如 stern 和 kail,能夠幫助您匹配模式並節省一些鍵入操做,但我發現它們會分散您的注意力。
當您開始使用由另外一個項目或諸如Helm之類的其餘工具生成的YAML時,您將很快須要它。在生產中檢查鏡像的版本或您在某處設置的註釋也頗有用。
kubectl run nginx-1 --image=nginx --port=80 --restart=Always
輸出yaml
kubectl get deploy/nginx-1 -o yaml
如今咱們知道了。並且,咱們能夠添加–export並將YAML保存在本地以進行編輯並再次應用。
實時編輯YAML的另外一個選項是kubectl edit,若是您對vim感到困惑,不知道如何使用,請在命令前加上VISUAL = nano,使用這個簡化編輯器。
Kubectl scale可用於將Deployment及其Pod縮小爲零個副本,實際上殺死了全部副本。當您將其縮放回1/1時,將建立一個新的Pod,從新啓動您的應用程序。
語法很是簡單,您能夠從新啓動代碼並再次進行測試。
kubectl scale deploy/nginx-1 --replicas=0 kubectl scale deploy/nginx-1 --replicas=1
咱們須要這個技巧, 經過kubectl進行的端口轉發使咱們能夠在咱們本身計算機上的本地或遠程羣集上公開一項服務,以便在任何已配置的端口上訪問它,而無需在Internet上公開它。
如下是在本地訪問Nginx部署的示例:
kubectl port-forward deploy/nginx-1 8080:80
有人認爲這僅適用於部署或Pod,這是錯誤的。服務間是公平的,一般是轉發的選擇,由於它們將模擬生產集羣中的配置。
若是您確實想在Internet上公開服務,一般會使用LoadBalancer服務,或運行kubectl暴露:
kubectl expose deployment nginx-1 --port=80 --type=LoadBalancer
技巧說完了,能夠如今嘗試一下,我但願您發現這6條命令和技巧有用, 如今,您能夠在真實的集羣上對其進行測試了。
以上就是良許教程網爲各位朋友分享的Kubernetes上對應用程序進行故障排除的技巧。
本文由博客一文多發平臺 OpenWrite 發佈!