從 Docker 遷移到 Docker Swarm,再到 Kubernetes,然后處理了多年來的所有各種 API 更改之后,我非常樂意發現部署中出現的問題和把問題進行修復,

我今天分享下我認為最有用的5條故障排除技巧,以及一些其他的使用技巧,
kubectl –“瑞士軍刀”
kubectl 就是我們的瑞士軍刀,我們經常在出現問題的時候使用他們,在出現問題如何使用他們很重要,讓我們從5個“實際案例”開始,看出現問題時如何使用它們,
情況將是:我的YAML已被接受,但我的服務未啟動且已啟動,但無法正常作業,
1.kubectl get deployment/pods
這個命令如此重要的原因是它無需顯示大量內容即可顯示很有用的資訊,
如果要為作業負載使用部署,則有兩種選擇:
kubectl get deploy kubectl get deploy -n 名稱空間kubectl get deploy –all-namespaces [或“ -A”]
理想情況下,您希望看到的是1/1或等值的2/2,以此類推,這表明您的部署已被接受,并已嘗試進行部署,
接下來,您可能需要查看kubectl get pod,以查看部署的后備Pod是否正確啟動,
2. kubectl get events
我感到驚訝的是,我不得不經常向與Kubernetes有問題的人們解釋這個小技巧,此命令將列印出給定名稱空間中的事件,非常適合查找關鍵問題,例如崩潰的pod或無法pull容器鏡像,
Kubernetes中的日志是“未排序的”,因此,您將需要添加以下內容,這些內容取自OpenFaaS檔案,
$ kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get事件的另一個接近的命令是是kubectl describe,就像get deploy / pod一樣,它與物件的名稱一起作業:
kubectl describe deploy/figlet -n openfaas
您會在這里獲得非常詳細的資訊,您可以描述大多數事情,包括節點,這些節點將顯示由于資源限制或其他問題而無法啟動 Pod,
3. kubectl logs
這個命令肯定經常大家經常使用,但很多人使用了錯誤的方式,
如果您進行了部署,比方說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,可以幫助您匹配模式并節省一些鍵入操作,但我發現它們會分散您的注意力,
4.kubectl get -o yaml
當您開始使用由另一個專案或諸如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,使用這個簡化編輯器,
5. kubectl scale 您打開和關閉它了嗎?
Kubectl scale可用于將Deployment及其Pod縮小為零個副本,實際上殺死了所有副本,當您將其縮放回1/1時,將創建一個新的Pod,重新啟動您的應用程式,
語法非常簡單,您可以重新啟動代碼并再次進行測驗,
kubectl scale deploy/nginx-1 --replicas=0 kubectl scale deploy/nginx-1 --replicas=1
6. Port forwarding
我們需要這個技巧, 通過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 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/254281.html
標籤:其他
上一篇:Linux 環境變數配置
