Score:0

ประสิทธิภาพของระบบของ Rasperry Pi (รัน k8s) นั้นแย่มาก - จะดีบักได้อย่างไร?

ธง tr

สรุป

ฉันใช้โฮมแล็บแบบบาง (คลัสเตอร์ Kubernetes ที่มีพ็อดไม่กี่ตัว, Gitea, Drone, Docker Registry และ NFS ที่ใช้ร่วมกัน) บนคลัสเตอร์ 2-Pi4 และประสิทธิภาพของระบบไม่ดี ฉันสังเกตเห็นว่าระบบไฟล์ของโหนดคอนโทรลเลอร์ดูค่อนข้างช้า - ฉันไม่แน่ใจว่านั่นเป็นสาเหตุหรือเกิดจากอาการอื่นๆ หรือไม่ ฉันจะสร้างอิมเมจใหม่และติดตั้งโหนดคอนโทรลเลอร์ใหม่บนการ์ด SD ใหม่โดยหวังว่าจะแก้ไขได้ แต่ในระหว่างนี้ ฉันกำลังมองหาวิธีอื่นในการแก้ไขข้อบกพร่องนี้

สถานการณ์

ฉันได้ตั้งค่าคลัสเตอร์ Kubernetes ขั้นต่ำบนฮาร์ดแวร์ของฉันเองแล้ว ส่วนใหญ่ต่อไปนี้ คู่มือนี้ โดยมีการเปลี่ยนแปลงเล็กน้อย:

  • ฉันมี Pi4 สองตัวเท่านั้น (1 8Gb RAM, 1 4Gb) ดังนั้นคลัสเตอร์ของฉันจึงเล็กกว่าเล็กน้อย (8Gb เป็นระนาบควบคุม, 4Gb เป็นเวิร์กเกอร์)
  • หลังจากพบว่าเซิร์ฟเวอร์ Ubuntu ค่อนข้างช้าและไม่ตอบสนอง (และตรวจสอบการแสดงผลนั้นกับ Pi-thusiast คนอื่นๆ เพื่อให้แน่ใจว่าไม่ใช่แค่การรับรู้/ฮาร์ดแวร์ของฉัน) ฉันจึงใช้ระบบปฏิบัติการ Raspbian 64 บิตแทน
    • ซึ่งในที่สุดก็หมายความว่าของฉัน cmdline.txt การเปลี่ยนแปลงคือ แตกต่างกันเล็กน้อย - เมื่อฉันใช้เวอร์ชัน Ubuntu จากบทความนั้น Pi ไม่ได้สำรองข้อมูลจากการรีบูต
  • คลัสเตอร์ยังไม่ได้ (ยัง!) บนเครือข่ายส่วนตัว - พวกเขากำลังสื่อสารผ่านเครือข่ายหลักของฉันเท่านั้น
  • โหนดคอนโทรลเลอร์มีฮาร์ดไดรฟ์ที่เชื่อมต่อผ่าน USB3 และแชร์ผ่าน NFS เพื่อใช้งานโดย k8s pods
  • ฉันยังติดตั้ง fail2ban, Gitea, Drone และ Docker Container Registry ที่เป็นพื้นฐาน (เช่นเดียวกับการแชร์ NFS ดังกล่าว) บนโหนดคอนโทรลเลอร์ - ฉันคิดว่าเป็นการดีที่สุดที่จะโฮสต์ CI/CD และส่วนประกอบที่เป็นอิสระจากคลัสเตอร์ k8s เนื่องจากเป็นการพึ่งพา ของ มัน (ยินดีที่จะได้รับข้อเสนอแนะเกี่ยวกับสิ่งนั้น แต่ฉันคิดว่ามันเกี่ยวข้องกับคำถามนี้)

ปัญหา

คลัสเตอร์เปิดใช้งานแล้ว และฉันสามารถเรียกใช้การปรับใช้บางอย่างบนคลัสเตอร์ได้ (แดชบอร์ด Kubernetes, jellyfin, grafana และการปรับใช้ nginx ขนาดเล็กของฉัน บล็อกที่สร้างโดย Hugo). สิ่งนี้ (พร้อมกับส่วนประกอบ CI/CD ดังกล่าวและการแบ่งปัน NFS) ดูเหมือนว่ามันควรจะเป็นภาระที่ไม่มีนัยสำคัญสำหรับคลัสเตอร์ (และฉันยืนยันความคาดหวังนี้กับผู้เขียน บทความนั้น) - ก่อนหน้านี้ฉันเคยใช้งานทั้งหมด (ลบ Kubernetes overhead) และอื่นๆ บน 4Gb Pi4 เพียงเครื่องเดียวโดยไม่มีปัญหาใดๆ อย่างไรก็ตาม ระบบทำงานช้ามากและไม่ตอบสนอง:

  • คำสั่งเชลล์อย่างง่าย (เช่น ผู้ชาย , ดีเอฟ, เวลาทำงาน) จะใช้เวลา ~10 วินาทีจึงจะเสร็จสมบูรณ์ ติดตั้ง apt-et หรือ ติดตั้ง pip3 คำสั่งคือ มาก ช้ากว่าปกติ (เลขสองหลักนาที)
  • โหลดหน้าง่าย ๆ ใน UI ของ Gitea (เช่น.) อาจใช้เวลาระหว่าง 10 วินาทีถึงหนึ่งนาที
  • สร้างบล็อกอย่างง่าย (ลิงก์ Gitea, หรือ กระจก GitHub หากไม่สามารถใช้งานได้) ใช้เวลามากกว่า 20 นาที
  • การสร้างพ็อดอย่างง่ายอาจใช้เวลาเป็นเลขสองหลัก
  • แดชบอร์ด Kubernetes มักจะแสดงไอคอนสปินเนอร์สำหรับบานหน้าต่าง/หน้าเป็นเวลาประมาณ 20 วินาทีก่อนที่จะเติมข้อมูล
  • เมื่อใช้งาน พร็อกซี kubectl เพื่อดูแดชบอร์ด บางครั้งแทนที่จะแสดงหน้าเว็บ เบราว์เซอร์จะแสดงเพย์โหลด JSON รวมถึงข้อความ เกิดข้อผิดพลาดขณะพยายามเข้าถึงบริการ: หมุนหมายเลข tcp <IP> เชื่อมต่อ: การเชื่อมต่อถูกปฏิเสธ. ถ้าฉันใช้แทน kubectl port-forward -n บริการ kubernetes-dashboard/kubernetes-dashboard 8443:443ฉันได้รับข้อผิดพลาดต่อไปนี้ในเทอร์มินัล:
ส่งต่อจาก 127.0.0.1:8443 -> 8443
ส่งต่อจาก [::1]:8443 -> 8443
การจัดการการเชื่อมต่อสำหรับ 8443
E0520 22:03:24.086226   47798 portforward.go:400] an error occurred forwarding 8443 -> 8443: error forwarding port 8443 to pod a8ef295e1e42c5c739f761ab517618dd1951ad0c19fb517849979edb80745763, uid : failed to execute portforward in network namespace "/var/run/netns/cni-cfc573de -3714-1f3a-59a9-96285ce328ca": อ่าน tcp4 127.0.0.1:45274->127.0.0.1:8443: อ่าน: รีเซ็ตการเชื่อมต่อโดยเพียร์
การจัดการการเชื่อมต่อสำหรับ 8443
การจัดการการเชื่อมต่อสำหรับ 8443
E0520 22:03:29.884407 47798 portforward.go:385] เกิดข้อผิดพลาดในการคัดลอกจากการเชื่อมต่อในเครื่องไปยังสตรีมระยะไกล: อ่าน tcp4 127.0.0.1:8443->127.0.0.1:54550: อ่าน: การเชื่อมต่อรีเซ็ตโดยเพียร์
การจัดการการเชื่อมต่อสำหรับ 8443
E0520 22:05:58.069799 47798 portforward.go:233] ขาดการเชื่อมต่อกับพ็อด

สิ่งที่ฉันได้ลองไปแล้ว

ทรัพยากรระบบ

ก่อนอื่นฉันตรวจสอบทรัพยากรระบบในเครื่อง k8s ทั้งหมด ท็อป แสดงให้เห็น:

  • ผู้ควบคุม - โหลด CPU <10% ทั่วทั้ง 4 คอร์, ใช้หน่วยความจำที่ ~2G/7.6G, สลับ 47/100M - `โหลดเฉลี่ย 11.62 10.17 7.32
  • คนงาน - โหลด CPU <3% ทั่วทั้ง 4 คอร์และการใช้งานหน่วยความจำที่ ~300M/1.81G, สลับ 20/100M - โหลดเฉลี่ย 0.00 0.00 0.00

ซึ่งแปลกอยู่สองประการคือ

  • ถ้าโหลดเฉลี่ยสูงมาก (นี้ แนะนำว่าการใช้งาน 100% คือ "โหลดค่าเฉลี่ย = จำนวนคอร์" ดังนั้นโหลดเฉลี่ย 11 แสดงว่า Pi 4 คอร์นี้มีความจุเกือบ 300%) เหตุใดการใช้งาน CPU จึงต่ำ
  • ทำไม คนงาน แสดง เช่น โหลดเฉลี่ยต่ำ? โดยเฉพาะอย่างยิ่ง ฉันได้ยืนยันว่ามีการแบ่งฝัก k8s ประมาณ 50/50 ระหว่าง ผู้ควบคุม และ คนงาน, และยืนยันว่าได้ตั้งค่า AGENTS_ENABLED=จริง (อ้างอิง) บนเซิร์ฟเวอร์โดรน

ฉันทำตามคำแนะนำ ที่นี่ เพื่อตรวจสอบโหลดระบบสูงและการใช้งาน CPU ต่ำ:

  • ยืนยันโหลดระบบสูง
  • ซาร์ เอาต์พุต:
$ ซาร์ -u 5
Linux 5.15.32-v8+ (rassigma) 21/05/2022 _aarch64_ (4 CPU)

02:41:57 น. CPU %user %nice %system %iowait %steal %ไม่ได้ใช้งาน
02:42:02 น. ทั้งหมด 2.47 0.00 1.16 96.37 0.00 0.00
02:42:07 น. ทั้งหมด 2.77 0.00 2.21 95.02 0.00 0.00
02:42:12 น. ทั้งหมด 3.97 0.00 1.01 95.02 0.00 0.00
02:42:17 น. ทั้งหมด 2.42 0.00 1.11 96.47 0.00 0.00
^ซี
เฉลี่ย: ทั้งหมด 2.91 0.00 1.37 95.72 0.00 0.00

ดังนั้น ก มาก ของ %iowait!

  • ps -eo s,ผู้ใช้ | grep "^[RD]" | จัดเรียง | ยูนิค -c | เรียงลำดับ -nbr แสดงให้เห็น
6 D ราก
1 R ปี่

จึงดูเหมือนไม่ใช่สาเหตุที่นี่ (บทความแสดงรายการตัวอย่างที่มีเธรดนับพันในสถานะ D/R)

ขึ้นอยู่กับ เหล่านี้ สอง คำถามฉันจะรวมผลลัพธ์ของคำสั่งต่าง ๆ ที่ทำงานไว้ที่นี่ ผู้ควบคุมแม้ว่าฉันจะไม่รู้วิธีตีความ:

$netstat -i 15
ตารางส่วนต่อประสานเคอร์เนล
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
br-5bde1 1500 15188 0 0 0 15765 0 0 0 BMRU
br-68f83 1500 121 0 0 0 241 0 0 0 BMU
cni0 1450 1546275 0 0 0 1687849 0 0 0 BMRU
นักเทียบท่า0 1500 146703 0 0 0 160569 0 0 0 BMRU
eth0 1500 5002006 0 0 0 2325706 0 0 0 BMRU
สักหลาด. 1450 161594 0 0 0 168478 0 4162 0 บม.
เลย 65536 6018581 0 0 0 6018581 0 0 0 LRU
veth1729 1450 41521 0 0 0 59590 0 0 0 BMRU
veth1a77 1450 410622 0 0 0 453044 0 0 0 BMRU
veth35a3 1450 82 0 0 0 20237 0 0 0 BMRU
veth3dce 1500 59212 0 0 0 61170 0 0 0 BMRU
veth401b 1500 28 0 0 0 4182 0 0 0 BMRU
veth4257 1450 108391 0 0 0 173055 0 0 0 BMRU
veth4642 1500 12629 0 0 0 16556 0 0 0 BMRU
veth6a62 1450 83 0 0 0 20285 0 0 0 BMRU
veth7c18 1450 47952 0 0 0 59756 0 0 0 BMRU
veth8a14 1450 82 0 0 0 20279 0 0 0 BMRU
vethcc5c 1450 655457 0 0 0 716329 0 0 0 BMRU
vethe535 1450 17 0 0 0 769 0 0 0 BMRU
vethf324 1450 180986 0 0 0 198679 0 0 0 BMRU
wlan0 1500 0 0 0 0 0 0 0 0 BMU

$ ไอโอสแตท -d -x
Linux 5.15.32-v8+ (rassigma) 21/05/2022 _aarch64_ (4 CPU)

อุปกรณ์ r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await กล้า q-sz f/s f_await aqu-sz %การใช้งาน
mmcblk0 0.20 14.65 0.07 26.90 1031.31 74.40 3.33 56.68 1.64 33.04 4562.85 17.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 15.470 51.470
sda 0.27 28.31 0.05 15.37 25.75 104.42 0.36 26.56 0.24 39.99 64.19 72.81 0.00 0.00 0.00 0.00 0.00 0.00 0.04 90.24 0.03 0.56

$vmstat15
procs ----------- หน่วยความจำ ---------- --- swap-- ----- io---- -system-- ------ ซีพียู -----
 r b swpd แคชบัฟฟรี si ดังนั้น bi bo ใน cs us sy id wa st
 8 3 48640 827280 129600 4607164 0 0 11 21 15 42 4 1 71 24 0
 0 5 48640 827128 129600 4607216 0 0 1 44 2213 4267 4 1 31 64 0
 0 10 48640 827660 129600 4607216 0 0 0 47 1960 3734 4 1 36 59 0
 0 5 48640 824912 129600 4607624 0 0 1 121 2615 4912 6 2 15 77 0
 2 12 48640 824416 129600 4607692 0 0 0 102 2145 4129 4 2 30 64 0
 1 7 48640 822428 129600 4607972 0 0 3 81 1948 3564 6 2 10 83 0
 0 5 48640 823312 129600 4608164 0 0 4 62 2328 4273 5 2 12 81 0
 0 7 48640 824320 129600 4608220 0 0 1 143 2433 4695 5 2 9 84 0
 ...

การใช้งาน 51% ในการ์ด SD (จาก ไอโอสแตท เอาต์พุต) น่าจะเป็น อย่างสมเหตุสมผล สูง แต่ไม่เป็นปัญหา - ฉันจะคิดได้อย่างไร

ระบบไฟล์

การอ้างอิง บทความนี้ เกี่ยวกับวิธีทดสอบ (การ์ด SD) ประสิทธิภาพของระบบไฟล์ ผู้ควบคุม และ คนงาน (ทั้งคู่ใช้การ์ด SD จาก ชุดเดียวกันซึ่งโฆษณาความเร็วในการเขียน 10 MB/s):

คอนโทรลเลอร์ - $ dd if=/dev/zero of=speedtest bs=1M count=100 conv=fdatasync
100+0 บันทึกใน
100+0 บันทึกออก
คัดลอก 104857600 ไบต์ (105 MB, 100 MiB), 43.2033 วินาที, 2.4 MB/วินาที

ผู้ปฏิบัติงาน - $ dd if=/dev/zero of=speedtest bs=1M count=100 conv=fdatasync
100+0 บันทึกใน
100+0 บันทึกออก
คัดลอก 104857600 ไบต์ (105 MB, 100 MiB), 5.97128 วินาที, 17.6 MB/วินาที

ผู้ควบคุมการเขียน FS ของดูเหมือนจะช้ากว่า ~7 เท่า คนงาน's. ฉันไม่แน่ใจว่าจะตีความอย่างเป็นเหตุเป็นผลได้อย่างไร - อาจเป็นได้ว่า ผู้ควบคุมระบบไฟล์ช้าซึ่งเป็นสาเหตุของอาการอื่น ๆ หรืออาจเป็นไปได้ว่ามีปัญหาคอขวดของกระบวนการอื่น ๆ ซึ่งทำให้ทั้งระบบไฟล์ช้าและอาการอื่น ๆ

เครือข่าย

เครือข่ายในบ้านของฉันอยู่หลังมาตรฐานพอสมควร โอพีเอ็นเซนส์ เราเตอร์

ตรวจสอบการเชื่อมต่อเครือข่ายภายนอกด้วย ทดสอบความเร็ว CLI:

ตัวควบคุม - $ ทดสอบความเร็ว
     เซิร์ฟเวอร์: Tekify Fiber & Wireless - ฟรีมอนต์ แคลิฟอร์เนีย (id = 6468)
        ผู้ให้บริการอินเทอร์เน็ต: Sonic.net, LLC
    เวลาแฝง: 3.53 ms (0.15 ms jitter)
   ดาวน์โหลด: 859.90 Mbps (ข้อมูลที่ใช้: 523.3 MB )
     อัปโหลด: 932.58 Mbps (ข้อมูลที่ใช้: 955.5 MB )
การสูญเสียแพ็คเก็ต: 0.0%
---
คนงาน - $ speedtest
     เซิร์ฟเวอร์: Tekify Fiber & Wireless - ฟรีมอนต์ แคลิฟอร์เนีย (id = 6468)
        ผู้ให้บริการอินเทอร์เน็ต: Sonic.net, LLC
    เวลาแฝง: 3.29 ms (1.84 ms jitter)
   ดาวน์โหลด: 871.33 Mbps (ข้อมูลที่ใช้: 776.6 MB )
     อัปโหลด: 917.25 Mbps (ข้อมูลที่ใช้: 630.5 MB )
การสูญเสียแพ็คเก็ต: 0.0%

ฉันวางแผนที่จะทดสอบความเร็วภายในเครือข่าย แต่เมื่อพิจารณาว่าใช้เวลานานเท่าใดในการแก้ไขจุดบกพร่องและสัญญาณที่ชัดเจนว่ามีปัญหา ผู้ควบคุมการ์ด SD ของ (สูง %ioรอ, ช้า วว ประสิทธิภาพการเขียน) ฉันเลือกที่จะดำเนินการต่อเพื่อแทนที่ก่อนที่จะตรวจสอบเครือข่าย


อัพเดท

  • หลังจากรีอิมเมจใหม่บนการ์ด SD ใหม่ โดยไม่ได้ติดตั้งอย่างอื่นเลยนอกจาก Raspbian dd if=/dev/zero of=speedtest bs=1M count=100 conv=fdatasync การทดสอบความเร็วของระบบไฟล์ให้ 17.2 MB/s สำหรับโหนดตัวควบคุม "เกิดใหม่" ฉันจะติดตั้งคลัสเตอร์ k8s และเครื่องมืออื่นๆ แล้วทดสอบอีกครั้ง
  • หลังจากติดตั้งเครื่องมือทั้งหมด (k8s, docker container, drone, gitea, nfs) ความเร็วในการเขียนระบบไฟล์คือ 17MB/s; หลังจากติดตั้งคอนเทนเนอร์บนคลัสเตอร์ k8s ความเร็วในการเขียนคือ 16.5MB และ %ioรอ จาก ซาร์ - ยู 5 เกือบเป็น 0 ประสิทธิภาพของระบบดีมาก! ดูเหมือนว่ามันเป็นแค่การ์ด SD ที่น่าเบื่อ :D
djdomi avatar
za flag
อุปกรณ์ของผู้ใช้ปลายทางอยู่นอกหัวข้อใน serverfault.com โปรดตั้งค่าสถานะคำถามของคุณเองสำหรับการย้ายไปที่ superuser.com ซึ่งอาจอยู่ในหัวข้อ มันค่อนข้างบอกว่าเขียนดี แต่ imho offtopic ;)
tr flag
เสร็จแล้ว - ขอบคุณ!
kupson avatar
cn flag
@djdomi โพสต์เกี่ยวกับ Kubernetes เป็นหัวข้อของผู้ใช้ได้อย่างไร นั่นเป็นเพราะ k8s ไม่ได้อยู่ในเครื่อง Dell/HP/...
djdomi avatar
za flag
เป็นเพราะราสเบอร์รี่ไม่ใช่อุปกรณ์ที่จะอยู่ในหัวข้อ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา