此 Helm Chart 旨在部署自動將大多數公有雲 kubernetes 服務供應商和私有 kubernetes 執行個體的核心轉儲儲存到 S3 相容儲存服務的功能。
請閱讀 CONTRIBUTING.md,它有一些重要的註釋。特別注意編碼風格指南和開發者原產地證書
作為會員、貢獻者和領導者,我們承諾讓每個人在參與社區時都獲得無騷擾的體驗,無論年齡、體型、明顯或不可見的殘疾、種族、性別特徵、性別認同和表達、經驗水平、教育程度、社經地位、國籍、個人外表、種族、宗教或性認同和取向。
我們承諾以有助於建立開放、熱情、多元化、包容和健康社區的方式行事和互動。
完整的行為準則可在此處取得
請參閱圖表 README.md 以了解完整詳細資訊。
這是已確認的測試目標的矩陣。請公關環境也已知有效
提供者 | 產品 | 版本 | 已驗證? | 在職的? |
AWS | 艾克斯 | 1.21 | 是的 | 是的 |
AWS | 羅莎 | 4.8 | 是的 | 是的 |
客製化建造 | K8S | 不適用 | 是的 | 是的 |
數位海洋 | K8S | 1.21.5-do.0 | 是的 | 是的 |
GKE-cos_containerd | 1.20.10-gke.1600 | 是的 | 是的 | |
GKE-Ubuntu | 1.20.10-gke.1600 | 是的 | 是的 | |
國際商業機器公司 | 伊克斯 | 1.19-1.21 | 是的 | 是的 |
國際商業機器公司 | 韓國 | 4.6-4.8 | 是的 | 是的 |
微軟 | AKS | 1.19 | 是的 | 是的 |
微軟 | 阿羅 | 4.8 | 是的 | 是的 |
紅帽 | 本地部署 | 4.8 | 是的 | 是的 |
核心轉儲是可觀察性的關鍵部分。
隨著系統變得更加分散式,核心轉儲為團隊提供了一種非侵入性的方法來了解程式在部署到的任何環境中出現故障的原因。
核心轉儲在許多場景中都很有用,但它們在以下情況下非常相關:
進程退出時沒有有用的堆疊追蹤
進程記憶體不足
應用程式未按預期運行
核心轉儲的傳統問題是:
管理轉儲的開銷
轉儲分析需要特定的工具,而開發人員的電腦上無法輕鬆取得這些工具。
管理對轉儲的訪問,因為它們可能包含敏感資訊。
此圖表旨在透過利用雲端環境中的通用平台(K8s、ROKS 和物件儲存)來承擔繁重的工作,從而解決圍繞核心轉儲的問題。
該圖表部署了兩個流程:
此代理程式管理/proc/sys/kernel/*
配置的更新,部署 Composer 服務並將 Composer 建立的核心轉儲 zip 檔案上傳到物件儲存實例。
Composer負責核心轉儲的處理,並從 CRICTL 建立執行時間、容器核心轉儲和映像 JSON 文件,並將它們插入到單一 zip 檔案中。 zip 檔案儲存在節點的本機檔案系統上,供代理上傳。
安裝 IBM Cloud Core Dump Handler Helm 圖表時,以下 Kubernetes 資源將部署到您的 Kubernetes 叢集中:
命名空間:建立一個特定的命名空間來安裝元件 - 預設為 ibm-observe
Handler Daemonset :daemonset 在叢集中的每個工作節點上部署一個 pod。 daemonset 包含配置,使提升的進程能夠定義核心模式,將核心轉儲放入物件儲存中,並收集 pod 資訊(如果可用)。
特權策略:守護程式配置主機節點,因此需要特權。
服務帳戶:執行守護程式集的標準服務帳戶
卷聲明:用於將 Composer 複製到主機並啟用對生成的核心轉儲的訪問
群集角色:使用事件資源建立並建立動詞並與服務帳戶關聯。
要在叢集中安裝 Helm Chart,您必須具有管理員平台角色。
此圖表部署特權 kubernetes 守護程序集,具有以下意義:
每個 kubernetes 節點自動建立特權容器,能夠讀取核心文件,查詢 crictl 的 pod 資訊。
守護程序集使用主機路徑功能與底層 Linux 作業系統互動。
Composer 二進位檔案已部署並在主機伺服器上執行
核心轉儲可能包含敏感的運行時數據,並且必須相應地管理儲存桶存取。
物件儲存密鑰作為秘密儲存並用作守護程序集中的環境變量
IBM Cloud Core Dump Handler 需要每個工作程序節點上有以下資源才能成功運作:
$ helm delete core-dump-handler --namespace observe
host-name
的永久磁碟區 $ kubectl get pvc -n observe
$ helm install core-dump-handler . --namespace observe
helm delete core-dump-handler -n observe
建置映像docker build -t YOUR_TAG_NAME .
將鏡像推送到容器註冊表
更新values.yaml
檔案中的容器以使用它。
image :
registry : YOUR_REGISTRY
repository : YOUR_REPOSITORY
tag : YOUR_TAG
或使用設定執行 helm install 指令
--set image.registry=YOUR_REGISTRY
--set image.repository=YOUR_REPOSITORY
--set image.tag=YOUR_TAG
這些服務是使用 rustup 用 Rust 寫的。
可以使用基本資料夾中的cargo test
來運行本地單元測試
目前僅支援 IBM Cloud ROKS 和 IKS,但我們很樂意為其他服務進行整合測試,但我們無法在發布之前運行它們。
要運行集成測試構建,請按照自定義構建的說明進行操作
在專案資料夾的根目錄中建立一個名為.env
的文件,其中包含以下配置
S3_ACCESS_KEY=XXXX
S3_SECRET=XXXX
S3_BUCKET_NAME=XXXX
S3_REGION=XXXX
將目錄變更為整合資料夾並執行測試
cd integration
./run-ibm.sh
版本建構在預發布分支上,例如,手動執行pre-8.5.0
整合測試,並在合併到主分支時產生版本。
目前無法自動執行此操作,因為 github 操作中的 kubernetes 整合不夠可靠。
如果您希望使用自己的整合測試來測試預發布版本,請提出問題,我們可以就您的測試運行進行協作。
查找問題的第一個地方是代理控制台。成功安裝應該如下圖所示
[2021-09-08T22:28:43Z INFO core_dump_agent] Setting host location to: /var/mnt/core-dump-handler
[2021-09-08T22:28:43Z INFO core_dump_agent] Current Directory for setup is /app
[2021-09-08T22:28:43Z INFO core_dump_agent] Copying the composer from ./vendor/default/cdc to /var/mnt/core-dump-handler/cdc
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pattern /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pipe_limit /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for fs.suid_dumpable /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pattern=|/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pattern = |/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pipe_limit = 128
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pipe_limit=128
fs.suid_dumpable = 2
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of fs.suid_dumpable=2
[2021-09-08T22:28:43Z INFO core_dump_agent] Creating /var/mnt/core-dump-handler/.env file with LOG_LEVEL=info
[2021-09-08T22:28:43Z INFO core_dump_agent] Executing Agent with location : /var/mnt/core-dump-handler/core
[2021-09-08T22:28:43Z INFO core_dump_agent] Dir Content []
如果代理程式運行成功,則 Composer 配置可能有問題。若要檢查 Composer 的日誌,請在代理程式中開啟一個 shell,然後使用 cat 尋找composer.log 以查看是否有任何錯誤訊息。
cat /var/mnt/core-dump-handler/composer.log
如果沒有錯誤,那麼您應該在 value.yaml debug
預設日誌從error
變更為偵錯,並重新部署圖表。再次建立核心轉儲, /var/mnt/core-dump-handler/composer.log
core-dump-handler/composer.log 應包含每次上傳的特定詳細資訊。