寫在前面
- 博文內(nèi)容為節(jié)譯整理
- 文中提到的工具大部分是商業(yè)軟件,不是開源的,作為了解
- 理解不足小伙伴幫忙指正
對每個人而言,真正的職責(zé)只有一個:找到自我。然后在心中堅守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾理想的懦弱回歸,是隨波逐流,是對內(nèi)心的恐懼 ——赫爾曼·黑塞《德米安》
Kubernetes 故障排除方法論?
Kubernetes 故障排除是識別、診斷和解決
Kubernetes 集群、節(jié)點、Pod 或容器中問題的過程。
更廣泛地說,Kubernetes 故障排除還包括有效的持續(xù)故障管理
,并采取措施防止 Kubernetes 組件出現(xiàn)問題。
Kubernetes 故障排除的三大支柱,在 Kubernetes 集群中進(jìn)行有效的故障排除有三個方面:
- 了解問題
- 管理和修復(fù)問題
- 防止問題再次發(fā)生
了解問題
在 Kubernetes 環(huán)境中,很難理解發(fā)生了什么并確定問題的根本原因。這通常涉及:
- 查看最近對受影響的集群、Pod 或節(jié)點所做的更改,以查看導(dǎo)致故障的原因。
- 分析運行故障組件的虛擬機或裸機的 YAML 配置、GitHub 存儲庫和日志。
- 查看 Kubernetes 事件和指標(biāo),如磁盤壓力、內(nèi)存壓力和利用率。在成熟的環(huán)境中,您應(yīng)該有權(quán)訪問儀表板,這些儀表板顯示一段時間內(nèi)集群、節(jié)點、Pod 和容器的重要指標(biāo)。
- 比較行為相同的類似組件,并分析組件之間的依賴關(guān)系,以查看它們是否與故障相關(guān)。
為了實現(xiàn)上述目標(biāo),團(tuán)隊通常使用以下技術(shù):
- 監(jiān)控工具:
Datadog,Dynatrace,Grafana,New Relic
- 可觀測性工具:
Lightstep, Honeycomb
- 實時調(diào)試工具:
OzCode,Rookout
- 日志記錄工具:
Splunk,LogDNA,Logz.io
管理和修復(fù)問題
在微服務(wù)體系結(jié)構(gòu)中,通常每個組件都由單獨的團(tuán)隊開發(fā)和管理。由于生產(chǎn)事件通常涉及多個組件,因此協(xié)作對于快速修復(fù)問題至關(guān)重要。
了解問題后,有三種方法可以修復(fù)它:
-
臨時解決方案
: 基于處理受影響組件的團(tuán)隊的部落知識。通常,構(gòu)建組件的工程師對如何調(diào)試和解決它有不成文的知識。 -
手動運行手冊
: 一個清晰的、記錄在案的過程,顯示如何解決每種類型的事件。擁有運行手冊意味著團(tuán)隊的每個成員都可以快速解決問題。 -
自動化運行手冊
: 一種自動化過程,可以作為腳本、基礎(chǔ)結(jié)構(gòu)即代碼 (IaC) 模板或 Kubernetes 運算符實現(xiàn),并在檢測到問題時自動觸發(fā)。自動響應(yīng)所有常見事件可能具有挑戰(zhàn)性,但它可能非常有益,可以減少停機時間并消除人為錯誤。
為了實現(xiàn)上述目標(biāo),團(tuán)隊通常使用以下技術(shù):
- 事件管理:
PagerDuty, Kintaba
- 項目管理:
Jira, Monday, Trello
- 基礎(chǔ)設(shè)施即代碼:
Amazon CloudFormation、Terraform
預(yù)防
成功的團(tuán)隊將預(yù)防作為重中之重。隨著時間的推移,這將減少用于識別和解決新問題的時間。防止 Kubernetes 中的生產(chǎn)問題涉及:
- 在每次事件發(fā)生后
創(chuàng)建策略、規(guī)則和行動手冊
,以確保有效補救 - 調(diào)查是否可以
自動響應(yīng)問題
,以及如何自動執(zhí)行 - 定義如何在
下次快速識別問題并提供相關(guān)數(shù)據(jù)
- 例如通過檢測相關(guān)組件 - 確保將問題上報給適當(dāng)?shù)膱F(tuán)隊,并且這些團(tuán)隊可以有效地溝通以解決問題
為了實現(xiàn)上述目標(biāo),團(tuán)隊通常使用以下技術(shù):
- 混沌工程:
Gremlin, Chaos Monkey, ChaosIQ.
Gremlin
是一個混沌工程平臺,它提供了多種故障注入工具,包括網(wǎng)絡(luò)故障、主機故障、應(yīng)用程序故障等,可以幫助用戶測試系統(tǒng)的彈性和可靠性。
Chaos Monkey
是 Netflix 公司開發(fā)的一個混沌工程工具,它可以在生產(chǎn)環(huán)境中隨機關(guān)閉實例來測試系統(tǒng)的可靠性和彈性。
ChaosIQ
是一個混沌工程平臺,它提供了多種故障注入工具,包括網(wǎng)絡(luò)故障、主機故障、應(yīng)用程序故障等,可以幫助用戶測試系統(tǒng)的彈性和可靠性。它還提供了可視化儀表板和報告,幫助用戶分析測試結(jié)果和改進(jìn)系統(tǒng)。
- 自動修復(fù):
Shoreline, OpsGenie.
集群故障排除
獲取集群信息
要在集群中進(jìn)行調(diào)試,請確保所有節(jié)點都已正確注冊。
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms100.liruilongs.github.io Ready control-plane 141d v1.25.1
vms101.liruilongs.github.io Ready control-plane 141d v1.25.1
vms102.liruilongs.github.io Ready control-plane 141d v1.25.1
vms103.liruilongs.github.io Ready <none> 141d v1.25.1
vms105.liruilongs.github.io Ready <none> 141d v1.25.1
vms106.liruilongs.github.io Ready <none> 141d v1.25.1
┌──[root@vms100.liruilongs.github.io]-[~]
└─$
使用dump進(jìn)行故障排除
獲取集群信息:
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl cluster-info
Kubernetes control plane is running at https://192.168.26.99:30033
CoreDNS is running at https://192.168.26.99:30033/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
使用 grep
對關(guān)鍵字進(jìn)行過濾,排查問題
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl cluster-info dump
獲取群集組件的運行狀況
v1.19+
之后可能要被廢棄
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
controller-manager Healthy ok
┌──[root@vms100.liruilongs.github.io]-[~]
└─$
集群日志記錄查找
獲取日志的最后五行:
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl logs argocd-application-controller-0 --tail=5
time="2023-06-16T20:26:58Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
time="2023-06-16T20:27:08Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
time="2023-06-16T20:27:18Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
time="2023-06-16T20:27:28Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
time="2023-06-16T20:27:38Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
┌──[root@vms100.liruilongs.github.io]-[~]
└─$
獲取特定于時間的信息
┌──[root@vms100.liruilongs.github.io]-[~]
└─$kubectl logs argocd-application-controller-0 --since=20s
time="2023-06-16T20:29:16Z" level=error msg="Failed to cache app resources: error setting app resource tree: dial tcp 10.96.153.48:6379: connect: connection refused" application=argocd/guestbook dedup_ms=0 diff_ms=1 git_ms=15114 health_ms=0 live_ms=0 settings_ms=0 sync_ms=0
time="2023-06-16T20:29:16Z" level=info msg="No status changes. Skipping patch" application=argocd/guestbook
time="2023-06-16T20:29:16Z" level=info msg="Reconciliation completed" application=argocd/guestbook dedup_ms=0 dest-name= dest-namespace=default dest-server="https://kubernetes.default.svc" diff_ms=1 fields.level=0 git_ms=15114 health_ms=0 live_ms=0 settings_ms=0 sync_ms=0 time_ms=15289
time="2023-06-16T20:29:18Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
time="2023-06-16T20:29:28Z" level=warning msg="Failed to save clusters info: dial tcp 10.96.153.48:6379: connect: connection refused"
┌──[root@vms100.liruilongs.github.io]-[~]
└─$
博文部分內(nèi)容參考
? 文中涉及參考鏈接內(nèi)容版權(quán)歸原作者所有,如有侵權(quán)請告知
https://medium.com/@sudheer.barakers/kubernetes-troubleshooting-3bc4c3a3cb9a文章來源:http://www.zghlxwxcb.cn/news/detail-618734.html
? 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)文章來源地址http://www.zghlxwxcb.cn/news/detail-618734.html
到了這里,關(guān)于K8s:Kubernetes 故障排除方法論的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!