แนวทางการดำเนินงานที่ทันสมัยช่วยแก้ปัญหาทางธุรกิจที่เร่งด่วนหลายประการ คอนเทนเนอร์และออเคสตราเตอร์ทำให้ง่ายต่อการปรับขนาดโปรเจ็กต์ที่มีความซับซ้อน ลดความซับซ้อนในการเผยแพร่เวอร์ชันใหม่ ทำให้เชื่อถือได้มากขึ้น แต่ในขณะเดียวกันก็สร้างปัญหาเพิ่มเติมให้กับนักพัฒนา ก่อนอื่นโปรแกรมเมอร์ใส่ใจกับโค้ดของเขา: สถาปัตยกรรม คุณภาพ ประสิทธิภาพ ความสง่างาม - และไม่สนใจว่ามันจะทำงานใน Kubernetes อย่างไร รวมถึงวิธีทดสอบและแก้ไขข้อบกพร่องหลังจากทำการเปลี่ยนแปลงเพียงเล็กน้อย ดังนั้นจึงค่อนข้างเป็นธรรมชาติที่เครื่องมือสำหรับ Kubernetes กำลังได้รับการพัฒนาอย่างแข็งขันซึ่งช่วยแก้ปัญหาของนักพัฒนาที่ "คร่ำครวญ" ที่สุดและทำให้พวกเขามุ่งเน้นไปที่สิ่งสำคัญได้
การตรวจสอบนี้ให้ข้อมูลโดยย่อเกี่ยวกับเครื่องมือบางอย่างที่ทำให้ชีวิตง่ายขึ้นสำหรับโปรแกรมเมอร์ที่มีโค้ดทำงานใน pod'ax ของคลัสเตอร์ Kubernetes
ตัวช่วยง่ายๆ
Kubectl-ดีบัก
- สาระการเรียนรู้แกนกลาง: เพิ่มคอนเทนเนอร์ของคุณลงในพ็อดแล้วดูว่าเกิดอะไรขึ้นในนั้น.
-
GitHub . - สถิติ GH โดยย่อ: 715 ดาว, 54 คอมมิต, ผู้ร่วมให้ข้อมูล 9 คน
- ภาษา: ไป.
- ใบอนุญาต: ใบอนุญาต Apache 2.0
ปลั๊กอินสำหรับ kubectl นี้ช่วยให้คุณสร้างคอนเทนเนอร์เพิ่มเติมภายในพ็อดที่สนใจได้ ซึ่งจะแชร์เนมสเปซกระบวนการกับคอนเทนเนอร์อื่นๆ ในนั้นคุณสามารถดีบักการทำงานของพ็อดได้: ตรวจสอบเครือข่าย, ฟังการรับส่งข้อมูลเครือข่าย, ติดตามกระบวนการที่สนใจ ฯลฯ
คุณยังสามารถสลับไปยังคอนเทนเนอร์กระบวนการได้ด้วยการรัน chroot /proc/PID/root
- สะดวกมากเมื่อคุณต้องการรูทเชลล์ในคอนเทนเนอร์ที่ตั้งค่าไว้ในไฟล์ Manifest securityContext.runAs
.
เครื่องมือนี้เรียบง่ายและมีประสิทธิภาพ ดังนั้นจึงมีประโยชน์สำหรับนักพัฒนาทุกคน เราเขียนเพิ่มเติมเกี่ยวกับเรื่องนี้ใน
ทางไกล
- สาระการเรียนรู้แกนกลาง: ถ่ายโอนแอปพลิเคชันไปยังคอมพิวเตอร์ของคุณ พัฒนาและแก้ไขจุดบกพร่องในเครื่อง.
-
เว็บไซต์ ;GitHub . - สถิติ GH โดยย่อ: 2131 ดาว, 2712 คอมมิต, ผู้ร่วมให้ข้อมูล 33 คน
- ภาษา: หลาม
- ใบอนุญาต: ใบอนุญาต Apache 2.0
แนวคิดของสแน็ปอินนี้คือการเปิดตัวคอนเทนเนอร์ด้วยแอปพลิเคชันบนคอมพิวเตอร์ผู้ใช้ภายในเครื่องและพรอกซีการรับส่งข้อมูลทั้งหมดจากคลัสเตอร์ไปยังคลัสเตอร์และย้อนกลับ แนวทางนี้ช่วยให้คุณพัฒนาภายในเครื่องได้โดยเพียงแค่แก้ไขไฟล์ใน IDE ที่คุณชื่นชอบ ผลลัพธ์จะพร้อมใช้งานทันที
ข้อดีของการทำงานในเครื่องคือความสะดวกในการแก้ไขและผลลัพธ์ทันที ความสามารถในการดีบักแอปพลิเคชันในลักษณะปกติ ข้อเสียคือต้องใช้ความเร็วในการเชื่อมต่อ ซึ่งจะสังเกตได้ชัดเจนเป็นพิเศษเมื่อคุณต้องทำงานกับแอปพลิเคชันที่มี RPS และการรับส่งข้อมูลค่อนข้างสูง นอกจากนี้ Telepresence ยังมีปัญหากับการติดตั้งโวลุ่มบน Windows ซึ่งอาจเป็นข้อจำกัดที่สำคัญสำหรับนักพัฒนาที่คุ้นเคยกับระบบปฏิบัติการนี้
เราได้แบ่งปันประสบการณ์ในการใช้ Telepresence แล้ว
เคซิงค์
- สาระการเรียนรู้แกนกลาง: การซิงโครไนซ์โค้ดกับคอนเทนเนอร์ในคลัสเตอร์แทบจะทันที.
-
GitHub . - สถิติ GH โดยย่อ: 555 ดาว, 362 คอมมิต, ผู้ร่วมให้ข้อมูล 11 คน
- ภาษา: ไป.
- ใบอนุญาต: ใบอนุญาต Apache 2.0
ยูทิลิตี้นี้ช่วยให้คุณสามารถซิงโครไนซ์เนื้อหาของไดเร็กทอรีในเครื่องกับไดเร็กทอรีของคอนเทนเนอร์ที่ทำงานอยู่ในคลัสเตอร์ เครื่องมือดังกล่าวเหมาะสำหรับนักพัฒนาที่ใช้ภาษาสคริปต์ซึ่งปัญหาหลักคือการส่งโค้ดไปยังคอนเทนเนอร์ที่ทำงานอยู่ Ksync ได้รับการออกแบบมาเพื่อบรรเทาอาการปวดหัวนี้
เมื่อเริ่มต้นหนึ่งครั้งด้วยคำสั่ง ksync init
DaemonSet ถูกสร้างขึ้นในคลัสเตอร์ ซึ่งใช้ในการตรวจสอบสถานะของระบบไฟล์ของคอนเทนเนอร์ที่เลือก บนเครื่องคอมพิวเตอร์ของเขา นักพัฒนาจะรันคำสั่ง ksync watch
ซึ่งจะตรวจสอบการกำหนดค่าและดำเนินการ
สิ่งที่เหลืออยู่คือสั่ง ksync ว่าจะซิงโครไนซ์กับอะไร ตัวอย่างเช่น คำสั่งนี้:
ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/
...จะสร้างผู้เฝ้าชื่อว่า myproject
ซึ่งจะค้นหาพ็อดที่มีป้ายกำกับ app=backend
และพยายามซิงโครไนซ์ไดเร็กทอรีในเครื่อง /home/user/myproject/
พร้อมแค็ตตาล็อก /var/www/myproject/
ที่ภาชนะที่เรียกว่า php
.
ปัญหาและหมายเหตุเกี่ยวกับ ksync จากประสบการณ์ของเรา:
- ต้องใช้บนโหนดคลัสเตอร์ Kubernetes
overlay2
เป็นไดรเวอร์การจัดเก็บข้อมูลสำหรับ Docker ยูทิลิตี้นี้จะไม่ทำงานร่วมกับผู้อื่น - เมื่อใช้ Windows เป็นระบบปฏิบัติการไคลเอนต์ ตัวเฝ้าดูระบบไฟล์อาจทำงานไม่ถูกต้อง ข้อผิดพลาดนี้ถูกพบเมื่อทำงานกับไดเร็กทอรีขนาดใหญ่ - โดยมีไฟล์และไดเร็กทอรีที่ซ้อนกันจำนวนมาก เราสร้าง
ปัญหาที่เกี่ยวข้อง ในโครงการซิงค์แต่ยังไม่มีความคืบหน้า (ตั้งแต่ต้น ก.ค.) - ใช้ไฟล์
เพื่อระบุเส้นทางหรือรูปแบบไฟล์ที่ไม่จำเป็นต้องซิงโครไนซ์ (เช่น directory.stignore
app/cache
и.git
). - ตามค่าเริ่มต้น ksync จะรีสตาร์ทคอนเทนเนอร์ทุกครั้งที่ไฟล์มีการเปลี่ยนแปลง สำหรับ Node.js สิ่งนี้สะดวก แต่สำหรับ PHP นั้นไม่จำเป็นเลย จะดีกว่าถ้าปิด opcache และใช้แฟล็ก
--reload=false
. - การกำหนดค่าสามารถแก้ไขได้เสมอ
$HOME/.ksync/ksync.yaml
.
สควอช
- สาระการเรียนรู้แกนกลาง: ดีบักกระบวนการโดยตรงในคลัสเตอร์.
-
GitHub . - สถิติ GH โดยย่อ: 1154 ดาว, 279 คอมมิต, ผู้ร่วมให้ข้อมูล 23 คน
- ภาษา: ไป.
- ใบอนุญาต: ใบอนุญาต Apache 2.0
เครื่องมือนี้ออกแบบมาสำหรับการแก้ไขข้อบกพร่องของกระบวนการในพ็อดโดยตรง ยูทิลิตี้นี้ใช้งานง่ายและโต้ตอบได้ช่วยให้คุณสามารถเลือกดีบักเกอร์ที่ต้องการได้ (ดูด้านล่าง) และเนมสเปซ + พ็อด ในกระบวนการที่คุณต้องเข้าไปแทรกแซง รองรับในปัจจุบัน:
- เจาะลึก - สำหรับแอปพลิเคชัน Go;
- GDB - ผ่านการส่งต่อเป้าหมายระยะไกล + พอร์ต
- การส่งต่อพอร์ต JDWP สำหรับการดีบักแอปพลิเคชัน Java
ในด้าน IDE การสนับสนุนมีเฉพาะใน VScode เท่านั้น (โดยใช้
ในการแก้ไขข้อบกพร่องของกระบวนการ Squash จะรันคอนเทนเนอร์ที่ได้รับสิทธิ์บนโหนดคลัสเตอร์ ดังนั้นคุณต้องทำความคุ้นเคยกับความสามารถต่างๆ ก่อน
โซลูชั่นที่สมบูรณ์
เรามาดูปืนใหญ่กันดีกว่า - โครงการ "ขนาดใหญ่" ที่ออกแบบมาเพื่อตอบสนองความต้องการของนักพัฒนาจำนวนมากในทันที
NB: แน่นอนว่าในรายการนี้ มีที่สำหรับยูทิลิตี้ Open Source ของเรา
เดฟสเปซ
- สาระการเรียนรู้แกนกลาง: สำหรับผู้ที่ต้องการเริ่มทำงานใน Kubernetes แต่ไม่ต้องการเจาะลึกเข้าไปในป่า.
-
GitHub . - สถิติ GH โดยย่อ: 630 ดาว, 1912 คอมมิต, ผู้ร่วมให้ข้อมูล 13 คน
- ภาษา: ไป.
- ใบอนุญาต: ใบอนุญาต Apache 2.0
โซลูชันจากบริษัทชื่อเดียวกัน ซึ่งให้บริการคลัสเตอร์ที่ได้รับการจัดการด้วย Kubernetes สำหรับการพัฒนาทีม ยูทิลิตี้นี้ถูกสร้างขึ้นสำหรับคลัสเตอร์เชิงพาณิชย์ แต่ใช้งานได้ดีกับคลัสเตอร์อื่น ๆ
เมื่อรันคำสั่ง devspace init
ในแค็ตตาล็อกโครงการ คุณจะได้รับข้อเสนอ (แบบโต้ตอบ):
- เลือกคลัสเตอร์ Kubernetes ที่ใช้งานได้
- ใช้ที่มีอยู่
Dockerfile
(หรือสร้างอันใหม่) เพื่อสร้างคอนเทนเนอร์ตามนั้น - เลือกพื้นที่เก็บข้อมูลสำหรับจัดเก็บอิมเมจคอนเทนเนอร์ ฯลฯ
หลังจากขั้นตอนการเตรียมการทั้งหมดนี้ คุณสามารถเริ่มการพัฒนาได้โดยการรันคำสั่ง devspace dev
- โดยจะสร้างคอนเทนเนอร์ อัปโหลดไปยังพื้นที่เก็บข้อมูล เปิดตัวการปรับใช้ไปยังคลัสเตอร์ และเริ่มการส่งต่อพอร์ตและการซิงโครไนซ์คอนเทนเนอร์กับไดเร็กทอรีในเครื่อง
คุณสามารถเลือกได้ คุณจะได้รับแจ้งให้ย้ายเทอร์มินัลไปยังคอนเทนเนอร์ คุณไม่ควรปฏิเสธ เพราะในความเป็นจริงแล้ว คอนเทนเนอร์เริ่มต้นด้วยคำสั่ง sleep และสำหรับการทดสอบจริง แอปพลิเคชันจะต้องเปิดด้วยตนเอง
สุดท้ายนี้ทีมงาน devspace deploy
เปิดตัวแอปพลิเคชันและโครงสร้างพื้นฐานที่เกี่ยวข้องไปยังคลัสเตอร์ หลังจากนั้นทุกอย่างก็เริ่มทำงานในโหมดการต่อสู้
การกำหนดค่าโครงการทั้งหมดจะถูกจัดเก็บไว้ในไฟล์ devspace.yaml
- นอกเหนือจากการตั้งค่าสภาพแวดล้อมการพัฒนาแล้ว คุณยังสามารถค้นหาคำอธิบายของโครงสร้างพื้นฐานในนั้นได้ ซึ่งคล้ายกับรายการ Kubernetes มาตรฐาน ซึ่งเรียบง่ายอย่างมากเท่านั้น
สถาปัตยกรรมและขั้นตอนหลักในการทำงานกับ DevSpace
นอกจากนี้ยังเป็นเรื่องง่ายที่จะเพิ่มส่วนประกอบที่กำหนดไว้ล่วงหน้า (เช่น MySQL DBMS) หรือแผนภูมิ Helm ให้กับโปรเจ็กต์ อ่านเพิ่มเติมใน
นั่งร้าน
-
เว็บไซต์ ;GitHub . - สถิติ GH โดยย่อ: 7423 ดาว, 4173 คอมมิต, ผู้ร่วมให้ข้อมูล 136 คน
- ภาษา: ไป.
- ใบอนุญาต: ใบอนุญาต Apache 2.0
ยูทิลิตี้นี้จาก Google อ้างว่าครอบคลุมความต้องการทั้งหมดของนักพัฒนาที่มีโค้ดที่จะทำงานบนคลัสเตอร์ Kubernetes การเริ่มใช้งานไม่ใช่เรื่องง่ายเหมือนกับ devspace: ไม่มีการโต้ตอบ การตรวจจับภาษา และการสร้างอัตโนมัติ Dockerfile
พวกเขาจะไม่เสนอให้คุณที่นี่
อย่างไรก็ตาม หากสิ่งนี้ไม่ทำให้คุณกลัว นี่คือสิ่งที่ Skaffold อนุญาตให้คุณทำ:
- ติดตามการเปลี่ยนแปลงซอร์สโค้ด
- ซิงโครไนซ์กับคอนเทนเนอร์พ็อดหากไม่จำเป็นต้องประกอบ
- รวบรวมคอนเทนเนอร์ที่มีโค้ด หากมีการตีความภาษา หรือรวบรวมสิ่งประดิษฐ์แล้วบรรจุลงในคอนเทนเนอร์
- รูปภาพที่ได้จะถูกตรวจสอบโดยอัตโนมัติโดยใช้
การทดสอบโครงสร้างคอนเทนเนอร์ . - การแท็กและอัพโหลดภาพไปยัง Docker Registry
- ปรับใช้แอปพลิเคชันในคลัสเตอร์โดยใช้ kubectl, Helm หรือปรับแต่ง
- ดำเนินการส่งต่อพอร์ต
- แก้ไขข้อบกพร่องแอปพลิเคชันที่เขียนด้วย Java, Node.js, Python
ขั้นตอนการทำงานในรูปแบบต่างๆ มีการอธิบายไว้ในไฟล์อย่างชัดเจน skaffold.yaml
- สำหรับโปรเจ็กต์ คุณยังสามารถกำหนดโปรไฟล์ได้หลายโปรไฟล์ซึ่งคุณสามารถเปลี่ยนขั้นตอนการประกอบและการปรับใช้บางส่วนหรือทั้งหมดได้ ตัวอย่างเช่น สำหรับการพัฒนา ให้ระบุอิมเมจฐานที่สะดวกสำหรับนักพัฒนา และสำหรับการจัดเตรียมและการผลิต - อิมเมจขั้นต่ำ (+ ใช้ securityContext
คอนเทนเนอร์หรือกำหนดคลัสเตอร์ที่จะปรับใช้แอปพลิเคชันใหม่)
คอนเทนเนอร์นักเทียบท่าสามารถสร้างได้ภายในเครื่องหรือระยะไกล: ใน
แยกกันเป็นมูลค่า noting ความเป็นไปได้ของการทดสอบภาชนะ กรอบงานการทดสอบโครงสร้างคอนเทนเนอร์ที่กล่าวถึงแล้วเสนอวิธีการตรวจสอบดังต่อไปนี้:
- การดำเนินการคำสั่งในบริบทของคอนเทนเนอร์ด้วยการติดตามสถานะการออก และตรวจสอบเอาต์พุตข้อความของคำสั่ง
- ตรวจสอบการมีอยู่ของไฟล์ในคอนเทนเนอร์และจับคู่แอตทริบิวต์ที่ระบุ
- การควบคุมเนื้อหาไฟล์โดยใช้นิพจน์ทั่วไป
- การตรวจสอบข้อมูลเมตาของรูปภาพ (
ENV
,ENTRYPOINT
,VOLUMES
ฯลฯ ) - การตรวจสอบความเข้ากันได้ของใบอนุญาต
การซิงโครไนซ์ไฟล์กับคอนเทนเนอร์ไม่ได้ดำเนินการอย่างเหมาะสมที่สุด: Skaffold เพียงสร้างไฟล์เก็บถาวรพร้อมแหล่งที่มา คัดลอกและแตกไฟล์ในคอนเทนเนอร์ (ต้องติดตั้ง tar) ดังนั้น หากงานหลักของคุณคือการซิงโครไนซ์โค้ด ควรพิจารณาโซลูชันพิเศษ (ksync) จะดีกว่า
ขั้นตอนหลักของการดำเนินงาน Skaffold
โดยทั่วไป เครื่องมือนี้ไม่อนุญาตให้คุณสร้างนามธรรมจากรายการ Kubernetes และไม่มีการโต้ตอบใด ๆ ดังนั้นจึงอาจดูเหมือนยากที่จะเชี่ยวชาญ แต่นี่ก็เป็นข้อได้เปรียบเช่นกัน - มีอิสระในการดำเนินการมากขึ้น
สวนหย่อม
-
เว็บไซต์ ;GitHub . - สถิติ GH โดยย่อ: 1063 ดาว, 1927 คอมมิต, ผู้ร่วมให้ข้อมูล 17 คน
- ภาษา: TypeScript (มีการวางแผนที่จะแบ่งโปรเจ็กต์ออกเป็นหลายองค์ประกอบ ซึ่งบางส่วนจะอยู่ใน Go และยังสร้าง SDK สำหรับการสร้างส่วนเสริมใน TypeScript/JavaScript และ Go).
- ใบอนุญาต: ใบอนุญาต Apache 2.0
เช่นเดียวกับ Skaffold Garden มีเป้าหมายเพื่อทำให้กระบวนการส่งโค้ดแอปพลิเคชันไปยังคลัสเตอร์ K8 เป็นไปโดยอัตโนมัติ ในการดำเนินการนี้ คุณต้องอธิบายโครงสร้างโปรเจ็กต์ในไฟล์ YAML ก่อน จากนั้นจึงเรียกใช้คำสั่ง garden dev
- เธอจะทำเวทมนตร์ทั้งหมด:
- รวบรวมภาชนะที่มีส่วนต่าง ๆ ของโครงการ
- ดำเนินการบูรณาการและการทดสอบหน่วย หากมีการอธิบายไว้
- เผยแพร่ส่วนประกอบของโปรเจ็กต์ทั้งหมดไปยังคลัสเตอร์
- หากซอร์สโค้ดเปลี่ยนแปลง มันจะรีสตาร์ทไปป์ไลน์ทั้งหมด
จุดสนใจหลักของการใช้เครื่องมือนี้คือการแบ่งปันคลัสเตอร์ระยะไกลกับทีมพัฒนา ในกรณีนี้ หากขั้นตอนการสร้างและการทดสอบบางส่วนได้ดำเนินการไปแล้ว การดำเนินการนี้จะช่วยเร่งกระบวนการทั้งหมดได้อย่างมาก เนื่องจาก Garden จะสามารถใช้ผลลัพธ์ที่แคชไว้ได้
โมดูลโครงการสามารถเป็นคอนเทนเนอร์, คอนเทนเนอร์ Maven, แผนภูมิ Helm, รายการสำหรับ kubectl apply
หรือแม้แต่ฟังก์ชัน OpenFaaS นอกจากนี้ ยังสามารถดึงโมดูลใดๆ ออกจากพื้นที่เก็บข้อมูล Git ระยะไกลได้ โมดูลอาจหรืออาจจะไม่กำหนดบริการ งาน และการทดสอบ บริการและงานสามารถมีการขึ้นต่อกัน ดังนั้นคุณจึงสามารถกำหนดลำดับการใช้งานของบริการเฉพาะและจัดระเบียบการเปิดตัวงานและการทดสอบได้
Garden มอบแดชบอร์ดที่สวยงามให้กับผู้ใช้ (ปัจจุบันอยู่ใน
แผงสำหรับสวน
เครื่องมือนี้ยังมีโหมด hot-reload ซึ่งจะซิงโครไนซ์การเปลี่ยนแปลงสคริปต์กับคอนเทนเนอร์ในคลัสเตอร์ ซึ่งจะช่วยเร่งกระบวนการดีบักแอปพลิเคชันได้อย่างมาก สวนก็มีของดี.
ข้อสรุป
แน่นอนว่ารายการเครื่องมือสำหรับการพัฒนาและแก้ไขแอปพลิเคชันใน Kubernetes ไม่ได้จำกัดอยู่เพียงเท่านี้ มียูทิลิตี้ที่เป็นประโยชน์และใช้งานได้จริงอีกมากมายที่คุ้มค่าหากไม่ใช่บทความแยกต่างหากอย่างน้อยก็กล่าวถึง บอกเราว่าคุณใช้อะไร พบปัญหาอะไร และคุณแก้ไขได้อย่างไร!
PS
อ่านเพิ่มเติมในบล็อกของเรา:
- «
werf - เครื่องมือของเราสำหรับ CI / CD ใน Kubernetes (รายงานภาพรวมและวิดีโอ) "; - «
Garden v0.10.0: แล็ปท็อปของคุณไม่จำเป็นต้องใช้ Kubernetes "; - «
เคล็ดลับและคำแนะนำของ Kubernetes: เกี่ยวกับการพัฒนาท้องถิ่นและการนำเสนอทางไกล "; - «
ปลั๊กอิน kubectl-debug สำหรับการดีบักในพ็อด Kubernetes '
ที่มา: will.com