แผนภูมิหางเสือนี้ออกแบบมาเพื่อปรับใช้ฟังก์ชันที่จะบันทึกการถ่ายโอนข้อมูลหลักโดยอัตโนมัติจากผู้ให้บริการคลาวด์สาธารณะ kubernetes ส่วนใหญ่และอินสแตนซ์ kubernetes ส่วนตัวไปยังบริการพื้นที่จัดเก็บข้อมูลที่เข้ากันได้กับ S3
โปรดอ่าน CONTRIBUTING.md ซึ่งมีหมายเหตุสำคัญบางประการ ให้ความสนใจเป็นพิเศษกับ หลักเกณฑ์รูปแบบการเขียนโค้ด และ ใบรับรองแหล่งกำเนิดสินค้าของนักพัฒนา
เราในฐานะสมาชิก ผู้มีส่วนร่วม และผู้นำให้คำมั่นที่จะทำให้การมีส่วนร่วมในชุมชนของเราเป็นประสบการณ์ที่ปราศจากการคุกคามสำหรับทุกคน โดยไม่คำนึงถึงอายุ ขนาดร่างกาย ความพิการที่มองเห็นหรือมองไม่เห็น ชาติพันธุ์ ลักษณะทางเพศ อัตลักษณ์และการแสดงออกทางเพศ ระดับของประสบการณ์ การศึกษา สถานะทางเศรษฐกิจและสังคม สัญชาติ รูปลักษณ์ภายนอก เชื้อชาติ ศาสนา หรืออัตลักษณ์และรสนิยมทางเพศ
เราให้คำมั่นที่จะดำเนินการและมีปฏิสัมพันธ์ในลักษณะที่เอื้อให้เกิดชุมชนที่เปิดกว้าง เป็นมิตร มีความหลากหลาย ไม่แบ่งแยก และมีสุขภาพดี
หลักปฏิบัติฉบับเต็มมีอยู่ที่นี่
โปรดดูแผนภูมิ README.md สำหรับรายละเอียดทั้งหมด
นี่คือเมทริกซ์ของเป้าหมายการทดสอบที่ได้รับการยืนยัน กรุณาประชาสัมพันธ์สภาพแวดล้อมที่ทราบว่ายังใช้งานได้
ผู้ให้บริการ | ผลิตภัณฑ์ | เวอร์ชัน | ตรวจสอบแล้ว? | การทำงาน? |
AWS | อีเคเอส | 1.21 | ใช่ | ใช่ |
AWS | โรซา | 4.8 | ใช่ | ใช่ |
สร้างแบบกำหนดเอง | K8S | ไม่มี | ใช่ | ใช่ |
มหาสมุทรดิจิทัล | K8S | 1.21.5-ทำ.0 | ใช่ | ใช่ |
GKE-cos_containerd | 1.20.10-gke.1600 | ใช่ | ใช่ | |
GKE-อูบุนตู | 1.20.10-gke.1600 | ใช่ | ใช่ | |
ไอบีเอ็ม | ไอเคเอส | 1.19-1.21 | ใช่ | ใช่ |
ไอบีเอ็ม | ร็อก | 4.6-4.8 | ใช่ | ใช่ |
ไมโครซอฟต์ | เอเคเอส | 1.19 | ใช่ | ใช่ |
ไมโครซอฟต์ | อโร | 4.8 | ใช่ | ใช่ |
เรดแฮท | ภายในองค์กร | 4.8 | ใช่ | ใช่ |
Core Dumps เป็นส่วนสำคัญของความสามารถในการสังเกต
เมื่อระบบมีการกระจายคอร์ดัมพ์มากขึ้น ทำให้ทีมมีแนวทางที่ไม่รุกรานในการทำความเข้าใจว่าเหตุใดโปรแกรมจึงทำงานผิดปกติในสภาพแวดล้อมใดก็ตามที่พวกเขาใช้งาน
Core Dumps มีประโยชน์ในหลายสถานการณ์ แต่จะมีความเกี่ยวข้องมากในกรณีต่อไปนี้:
กระบวนการออกโดยไม่มีการติดตามสแต็กที่มีประโยชน์
กระบวนการมีหน่วยความจำไม่เพียงพอ
แอปพลิเคชันไม่ทำงานตามที่คาดไว้
ปัญหาดั้งเดิมของการเทขยะหลักคือ:
ค่าใช้จ่ายในการจัดการขยะ
การวิเคราะห์ดัมพ์จำเป็นต้องมีเครื่องมือเฉพาะที่ไม่พร้อมใช้งานบนเครื่องของนักพัฒนา
การจัดการการเข้าถึงดัมพ์เนื่องจากอาจมีข้อมูลที่ละเอียดอ่อน
แผนภูมินี้มีจุดมุ่งหมายเพื่อแก้ไขปัญหาที่เกี่ยวข้องกับการดัมพ์หลักโดยใช้ประโยชน์จากแพลตฟอร์มทั่วไป (K8s, ROKS และ Object Storage) ในสภาพแวดล้อมคลาวด์เพื่อรับการยกของหนัก
แผนภูมิปรับใช้สองกระบวนการ:
เอเจนต์ จัดการการอัปเดตการกำหนดค่า /proc/sys/kernel/*
ปรับใช้บริการผู้แต่ง และอัปโหลดไฟล์ zip ดัมพ์หลักที่สร้างโดยผู้แต่งไปยังอินสแตนซ์พื้นที่จัดเก็บอ็อบเจ็กต์
ผู้แต่ง จะจัดการการประมวลผลคอร์ดัมพ์และสร้างเอกสารรันไทม์, คอนเทนเนอร์คอร์ดัมพ์ และรูปภาพ JSON จาก CRICTL แล้วแทรกลงในไฟล์ ZIP ไฟล์เดียว ไฟล์ zip จะถูกจัดเก็บไว้ในระบบไฟล์ในเครื่องของโหนดเพื่อให้เอเจนต์อัปโหลด
เมื่อคุณติดตั้งแผนภูมิ IBM Cloud Core Dump Handler Helm ทรัพยากร Kubernetes ต่อไปนี้จะถูกปรับใช้ในคลัสเตอร์ Kubernetes ของคุณ:
เนมสเปซ : เนมสเปซเฉพาะถูกสร้างขึ้นเพื่อติดตั้งส่วนประกอบใน - ค่าเริ่มต้นเป็น ibm-observe
Handler Daemonset : daemonset ปรับใช้พ็อดบนทุกโหนดของผู้ปฏิบัติงานในคลัสเตอร์ของคุณ daemonset มีการกำหนดค่าเพื่อให้กระบวนการยกระดับสามารถกำหนดรูปแบบหลักเพื่อวาง core dump ลงในที่เก็บข้อมูลอ็อบเจ็กต์ รวมถึงรวบรวมข้อมูลพ็อด หากมี
นโยบายสิทธิพิเศษ : daemonset กำหนดค่าโหนดโฮสต์ดังนั้นจึงจำเป็นต้องมีสิทธิ์
บัญชีบริการ : บัญชีบริการมาตรฐานเพื่อเรียกใช้ daemonset
การอ้างสิทธิ์ปริมาณ : สำหรับการคัดลอกผู้แต่งไปยังโฮสต์และเปิดใช้งานการเข้าถึงการถ่ายโอนข้อมูลหลักที่สร้างขึ้น
บทบาทของคลัสเตอร์ : สร้างด้วยทรัพยากร เหตุการณ์ และ สร้าง คำกริยาและเชื่อมโยงกับบัญชีบริการ
หากต้องการติดตั้งแผนภูมิ Helm ในคลัสเตอร์ของคุณ คุณต้องมีบทบาทแพลตฟอร์ม ผู้ดูแลระบบ
แผนภูมินี้ปรับใช้ kubernetes daemonset ที่มีสิทธิ์โดยมีผลกระทบดังต่อไปนี้:
การสร้างคอนเทนเนอร์ที่ได้รับสิทธิพิเศษโดยอัตโนมัติต่อโหนด kubernetes ที่สามารถอ่านไฟล์หลักเพื่อสอบถามข้อมูล crictl สำหรับข้อมูลพ็อด
daemonset ใช้คุณสมบัติโฮสต์พาธที่โต้ตอบกับระบบปฏิบัติการ Linux พื้นฐาน
ไบนารีของผู้แต่งถูกปรับใช้และรันบนเซิร์ฟเวอร์โฮสต์
ดัมพ์หลักอาจมีข้อมูลรันไทม์ที่ละเอียดอ่อน และการเข้าถึงที่เก็บข้อมูลของพื้นที่เก็บข้อมูลต้องได้รับการจัดการตามนั้น
คีย์หน่วยเก็บข้อมูลอ็อบเจ็กต์จะถูกจัดเก็บเป็นความลับและใช้เป็นตัวแปรสภาพแวดล้อมใน daemonset
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
บริการนี้เขียนด้วยภาษา Rust โดยใช้rustup
การทดสอบหน่วยในเครื่องสามารถดำเนินการได้โดยใช้ 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
จะดำเนินการด้วยตนเอง และรุ่นจะถูกสร้างขึ้นเมื่อรวมเข้ากับรุ่นหลัก
ขณะนี้ยังไม่สามารถทำได้โดยอัตโนมัติเนื่องจากการผสานรวม kubernetes ในการดำเนินการ github ไม่น่าเชื่อถือเพียงพอ
หากคุณต้องการทดสอบเวอร์ชันก่อนเผยแพร่ด้วยการทดสอบการผสานรวมของคุณเอง โปรดแจ้งปัญหา แล้วเราจะร่วมมือกันในการทดสอบการทำงานของคุณ
ที่แรกที่ต้องค้นหาปัญหาอยู่ในคอนโซลตัวแทน การติดตั้งที่สำเร็จควรมีลักษณะเช่นนี้
[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.log เพื่อดูว่ามีข้อความแสดงข้อผิดพลาดใดๆ หรือไม่
cat /var/mnt/core-dump-handler/composer.log
หากไม่มีข้อผิดพลาด คุณควรเปลี่ยนบันทึกเริ่มต้นจาก error
เป็นการ debug
ในค่า yaml และปรับใช้แผนภูมิอีกครั้ง สร้างคอร์ดัมพ์อีกครั้ง และ /var/mnt/core-dump-handler/composer.log
ควรมีรายละเอียดเฉพาะในการอัปโหลดแต่ละครั้ง