โครงการ Cozystack ได้เปิดตัว etcd-operator ที่ได้รับการออกแบบใหม่ พร้อมด้วย API ใหม่

ชุดเครื่องมือ 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 โดยสถานะของรายการในแผนงานมีดังนี้:

  • การสร้างคลัสเตอร์ etcd ใหม่ เช่น คลัสเตอร์ 3 หรือ 5 โหนด โดยระบุเวอร์ชัน etcd ที่ต้องการนั้น สามารถทำได้
  • การตรวจจับสถานะสุขภาพของกลุ่มคลัสเตอร์ - ดำเนินการแล้ว
  • ได้มีการเปิดใช้งานการเข้ารหัส TLS สำหรับการเชื่อมต่อ รวมถึงการต่ออายุใบรับรองแล้ว
  • การอัปเดตภายในเวอร์ชันแพตช์หรือเวอร์ชันย่อยหนึ่งเวอร์ชันนั้นถูกนำไปใช้เพียงบางส่วนเท่านั้น: ค่า spec.version จะถูกนำไปใช้กับโหนดใหม่เท่านั้น
  • ระบบรองรับการปรับขนาดได้ทั้งสองทิศทาง เช่น 1 -> 3 -> 5 โหนด และย้อนกลับ
  • การกำหนดค่าพารามิเตอร์ของ etcd ผ่านทางแฟล็กหรือตัวแปรสภาพแวดล้อมนั้น จะดำเนินการในรูปแบบของชุดพารามิเตอร์แบบปิดที่มีประเภทข้อมูลตายตัว
  • การกู้คืนสมาชิกคลัสเตอร์ที่ล้มเหลวหนึ่งราย หากยังคงรักษาระดับควอรัมไว้ได้นั้น ดำเนินการได้เพียงบางส่วนเท่านั้น: ยังไม่มีการทดแทนสมาชิกที่มี PVC เสียหายโดยอัตโนมัติในขณะนี้
  • การกู้คืนจากความล้มเหลวของสมาชิกคลัสเตอร์หลายรายและการสูญเสียจำนวนสมาชิกที่เพียงพอ ยังไม่ได้ถูกนำมาใช้ แต่มีแผนจะดำเนินการต่อไป
  • มีการใช้งานระบบสร้างการสำรองข้อมูลคลัสเตอร์ตามความต้องการแล้ว
  • การสำรองข้อมูลคลัสเตอร์เป็นระยะๆ นั้นถูกย้ายออกไปอยู่นอกขอบเขตความรับผิดชอบของผู้ดูแลระบบโดยเจตนา: มีการเสนอให้เรียกใช้การสร้างสแนปช็อตเป็นระยะๆ โดยใช้ CronJob มาตรฐาน

    นอกจากนี้ v1alpha2 ยังมีฟีเจอร์ที่ไม่ได้รวมอยู่ในแผนการพัฒนาอย่างเป็นทางการของผู้ให้บริการอีกด้วย:

    • หยุดคลัสเตอร์จนกว่าจะไม่มีสำเนาเหลืออยู่เลย จากนั้นหยุดชั่วคราวและเริ่มทำงานต่อโดยยังคงรักษาเอกลักษณ์ของคลัสเตอร์และโหนดไว้
    • ระบบจัดเก็บข้อมูลในหน่วยความจำ (tmpfs) พร้อมการเปลี่ยนโหนดอัตโนมัติโดยผู้ดูแลระบบ
    • การตรวจสอบความถูกต้องฝั่ง apiserver ผ่าน CEL โดยไม่ต้องใช้ webhook และไม่ต้องพึ่งพาใบรับรอง
    • ตั้งค่า PodDisruptionBudget อัตโนมัติสำหรับโหนดลงคะแนน;
    • /scale subresource ที่มี status.selector กรอกข้อมูลไว้ เพื่อให้ kubectl scale และ VerticalPodAutoscaler.targetRef ทำงานได้โดยตรง
    • ส่งต่อพารามิเตอร์การวางแผนความสัมพันธ์และข้อจำกัดเชิงโครงสร้าง (SpreadConstraints) รวมถึงการรวมข้อมูลเมตาเพิ่มเติม (additionalMetadata) จากทุกวัตถุที่สร้างขึ้นโดยตัวดำเนินการ
    • เครื่องมือสำหรับการย้ายข้อมูลจากโอเปอเรเตอร์ตัวก่อนหน้าโดยไม่ต้องหยุดคลัสเตอร์
    • ปลั๊กอิน kubectl-etcd สำหรับงานด้านการปฏิบัติงาน

    ที่มา: opennet.ru

  • ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster