
เมื่อวันที่ 29 มกราคม คณะกรรมการด้านเทคนิคของ CNCF (Cloud Native Computing Foundation) องค์กรเบื้องหลัง Kubernetes, Prometheus และผลิตภัณฑ์โอเพ่นซอร์สอื่นๆ จากโลกแห่งคอนเทนเนอร์และคลาวด์เนทิฟ เกี่ยวกับการยอมรับโครงการ โกง เข้าสู่อันดับของพวกเขา โอกาสที่ดีเยี่ยมในการทำความรู้จักกับ “ผู้จัดเตรียมพื้นที่จัดเก็บข้อมูลแบบกระจายใน Kubernetes”
ร็อคแบบไหน?
เป็นซอฟต์แวร์ที่เขียนด้วยภาษา Go ( ภายใต้ Apache License 2.0 ฟรี) ซึ่งออกแบบมาเพื่อจัดเตรียมคลังข้อมูลด้วยฟังก์ชันอัตโนมัติที่สร้างขึ้น การจัดการตนเอง การปรับขนาดตนเอง และการรักษาตนเอง. ในการดำเนินการนี้ Rook จะทำงานอัตโนมัติ (สำหรับการจัดเก็บข้อมูลที่ใช้ในสภาพแวดล้อม Kubernetes): การปรับใช้ การบูตสแตรป การกำหนดค่า การจัดเตรียม การปรับขนาด การอัปเดต การโยกย้าย การกู้คืนความเสียหาย การตรวจสอบ และการจัดการทรัพยากร
โปรเจ็กต์นี้อยู่ในขั้นอัลฟ่าและเชี่ยวชาญในการจัดเตรียมระบบจัดเก็บข้อมูลแบบกระจาย Ceph ในคลัสเตอร์ Kubernetes ผู้เขียนยังได้ประกาศแผนการที่จะสนับสนุนระบบจัดเก็บข้อมูลอื่นๆ ด้วย แต่สิ่งนี้จะไม่เกิดขึ้นในรุ่นถัดไป
ส่วนประกอบและอุปกรณ์ทางเทคนิค
งานของ Rook ภายใน Kubernetes ขึ้นอยู่กับผู้ดำเนินการพิเศษ (เราเขียนเพิ่มเติมเกี่ยวกับตัวดำเนินการ Kubernetes ใน )ซึ่งทำให้การกำหนดค่าพื้นที่จัดเก็บข้อมูลเป็นแบบอัตโนมัติและดำเนินการตรวจสอบ
ดังนั้น ผู้ประกอบการโกง ดูเหมือนจะเป็นคอนเทนเนอร์ที่มีทุกสิ่งที่จำเป็นสำหรับการปรับใช้และการบำรุงรักษาพื้นที่เก็บข้อมูลในภายหลัง ความรับผิดชอบของผู้ปฏิบัติงานประกอบด้วย:
- การสร้าง DaemonSet สำหรับ daemons หน่วยเก็บข้อมูล Ceph () ด้วยคลัสเตอร์ RADOS แบบธรรมดา
- การสร้างพ็อดสำหรับการตรวจสอบ Ceph (กับ การตรวจสอบสถานะของคลัสเตอร์ สำหรับองค์ประชุม ในกรณีส่วนใหญ่จะมีการปรับใช้สำเนาสามชุด และหากชุดใดชุดหนึ่งตก ชุดใหม่จะเพิ่มขึ้น);
- การจัดการ CRD () เพื่อตัวเขาเอง , , (ชุดทรัพยากรและบริการสำหรับการให้บริการคำขอ HTTP ที่ทำ PUT/GET บนอ็อบเจ็กต์ - เข้ากันได้กับ S3 และ Swift API)และ ;
- การเริ่มต้นพ็อดเพื่อเปิดบริการที่จำเป็นทั้งหมด
- การสร้างตัวแทน Rook
ตัวแทนของ Rook แสดงโดยพ็อดแยกกันที่ใช้งานบนแต่ละโหนด Kubernetes วัตถุประสงค์ของเอเจนต์คือการกำหนดค่าปลั๊กอิน ซึ่งให้การสนับสนุนปริมาณพื้นที่จัดเก็บข้อมูลใน Kubernetes เอเจนต์ใช้การดำเนินการของพื้นที่จัดเก็บข้อมูล: เชื่อมต่ออุปกรณ์จัดเก็บข้อมูลเครือข่าย เมานต์วอลุ่ม จัดรูปแบบระบบไฟล์ ฯลฯ

ตำแหน่งและบทบาทของส่วนประกอบ Rook ในโครงการคลัสเตอร์ Kubernetes โดยรวม
Rook มีพื้นที่เก็บข้อมูลสามประเภท:
- (ปิดกั้น,
StorageClass) — ติดตั้งที่เก็บข้อมูลไว้ที่เตาไฟเดียว - (วัตถุ,
ObjectStore) - พร้อมใช้งานทั้งภายในและภายนอกคลัสเตอร์ Kubernetes (ผ่าน S3 API) - (ระบบไฟล์ที่ใช้ร่วมกัน,
Filesystem) คือระบบไฟล์ที่สามารถติดตั้งเพื่ออ่านและเขียนจากหลายพ็อดได้
โครงสร้างภายในของ Rook ประกอบด้วย:
- มอนส์ - พ็อดสำหรับการตรวจสอบ Ceph (พร้อม ceph-mon ที่กล่าวถึงแล้ว)
- OSD - พ็อดที่มี ceph-osd daemons (Object Storage Daemons)
- มจพ - ฝักกับปีศาจ (Ceph Manager) ซึ่งให้ความสามารถในการตรวจสอบเพิ่มเติมและอินเทอร์เฟซสำหรับระบบภายนอก (การตรวจสอบ/การควบคุม)
- อาร์.จี.วาย (ไม่จำเป็น) - พ็อดพร้อมที่เก็บวัตถุ
- MDS (ไม่จำเป็น) - พ็อดพร้อมระบบไฟล์ที่ใช้ร่วมกัน

Rook daemons ทั้งหมด (Mons, OSDs, MGR, RGW, MDS) จะถูกรวบรวมเป็นไบนารี่เดียว (rook) ทำงานในคอนเทนเนอร์
สำหรับการแนะนำโดยย่อเกี่ยวกับโครงการ Rook เรื่องสั้น (12 สไลด์) นี้อาจมีประโยชน์เช่นกัน จาก Bassam Tabbara (CTO ของ Quantum Corp)
ปฏิบัติการเรือ Rook
ตัวดำเนินการ Rook รองรับ Kubernetes เวอร์ชัน 1.6 ขึ้นไปอย่างสมบูรณ์ (และบางส่วนคือ K8s รุ่นเก่า - 1.5.2). ของเขา การติดตั้ง в มีลักษณะเช่นนี้:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlนอกจากนี้เจ้าหน้าที่ Rook ก็เตรียมพร้อมแล้ว ขอบคุณที่สามารถติดตั้งได้ดังนี้:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook มีปริมาณน้อย (เช่น คุณสามารถปิดใช้งานการสนับสนุนได้ หากไม่ได้ใช้คุณลักษณะนี้ในคลัสเตอร์ของคุณ) ซึ่งจะถูกส่งต่อไป helm install ผ่านพารามิเตอร์ --set key=value[,key=value] (หรือเก็บไว้ในไฟล์ YAML แยกต่างหากและส่งผ่าน -f values.yaml).
หลังจากติดตั้งตัวดำเนินการ Rook และเปิดตัวพ็อดด้วยตัวแทนแล้ว สิ่งที่เหลืออยู่คือการสร้างคลัสเตอร์ Rook เอง การกำหนดค่าที่ง่ายที่สุดซึ่งมีลักษณะดังนี้ (rook-cluster.yaml):
apiVersion: v1
kind: Namespace
metadata:
name: rook
---
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
name: rook
namespace: rook
spec:
dataDirHostPath: /var/lib/rook
storage:
useAllNodes: true
useAllDevices: false
storeConfig:
storeType: bluestore
databaseSizeMB: 1024
journalSizeMB: 1024หมายเหตุ: ควรให้ความสนใจเป็นพิเศษกับคุณลักษณะ dataDirHostPathซึ่งเป็นค่าที่ถูกต้องซึ่งจำเป็นต่อการบันทึกคลัสเตอร์หลังจากรีบูต ในกรณีที่ใช้เป็นสถานที่จัดเก็บข้อมูลถาวรสำหรับข้อมูล Rook บนโฮสต์ Kubernetes ผู้เขียนแนะนำให้มีพื้นที่ว่างในดิสก์อย่างน้อย 5 GB ในไดเร็กทอรีนี้
สิ่งที่เหลืออยู่คือการสร้างคลัสเตอร์จากการกำหนดค่าจริง ๆ และตรวจสอบให้แน่ใจว่าพ็อดถูกสร้างขึ้นในคลัสเตอร์ (ในเนมสเปซ rook):
kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAME READY STATUS RESTARTS AGE
rook-api-1511082791-7qs0m 1/1 Running 0 5m
rook-ceph-mgr0-1279756402-wc4vt 1/1 Running 0 5m
rook-ceph-mon0-jflt5 1/1 Running 0 6m
rook-ceph-mon1-wkc8p 1/1 Running 0 6m
rook-ceph-mon2-p31dj 1/1 Running 0 6m
rook-ceph-osd-0h6nb 1/1 Running 0 5mอัพเกรด Rookคลัสเตอร์ (จนถึงเวอร์ชันใหม่) เป็นขั้นตอนที่ในขั้นตอนนี้จำเป็นต้องมีการอัปเดตส่วนประกอบทั้งหมดตามลำดับในลำดับที่แน่นอน และคุณสามารถเริ่มต้นได้หลังจากที่คุณแน่ใจว่าการติดตั้ง Rook ปัจจุบันอยู่ใน "ประสิทธิภาพ" ที่สมบูรณ์ สถานะ. คำแนะนำโดยละเอียดทีละขั้นตอนโดยใช้ตัวอย่างการอัปเดต Rook เวอร์ชัน 0.5.0 เป็น 0.5.1 สามารถพบได้ใน .
เมื่อเดือนพฤศจิกายนปีที่แล้วในบล็อก Rook การเปรียบเทียบ ผลผลิต กับอีบีเอส ผลลัพธ์ของมันคุ้มค่าแก่ความสนใจและโดยสรุปมีดังนี้:


อนาคต
สถานะปัจจุบันของ Rook คืออัลฟ่า และเวอร์ชันหลักล่าสุดคือ วางจำหน่ายในเดือนพฤศจิกายน 2017 (แก้ไขปัจจุบัน - - เข้าฉายวันที่ 14 ธันวาคม) ในช่วงครึ่งแรกของปี 2018 คาดว่าจะมีการเปิดตัวเวอร์ชันสำหรับผู้ใหญ่มากขึ้น: เบต้าและเสถียร (พร้อมสำหรับการใช้งานอย่างเป็นทางการอย่างเป็นทางการ)
ตามที่ โครงการ นักพัฒนามีวิสัยทัศน์โดยละเอียดสำหรับการพัฒนา Rook อย่างน้อยสองรุ่นถัดไป: 0.7 (ความพร้อมอยู่ในตัวติดตาม GitHub เป็น 60%) และ 0.8 การเปลี่ยนแปลงที่คาดหวัง ได้แก่ การโอนการสนับสนุนสำหรับ Ceph Block และ Ceph Object ไปยังสถานะเวอร์ชันเบต้า การจัดเตรียมไดรฟ์ข้อมูลแบบไดนามิกสำหรับ CephFS ระบบการบันทึกขั้นสูง การอัปเดตคลัสเตอร์อัตโนมัติ การสนับสนุนสแน็ปช็อตสำหรับไดรฟ์ข้อมูล
การโกงเข้าไปในจำนวน (จนถึงขั้นเริ่มต้น - "ระดับเริ่มต้น" - อยู่ในระดับเดียวกับ и ) เป็นการรับประกันถึงความสนใจที่เพิ่มขึ้นในผลิตภัณฑ์ วิธีที่จะได้รับการตั้งหลักในโลกของแอปพลิเคชันบนคลาวด์จะมีความชัดเจนมากขึ้นเมื่อมีการเปิดตัวเวอร์ชันที่เสถียร ซึ่งจะนำผู้ทดสอบและผู้ใช้รายใหม่มาสู่ Rook อย่างแน่นอน
PS
อ่านเพิ่มเติมในบล็อกของเรา:
- «";
- «";
- «";
- «";
- «'
ที่มา: will.com
