Ελπίζουμε να διαβάσετε πρώτο μέρος, όπου εξηγήσαμε εν συντομία τι είναι τα Canary Deployments. Δείξαμε επίσης πώς να το εφαρμόσουμε χρησιμοποιώντας τυπικούς πόρους Kubernetes.
Argo Rollouts
Το Argo Rollouts είναι ένας εγγενής ελεγκτής ανάπτυξης της Kubernetes. Παρέχει ένα CRD (Custom Resource Definition) για το Kubernetes. Χάρη σε αυτό, μπορούμε να χρησιμοποιήσουμε μια νέα οντότητα: Rollout, το οποίο διαχειρίζεται γαλαζοπράσινες και καναρινιές αναπτύξεις με διάφορες επιλογές διαμόρφωσης.
Ο ελεγκτής Argo Rollouts χρησιμοποιείται από έναν προσαρμοσμένο πόρο Rollout, Επιτρέπει πρόσθετες στρατηγικές ανάπτυξης, όπως μπλε-πράσινο και καναρίνι για Kubernetes. Πόρος Rollout παρέχει ισοδύναμη λειτουργικότητα Deployment, μόνο με πρόσθετες στρατηγικές ανάπτυξης.
πόρος Deployments έχει δύο στρατηγικές για την ανάπτυξη: RollingUpdate и Recreate. Αν και αυτές οι στρατηγικές είναι κατάλληλες για τις περισσότερες περιπτώσεις, για ανάπτυξη σε διακομιστές σε πολύ μεγάλη κλίμακα, χρησιμοποιούνται πρόσθετες στρατηγικές, όπως μπλε-πράσινο ή καναρίνι, οι οποίες δεν είναι διαθέσιμες στον ελεγκτή ανάπτυξης. Για να χρησιμοποιήσουν αυτές τις στρατηγικές στο Kubernetes, οι χρήστες έπρεπε να γράψουν σενάρια πάνω από τις αναπτύξεις τους. Ο ελεγκτής Argo Rollouts εκθέτει αυτές τις στρατηγικές ως απλές, δηλωτικές και διαμορφώσιμες παραμέτρους. https://argoproj.github.io/argo-rollouts
Υπάρχει επίσης το Argo CI, το οποίο παρέχει μια βολική διεπαφή ιστού για χρήση με το Rollouts, θα ρίξουμε μια ματιά σε αυτό στο επόμενο άρθρο.
Στο turnip της υποδομής μας (δείτε παρακάτω) έχουμε ήδη προσθέσει το install.yaml ως i/k8s/argo-rollouts/install.yaml. Με αυτόν τον τρόπο το GitlabCI θα το εγκαταστήσει στο σύμπλεγμα.
Αυτό είναι ένα πολύ απλό Python+Flask API που επιστρέφει μια απάντηση ως JSON. Θα δημιουργήσουμε το πακέτο χρησιμοποιώντας το GitlabCI και θα προωθήσουμε το αποτέλεσμα στο μητρώο του Gitlab. Στο μητρώο έχουμε δύο διαφορετικές εκδόσεις έκδοσης:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Η μόνη διαφορά μεταξύ τους είναι το αρχείο JSON που επιστράφηκε. Χρησιμοποιούμε αυτήν την εφαρμογή για να οπτικοποιήσουμε όσο πιο εύκολα γίνεται με ποια έκδοση επικοινωνούμε.
Αποθετήριο υποδομής
Σε αυτό το αποθετήριο θα χρησιμοποιήσουμε το GitlabCI για ανάπτυξη στο Kubernetes, το .gitlab-ci.yml μοιάζει με αυτό:
Rollout λειτουργεί το ίδιο με το Deployment. Εάν δεν ορίσουμε μια στρατηγική ενημέρωσης (όπως το καναρίνι εδώ) θα συμπεριφέρεται όπως η προεπιλεγμένη ανάπτυξη κυλιόμενης ενημέρωσης.
Ορίζουμε δύο βήματα στο yaml για την ανάπτυξη καναρινιών:
10% της κίνησης στο καναρίνι (περιμένετε για μη αυτόματο ΟΚ)
50% κίνηση στο καναρίνι (περιμένετε 2 λεπτά και μετά συνεχίστε στο 100%)
Εκτέλεση αρχικής ανάπτυξης
Μετά την αρχική ανάπτυξη, οι πόροι μας θα μοιάζουν με αυτό:
Και λαμβάνουμε απάντηση μόνο από την πρώτη έκδοση της εφαρμογής:
Εκτέλεση ανάπτυξης καναρινιών
Βήμα 1: 10% επισκεψιμότητα
Για να ξεκινήσουμε μια ανάπτυξη καναρίνι, πρέπει απλώς να αλλάξουμε την έκδοση εικόνας όπως κάνουμε συνήθως με τις αναπτύξεις:
Συνιστώ πραγματικά αυτό το βίντεο, δείχνει πώς συνεργάζονται το Argo Rollouts και το Argo CI:
Σύνολο
Μου αρέσει πολύ η ιδέα της χρήσης CRD που διαχειρίζονται τη δημιουργία πρόσθετων τύπων αναπτύξεων ή συνόλων αντιγραφής, ανακατεύθυνσης κυκλοφορίας κ.λπ. Η εργασία μαζί τους πηγαίνει ομαλά. Στη συνέχεια θα ήθελα να δοκιμάσω την ενοποίηση με το Argo CI.
Ωστόσο, φαίνεται να υπάρχει μια μεγάλη συγχώνευση των Argo CI και Flux CI, οπότε ίσως να περιμένω μέχρι να κυκλοφορήσει η νέα έκδοση: Argo Flux.
Είχατε κάποια εμπειρία με το Argo Rollouts ή το Argo CI;