Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes

Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes

Στις 29 Ιανουαρίου, η τεχνική επιτροπή του CNCF (Cloud Native Computing Foundation), του οργανισμού πίσω από τα Kubernetes, Prometheus και άλλα προϊόντα ανοιχτού κώδικα από τον κόσμο των κοντέινερ και του cloud native, ανακοινώθηκε σχετικά με την αποδοχή του έργου Κορώνη στις τάξεις τους. Μια εξαιρετική ευκαιρία να γνωρίσετε αυτόν τον «ενορχηστρωτή κατανεμημένης αποθήκευσης στο Kubernetes».

Τι είδους Ροκ;

Κορώνη είναι λογισμικό γραμμένο σε Go (διανέμονται από βάσει της δωρεάν άδειας Apache 2.0), που έχει σχεδιαστεί για να παρέχει σε αποθήκες δεδομένων αυτοματοποιημένες λειτουργίες που τις καθιστούν αυτοδιαχείριση, αυτοκλιμάκωση και αυτοθεραπεία. Για να γίνει αυτό, το Rook αυτοματοποιεί (για αποθήκες δεδομένων που χρησιμοποιούνται σε περιβάλλον Kubernetes): ανάπτυξη, bootstrapping, διαμόρφωση, παροχή, κλιμάκωση, ενημερώσεις, μετεγκαταστάσεις, ανάκτηση καταστροφών, παρακολούθηση και διαχείριση πόρων.

Το έργο βρίσκεται στο στάδιο άλφα και ειδικεύεται στην ενορχήστρωση του κατανεμημένου συστήματος αποθήκευσης Ceph στα συμπλέγματα Kubernetes. Οι συγγραφείς ανακοινώνουν επίσης σχέδια για υποστήριξη άλλων συστημάτων αποθήκευσης, αλλά αυτό δεν θα συμβεί στις επόμενες εκδόσεις.

Εξαρτήματα και τεχνική συσκευή

Η δουλειά του Ρουκ μέσα στο Kubernetes βασίζεται σε έναν ειδικό χειριστή (γράψαμε περισσότερα για τους χειριστές Kubernetes στο Αυτό το άρθρο), το οποίο αυτοματοποιεί τη διαμόρφωση αποθήκευσης και εφαρμόζει την παρακολούθησή του.

Ετσι, Χειριστής Rook φαίνεται να είναι ένα κοντέινερ που περιέχει όλα τα απαραίτητα για την ανάπτυξη και την επακόλουθη συντήρηση του αποθετηρίου. Οι ευθύνες του χειριστή περιλαμβάνουν:

  • δημιουργώντας ένα DaemonSet για δαίμονες αποθήκευσης Ceph (ceph-osd) με ένα απλό σύμπλεγμα RADOS.
  • δημιουργία λοβών για παρακολούθηση Ceph (από ceph-mon, έλεγχος της κατάστασης του συμπλέγματος. για απαρτία, στις περισσότερες περιπτώσεις αναπτύσσονται τρία αντίγραφα και εάν κάποιο από αυτά πέσει, δημιουργείται ένα νέο);
  • διαχείριση ΚΑΔ (Προσαρμοσμένοι ορισμοί πόρων) για τον εαυτό του σύμπλεγμα, πισίνες αποθήκευσης, αποθήκες αντικειμένων (σύνολα πόρων και υπηρεσιών για την εξυπηρέτηση αιτημάτων HTTP που εκτελούν PUT/GET σε αντικείμενα - είναι συμβατά με το S3 και το Swift API)Και συστήματα αρχείων;
  • προετοιμασία pods για την εκκίνηση όλων των απαραίτητων υπηρεσιών.
  • δημιουργία πρακτόρων Rook.

Πράκτορες του Ρουκ αντιπροσωπεύονται από ξεχωριστά pods που αναπτύσσονται σε κάθε κόμβο Kubernetes. Ο σκοπός του πράκτορα είναι η διαμόρφωση του plugin FlexVolume, το οποίο παρέχει υποστήριξη για όγκους αποθήκευσης στο Kubernetes. Ο πράκτορας υλοποιεί τη λειτουργία της αποθήκευσης: συνδέει συσκευές αποθήκευσης δικτύου, προσαρτά τόμους, μορφοποιεί το σύστημα αρχείων κ.λπ.

Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes
Θέση και ρόλος των στοιχείων Rook στο συνολικό σχήμα συμπλέγματος Kubernetes

Το Rook προσφέρει τρεις τύπους αποθήκευσης:

  1. ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ (Αποκλεισμός, StorageClass) — τοποθετεί την αποθήκευση σε μια ενιαία εστία.
  2. αντικείμενο (αντικείμενο, ObjectStore) - διαθέσιμο εντός και εκτός του συμπλέγματος Kubernetes (μέσω S3 API).
  3. κοινόχρηστο σύστημα αρχείων (Κοινόχρηστο σύστημα αρχείων, Filesystem) είναι ένα σύστημα αρχείων που μπορεί να προσαρτηθεί για ανάγνωση και γραφή από πολλαπλούς δίσκους.

Τα εσωτερικά στοιχεία του Rook περιλαμβάνουν:

  • Mons — λοβοί για παρακολούθηση Ceph (με το ήδη αναφερθέν ceph-mon).
  • OSD - λοβοί με δαίμονες ceph-osd (Object Storage Daemons).
  • M.G.R. - λοβοί με δαίμονα ceph-mgr (Ceph Manager), το οποίο παρέχει πρόσθετες δυνατότητες παρακολούθησης και διεπαφές για εξωτερικά συστήματα (παρακολούθηση/έλεγχος).
  • RGW (προαιρετικός) - λοβοί με αποθήκευση αντικειμένων.
  • MDS (προαιρετικός) - pods με κοινό σύστημα αρχείων.

Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes

Όλοι οι δαίμονες του Rook (Mons, OSD, MGR, RGW, MDS) συγκεντρώνονται σε ένα ενιαίο δυαδικό αρχείο (rook) τρέχει σε δοχείο.

Για μια σύντομη εισαγωγή στο έργο Rook, αυτή η σύντομη (12 διαφάνειες) μπορεί επίσης να είναι χρήσιμη. παρουσίαση από τον Bassam Tabbara (CTO στην Quantum Corp).

Λειτουργία του Rook

Ο χειριστής Rook υποστηρίζει πλήρως την έκδοση Kubernetes 1.6 και νεότερη (και, εν μέρει, η παλαιότερη έκδοση του K8 - 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

Διαθέσιμη μικρή ποσότητα επιλογές ρύθμισης (για παράδειγμα, μπορείτε να απενεργοποιήσετε την υποστήριξη RBAC, εάν αυτή η δυνατότητα δεν χρησιμοποιείται στο σύμπλεγμα σας), στα οποία μεταβιβάζονται helm install μέσω παραμέτρου --set key=value[,key=value] (ή αποθηκεύστε σε ξεχωριστό αρχείο YAML και μεταδώστε μέσω -f values.yaml).

Μετά την εγκατάσταση του τελεστή Rook και την εκκίνηση των pod με τους πράκτορες του, το μόνο που μένει είναι να δημιουργήσετε το ίδιο το σύμπλεγμα 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 μπορείτε να βρείτε στο τεκμηρίωση του έργου.

Τον περασμένο Νοέμβριο στο blog Rook είχε εκδοθεί σύγκριση παραγωγικότητα με EBS. Τα αποτελέσματά του είναι άξια προσοχής και εν συντομία είναι τα εξής:

Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes
Rook - ένα κατάστημα δεδομένων αυτοεξυπηρέτησης για την Kubernetes

Προοπτικές

Η τρέχουσα κατάσταση του Rook είναι άλφα και είναι η πιο πρόσφατη σημαντική κυκλοφορία μέχρι σήμερα Έκδοση 0.6, κυκλοφόρησε τον Νοέμβριο του 2017 (τρέχουσα διόρθωση - v0.6.2 — βγήκε στις 14 Δεκεμβρίου). Ήδη το πρώτο εξάμηνο του 2018 αναμένονται κυκλοφορίες πιο ώριμων εκδόσεων: beta και σταθερές (επίσημα έτοιμες για χρήση στην παραγωγή).

Σύμφωνα με οδικός χάρτης έργου, οι προγραμματιστές έχουν ένα λεπτομερές όραμα για την ανάπτυξη του Rook τουλάχιστον στις επόμενες δύο εκδόσεις: 0.7 (η ετοιμότητά του βρίσκεται στον ιχνηλάτη GitHub εκτιμάται ως 60%) και 0.8. Μεταξύ των αναμενόμενων αλλαγών είναι η μεταφορά υποστήριξης για Ceph Block και Ceph Object σε κατάσταση έκδοσης beta, δυναμική παροχή τόμων για CephFS, προηγμένο σύστημα καταγραφής, αυτοματοποιημένες ενημερώσεις συμπλέγματος, υποστήριξη στιγμιότυπων για τόμους.

Παίρνοντας τον Ρουκ στον αριθμό Έργα CNCF (μέχρι στιγμής στο πολύ πρώιμο στάδιο - "αρχικό επίπεδο" - στο ίδιο επίπεδο με σύνδεσμος и CoreDNS) αποτελεί ένα είδος εγγύησης αυξανόμενου ενδιαφέροντος για το προϊόν. Το πώς θα αποκτήσει βάση στον κόσμο των εφαρμογών cloud θα γίνει πιο σαφές μόλις κυκλοφορήσουν σταθερές εκδόσεις, κάτι που σίγουρα θα φέρει νέους δοκιμαστές και χρήστες στο Rook.

PS

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο