Rook - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes

Rook - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes

เมื่อวันที่ 29 มกราคม คณะกรรมการด้านเทคนิคของ CNCF (Cloud Native Computing Foundation) องค์กรเบื้องหลัง Kubernetes, Prometheus และผลิตภัณฑ์โอเพ่นซอร์สอื่นๆ จากโลกแห่งคอนเทนเนอร์และคลาวด์เนทิฟ ประกาศ เกี่ยวกับการยอมรับโครงการ โกง เข้าสู่อันดับของพวกเขา โอกาสที่ดีเยี่ยมในการทำความรู้จักกับ “ผู้จัดเตรียมพื้นที่จัดเก็บข้อมูลแบบกระจายใน Kubernetes”

ร็อคแบบไหน?

โกง เป็นซอฟต์แวร์ที่เขียนด้วยภาษา Go (จัดจำหน่ายโดย ภายใต้ Apache License 2.0 ฟรี) ซึ่งออกแบบมาเพื่อจัดเตรียมคลังข้อมูลด้วยฟังก์ชันอัตโนมัติที่สร้างขึ้น การจัดการตนเอง การปรับขนาดตนเอง และการรักษาตนเอง. ในการดำเนินการนี้ Rook จะทำงานอัตโนมัติ (สำหรับการจัดเก็บข้อมูลที่ใช้ในสภาพแวดล้อม Kubernetes): การปรับใช้ การบูตสแตรป การกำหนดค่า การจัดเตรียม การปรับขนาด การอัปเดต การโยกย้าย การกู้คืนความเสียหาย การตรวจสอบ และการจัดการทรัพยากร

โปรเจ็กต์นี้อยู่ในขั้นอัลฟ่าและเชี่ยวชาญในการจัดเตรียมระบบจัดเก็บข้อมูลแบบกระจาย Ceph ในคลัสเตอร์ Kubernetes ผู้เขียนยังได้ประกาศแผนการที่จะสนับสนุนระบบจัดเก็บข้อมูลอื่นๆ ด้วย แต่สิ่งนี้จะไม่เกิดขึ้นในรุ่นถัดไป

ส่วนประกอบและอุปกรณ์ทางเทคนิค

งานของ Rook ภายใน Kubernetes ขึ้นอยู่กับผู้ดำเนินการพิเศษ (เราเขียนเพิ่มเติมเกี่ยวกับตัวดำเนินการ Kubernetes ใน บทความนี้)ซึ่งทำให้การกำหนดค่าพื้นที่จัดเก็บข้อมูลเป็นแบบอัตโนมัติและดำเนินการตรวจสอบ

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

  • การสร้าง DaemonSet สำหรับ daemons หน่วยเก็บข้อมูล Ceph (ceph-osd) ด้วยคลัสเตอร์ RADOS แบบธรรมดา
  • การสร้างพ็อดสำหรับการตรวจสอบ Ceph (กับ เซ็ฟ-จันทร์การตรวจสอบสถานะของคลัสเตอร์ สำหรับองค์ประชุม ในกรณีส่วนใหญ่จะมีการปรับใช้สำเนาสามชุด และหากชุดใดชุดหนึ่งตก ชุดใหม่จะเพิ่มขึ้น);
  • การจัดการ CRD (คำจำกัดความของทรัพยากรที่กำหนดเอง) เพื่อตัวเขาเอง กลุ่ม, พูลจัดเก็บข้อมูล, ร้านค้าวัตถุ (ชุดทรัพยากรและบริการสำหรับการให้บริการคำขอ HTTP ที่ทำ PUT/GET บนอ็อบเจ็กต์ - เข้ากันได้กับ S3 และ Swift API)และ ระบบไฟล์;
  • การเริ่มต้นพ็อดเพื่อเปิดบริการที่จำเป็นทั้งหมด
  • การสร้างตัวแทน Rook

ตัวแทนของ Rook แสดงโดยพ็อดแยกกันที่ใช้งานบนแต่ละโหนด Kubernetes วัตถุประสงค์ของเอเจนต์คือการกำหนดค่าปลั๊กอิน FlexVolumeซึ่งให้การสนับสนุนปริมาณพื้นที่จัดเก็บข้อมูลใน Kubernetes เอเจนต์ใช้การดำเนินการของพื้นที่จัดเก็บข้อมูล: เชื่อมต่ออุปกรณ์จัดเก็บข้อมูลเครือข่าย เมานต์วอลุ่ม จัดรูปแบบระบบไฟล์ ฯลฯ

Rook - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes
ตำแหน่งและบทบาทของส่วนประกอบ Rook ในโครงการคลัสเตอร์ Kubernetes โดยรวม

Rook มีพื้นที่เก็บข้อมูลสามประเภท:

  1. ปิดกั้น (ปิดกั้น, StorageClass) — ติดตั้งที่เก็บข้อมูลไว้ที่เตาไฟเดียว
  2. วัตถุ (วัตถุ, ObjectStore) - พร้อมใช้งานทั้งภายในและภายนอกคลัสเตอร์ Kubernetes (ผ่าน S3 API)
  3. ระบบไฟล์ที่ใช้ร่วมกัน (ระบบไฟล์ที่ใช้ร่วมกัน, Filesystem) คือระบบไฟล์ที่สามารถติดตั้งเพื่ออ่านและเขียนจากหลายพ็อดได้

โครงสร้างภายในของ Rook ประกอบด้วย:

  • มอนส์ - พ็อดสำหรับการตรวจสอบ Ceph (พร้อม ceph-mon ที่กล่าวถึงแล้ว)
  • OSD - พ็อดที่มี ceph-osd daemons (Object Storage Daemons)
  • มจพ - ฝักกับปีศาจ Ceph-Mgr (Ceph Manager) ซึ่งให้ความสามารถในการตรวจสอบเพิ่มเติมและอินเทอร์เฟซสำหรับระบบภายนอก (การตรวจสอบ/การควบคุม)
  • อาร์.จี.วาย (ไม่จำเป็น) - พ็อดพร้อมที่เก็บวัตถุ
  • MDS (ไม่จำเป็น) - พ็อดพร้อมระบบไฟล์ที่ใช้ร่วมกัน

Rook - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes

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 - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes
Rook - ที่เก็บข้อมูลแบบบริการตนเองสำหรับ Kubernetes

อนาคต

สถานะปัจจุบันของ Rook คืออัลฟ่า และเวอร์ชันหลักล่าสุดคือ เวอร์ชั่น 0.6วางจำหน่ายในเดือนพฤศจิกายน 2017 (แก้ไขปัจจุบัน - v0.6.2 - เข้าฉายวันที่ 14 ธันวาคม) ในช่วงครึ่งแรกของปี 2018 คาดว่าจะมีการเปิดตัวเวอร์ชันสำหรับผู้ใหญ่มากขึ้น: เบต้าและเสถียร (พร้อมสำหรับการใช้งานอย่างเป็นทางการอย่างเป็นทางการ)

ตามที่ แผนงาน โครงการ นักพัฒนามีวิสัยทัศน์โดยละเอียดสำหรับการพัฒนา Rook อย่างน้อยสองรุ่นถัดไป: 0.7 (ความพร้อมอยู่ในตัวติดตาม GitHub โดยประมาณ เป็น 60%) และ 0.8 การเปลี่ยนแปลงที่คาดหวัง ได้แก่ การโอนการสนับสนุนสำหรับ Ceph Block และ Ceph Object ไปยังสถานะเวอร์ชันเบต้า การจัดเตรียมไดรฟ์ข้อมูลแบบไดนามิกสำหรับ CephFS ระบบการบันทึกขั้นสูง การอัปเดตคลัสเตอร์อัตโนมัติ การสนับสนุนสแน็ปช็อตสำหรับไดรฟ์ข้อมูล

การโกงเข้าไปในจำนวน โครงการซีเอ็นเอฟ (จนถึงขั้นเริ่มต้น - "ระดับเริ่มต้น" - อยู่ในระดับเดียวกับ ลิงก์เกิร์ด и CoreDNS) เป็นการรับประกันถึงความสนใจที่เพิ่มขึ้นในผลิตภัณฑ์ วิธีที่จะได้รับการตั้งหลักในโลกของแอปพลิเคชันบนคลาวด์จะมีความชัดเจนมากขึ้นเมื่อมีการเปิดตัวเวอร์ชันที่เสถียร ซึ่งจะนำผู้ทดสอบและผู้ใช้รายใหม่มาสู่ Rook อย่างแน่นอน

PS

อ่านเพิ่มเติมในบล็อกของเรา:

ที่มา: will.com

เพิ่มความคิดเห็น