ชุดเครื่องมือ etcd-operator ซึ่งช่วยในการติดตั้งและบำรุงรักษาคลัสเตอร์ etcd ใน Kubernetes ได้ถูกโอนไปยังโครงการ Cozystack แล้ว พร้อมกับการโอนย้ายนี้ ได้มีการเผยแพร่การใช้งาน etcd-operator เวอร์ชันใหม่ที่เขียนขึ้นใหม่ทั้งหมด โดยใช้ API ที่ etcd-operator.cozystack.io/v1alpha2 แทนที่ etcd.aenix.io/v1alpha1 เวอร์ชันเดิม การใช้งานเวอร์ชันใหม่นี้เขียนโดย Timofey Larkin หนึ่งในผู้ดูแลโค้ดเบสเวอร์ชันเดิม เวอร์ชันเก่าถูกเก็บรักษาไว้ใน branch v1alpha1 โค้ดเขียนด้วยภาษา Go และเผยแพร่ภายใต้ใบอนุญาต Apache 2.0 Cozystack เป็นโครงการแซนด์บ็อกซ์ขององค์กรไม่แสวงหาผลกำไร CNCF
การเปลี่ยนแปลงหลักใน etcd-operator เวอร์ชันใหม่คือการลบ StatefulSet สำหรับการจัดการโหนดออกไป ตอนนี้ operator สามารถเข้าถึง Membership API ดั้งเดิมของ etcd โดยตรง (MemberAdd, MemberPromote และ MemberRemove) และเพิ่มสมาชิก เลื่อนตำแหน่งผู้เรียนให้เป็นโหนดลงคะแนน และลบโหนดออกจาก quorum โดยอัตโนมัติ ทำให้ operator ควบคุมการเป็นสมาชิกคลัสเตอร์ได้อย่างสมบูรณ์
ในขณะเดียวกัน นักพัฒนาโครงการ etcd ก็กำลังพัฒนา etcd-operator อย่างเป็นทางการของตนเองขึ้นมาใหม่ทั้งหมด ในแง่ของฟังก์ชันการทำงาน ปัจจุบัน operator อย่างเป็นทางการนั้นด้อยกว่า etcd-operator ของโครงการ Cozystack เนื่องจาก etcd-operator รุ่นก่อนหน้านี้ใช้งานได้จริงในสภาพแวดล้อมการผลิตและถูกนำไปใช้ใน Cozystack และ Kamaji การพัฒนาจึงดำเนินต่อไปแยกต่างหากจากการพัฒนา etcd อย่างเป็นทางการของโครงการ
ตัวดำเนินการของโปรเจ็กต์ Cozystack จัดการคลัสเตอร์ etcd ผ่านทรัพยากรสองตัว EtcdCluster อธิบายสถานะที่ต้องการ: จำนวนสำเนา, เวอร์ชัน etcd, พารามิเตอร์การจัดเก็บ, TLS, การตรวจสอบสิทธิ์ และการตั้งค่า etcd etcdMember จะถูกสร้างขึ้นสำหรับแต่ละโหนดในคลัสเตอร์และเป็นเจ้าของ Pod และ PVC ของโหนดนั้น แตกต่างจากโซลูชันทั่วไป ตัวดำเนินการไม่ได้ใช้ StatefulSet และจัดการ Pod และ PVC ของแต่ละโหนดอย่างอิสระ การเปลี่ยนแปลงสมาชิกในคลัสเตอร์ทำได้ผ่าน API สมาชิกของ etcd: ตัวดำเนินการเพิ่มโหนดใหม่เป็นผู้เรียน (MemberAdd) จากนั้นเลื่อนระดับให้เป็นสมาชิกที่มีสิทธิ์ออกเสียง (MemberPromote) การลบทำได้ผ่าน MemberRemove พร้อมกับการลบออกจาก quorum อย่างถูกต้อง เมื่อคลัสเตอร์หยุดชั่วคราว โหนดต่างๆ จะยังคงรักษาตัวตนของตนไว้
คุณสมบัติหลัก:
- การปรับใช้และการขยายคลัสเตอร์ในทั้งสองทิศทาง ทีละโหนด: โหนดใหม่จะเริ่มต้นในโหมดเรียนรู้ และการลบโหนดอย่างถูกต้องจะทำให้โหนดนั้นถูกลบออกจากกลุ่มโหนดที่ทำงานร่วมกันได้
- หยุดคลัสเตอร์โดยไม่สูญเสียข้อมูล (spec.replicas: 0) และดำเนินการต่อด้วยคลัสเตอร์และรหัสโหนดเดิม
- โดยค่าเริ่มต้น ข้อมูลจะถูกจัดเก็บใน PVC หรือใน tmpfs หากสามารถกู้คืนข้อมูลได้ หาก Pod สูญหาย ตัวดำเนินการจะสร้างโหนดขึ้นใหม่โดยอัตโนมัติพร้อมพื้นที่จัดเก็บข้อมูลในหน่วยความจำ
- กำหนดค่า TLS แยกต่างหากสำหรับการเชื่อมต่อไคลเอ็นต์และการเชื่อมต่อระหว่างโหนด: คุณสามารถเชื่อมต่อ Secrets ของคุณเอง หรือสั่งให้ผู้ดูแลระบบออกและต่ออายุใบรับรองผ่าน cert-manager ได้
- การตรวจสอบสิทธิ์ด้วยผู้ใช้ระดับรากเพียงคนเดียว โดยข้อมูลประจำตัวของผู้ใช้ระดับรากจะถูกกำหนดผ่านรหัสลับ
- การสร้างสแนปช็อตใน S3 หรือ PVC ผ่านทรัพยากร EtcdSnapshot และการกู้คืนคลัสเตอร์จากสแนปช็อตในระหว่างการปรับใช้ครั้งแรก
- PodDisruptionBudget อัตโนมัติ ซึ่งป้องกันไม่ให้การดำเนินการระบายข้อมูลไปรบกวนการทำงานของควอรัม
- การตรวจสอบความถูกต้องของข้อกำหนดโดยใช้ apiserver ผ่านนิพจน์ CEL ใน CRD โดยไม่ต้องใช้ webhook และไม่ต้องพึ่งพา cert-manager
- /scale subresource สำหรับ kubectl scale และ VerticalPodAutoscaler, พอร์ตเมตริก 2381, การส่งต่อ affinity และ topologySpreadConstraints;
- ปลั๊กอิน kubectl-etcd สำหรับการดำเนินการในวันที่สองหลังจากการติดตั้งคลัสเตอร์
เมื่อเปรียบเทียบกับการใช้งานเวอร์ชันเก่า (v1alpha1) มีการเปลี่ยนแปลงดังต่อไปนี้:
- กลุ่ม API ได้เปลี่ยนจาก etcd.aenix.io เป็น etcd-operator.cozystack.io แล้ว
- แทนที่จะใช้ StatefulSet ตัวดำเนินการจะใช้ทรัพยากร EtcdMember แยกต่างหากสำหรับแต่ละโหนด
- พจนานุกรม spec.options ที่กำหนดขึ้นเองได้ถูกแทนที่ด้วยชุดพารามิเตอร์ที่มีประเภท ได้แก่ quota-backend-bytes, โหมดและช่วงเวลาการบีบอัดอัตโนมัติ, จำนวนสแนปช็อต; แผนที่อิสระอนุญาตให้ส่งผ่านแฟล็กที่ขัดแย้งกับตรรกะของตัวดำเนินการได้
- ทรัพยากร EtcdBackup ได้ถูกเปลี่ยนชื่อเป็น EtcdSnapshot แล้ว โดยยังคงความหมายเดิมไว้
- การตรวจสอบความถูกต้องได้ถูกย้ายจาก webhook ไปยังกฎ CEL ใน CRD แล้ว
- บริการคลัสเตอร์ได้ถูกเปลี่ยนไปใช้โหมดไร้ส่วนหัว เพื่อให้โหนดต่างๆ มีชื่อ DNS ที่เสถียร
การย้ายข้อมูลจะดำเนินการในตำแหน่งเดิมโดยใช้ etcd-migrate เครื่องมือนี้จะปรับคลัสเตอร์ที่กำลังทำงานอยู่ของโอเปอเรเตอร์เดิมโดยไม่ต้องย้ายข้อมูล รีสตาร์ทพอด หรือสูญเสียควอรัม มันจะเปลี่ยนเฉพาะเจ้าของวัตถุ ป้ายกำกับ และคำอธิบายประกอบเท่านั้น หลังจากนั้น โอเปอเรเตอร์ใหม่จะเข้าควบคุม ลูกค้าที่เข้าถึงคลัสเตอร์ผ่าน DNS จะยังคงทำงานได้โดยไม่มีการเปลี่ยนแปลงใดๆ
การใช้งาน etcd-operator ของ Cozystack ตอบโจทย์รายการส่วนใหญ่ในแผนงานสำหรับ etcd operator อย่างเป็นทางการของโครงการ etcd โดยสถานะของรายการในแผนงานมีดังนี้:
นอกจากนี้ v1alpha2 ยังมีฟีเจอร์ที่ไม่ได้รวมอยู่ในแผนการพัฒนาอย่างเป็นทางการของผู้ให้บริการอีกด้วย:
- หยุดคลัสเตอร์จนกว่าจะไม่มีสำเนาเหลืออยู่เลย จากนั้นหยุดชั่วคราวและเริ่มทำงานต่อโดยยังคงรักษาเอกลักษณ์ของคลัสเตอร์และโหนดไว้
- ระบบจัดเก็บข้อมูลในหน่วยความจำ (tmpfs) พร้อมการเปลี่ยนโหนดอัตโนมัติโดยผู้ดูแลระบบ
- การตรวจสอบความถูกต้องฝั่ง apiserver ผ่าน CEL โดยไม่ต้องใช้ webhook และไม่ต้องพึ่งพาใบรับรอง
- ตั้งค่า PodDisruptionBudget อัตโนมัติสำหรับโหนดลงคะแนน;
- /scale subresource ที่มี status.selector กรอกข้อมูลไว้ เพื่อให้ kubectl scale และ VerticalPodAutoscaler.targetRef ทำงานได้โดยตรง
- ส่งต่อพารามิเตอร์การวางแผนความสัมพันธ์และข้อจำกัดเชิงโครงสร้าง (SpreadConstraints) รวมถึงการรวมข้อมูลเมตาเพิ่มเติม (additionalMetadata) จากทุกวัตถุที่สร้างขึ้นโดยตัวดำเนินการ
- เครื่องมือสำหรับการย้ายข้อมูลจากโอเปอเรเตอร์ตัวก่อนหน้าโดยไม่ต้องหยุดคลัสเตอร์
- ปลั๊กอิน kubectl-etcd สำหรับงานด้านการปฏิบัติงาน
ที่มา: opennet.ru
