Πώς να αναπτύξετε εφαρμογές στο Kubernetes

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

Αυτό το άρθρο θα συζητήσει ένα από τα κεντρικά αντικείμενα στο Kubernetes: την ανάπτυξη. Ο στόχος είναι να κατανοήσουμε τη συμπεριφορά του και τον τρόπο δημιουργίας, ενημέρωσης και διαγραφής του.

Τι είναι η ανάπτυξη;

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

Μια ανάπτυξη δηλώνει ένα μεμονωμένο αντικείμενο στο YAML το οποίο όχι μόνο δημιουργεί τα Pods αλλά διασφαλίζει επίσης ότι είναι ενημερωμένα και εκτελούνται. Μπορείτε επίσης εύκολα να προσαρμόσετε αυτόματα τις εφαρμογές σας χρησιμοποιώντας μια ανάπτυξη στο Kubernetes. Έτσι, μια ανάπτυξη χρησιμοποιείται για την κλίμακα, την ανάπτυξη και την επαναφορά εκδόσεων των εφαρμογών σας στο Pods.

Μια ανάπτυξη λέει επίσης στην Kubernetes πόσα αντίγραφα ενός Pod θέλουμε να τρέξουμε και η Kubernetes φροντίζει για τα υπόλοιπα. Ο συσχετισμένος ελεγκτής θα δημιουργήσει ένα ReplicaSet από τη διαμόρφωσή σας κατά τη δημιουργία μιας ανάπτυξης. Ο ελεγκτής που σχετίζεται με το ReplicaSet θα δημιουργήσει μια σειρά από Pods από τη διαμόρφωση του ReplicaSet.

Τα πλεονεκτήματα της χρήσης μιας ανάπτυξης αντί της απευθείας δημιουργίας ενός ReplicaSet είναι:

  • Ιστορικό του αντικειμένου: κάθε αλλαγή στο αντικείμενο (μέσω “εφαρμογή” ή “επεξεργασίας”) θα δημιουργήσει ένα αντίγραφο ασφαλείας της προηγούμενης έκδοσης.
  • Διαχείριση διάθεσης και επαναφοράς: Μπορείτε να επιστρέψετε σε μια διαμόρφωση σε σχέση με το προηγούμενο σημείο.
  Πώς να επιλέξετε το μικρόφωνό σας σε Mac

Δημιουργία Ανάπτυξης

Υπάρχουν δύο μέθοδοι που μπορούμε να χρησιμοποιήσουμε για να δημιουργήσουμε μια ανάπτυξη Kubernetes:

Επιτακτική Μέθοδος

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

Για να χρησιμοποιήσετε την επιτακτική μέθοδο, απλώς χρησιμοποιήστε την παρακάτω εντολή:

kubectl create deployment nginx-deployment --image nginx --port=80

Δηλωτική Μέθοδος

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

Για να χρησιμοποιήσετε την δηλωτική ανάπτυξη θα πρέπει να δημιουργήσετε ένα αρχείο YAML.

Αρχείο YAML για ανάπτυξη με το όνομα new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

Σε αυτό το αρχείο YAML, αφού ορίσετε την έκδοση του Kubernetes API, τον τύπο του αντικειμένου που δημιουργείτε και το όνομα της ανάπτυξης, υπάρχει η ενότητα προδιαγραφών. Σε αυτήν την ενότητα, ορίζετε πρώτα το κλειδί αντιγράφων, το οποίο υποδεικνύει τον αριθμό των περιπτώσεων Pod που η ανάπτυξη πρέπει να διατηρεί ενεργή.

Χρησιμοποιήστε μια ετικέτα επιλογής για να αναγνωρίσετε τα Pods στην ανάπτυξη. Για αυτό, μπορείτε να χρησιμοποιήσετε την ετικέτα ανάπτυξης, η οποία λέει ότι όλες οι ομάδες που ταιριάζουν με αυτές τις ετικέτες ομαδοποιούνται σε ανάπτυξη.

Μετά από αυτό, έχετε το αντικείμενο προτύπου όπου έχετε ένα μοντέλο Pod μέσα στις προδιαγραφές ανάπτυξης. Όταν η ανάπτυξη δημιουργεί Pods, τα δημιουργεί χρησιμοποιώντας αυτό το πρότυπο. Η προδιαγραφή ενός κανονικού pod μπορεί να βρεθεί κάτω από το κλειδί προτύπου.

  Πώς να διαχειριστείτε τις ρυθμίσεις απορρήτου του LinkedIn

Με αυτήν την ανάπτυξη, οι εικόνες Nginx με ετικέτες θα αναπτυχθούν στα Pods. Επιπλέον, πρέπει επίσης να είστε προσεκτικοί σε αυτό το σημείο και το Pod είναι η μονάδα επεκτασιμότητας στο Kubernetes, επομένως πρέπει να σκεφτείτε το μοτίβο που θέλετε να χρησιμοποιήσετε εάν βάλετε πολλά δοχεία στο ίδιο Pod.

Στη συνέχεια, εφαρμόστε το αρχείο new_deployment.yaml Yaml, χρησιμοποιήστε την ακόλουθη εντολή:

kubectl apply -f new_deployment.yaml

Μετά από λίγα δευτερόλεπτα, μπορείτε να λάβετε την κατάσταση ανάπτυξης χρησιμοποιώντας τα ακόλουθα:

kubectl get all

Ανάκτηση και ενημέρωση ανάπτυξης

Σημειώστε ότι έχετε δημιουργήσει τα Pods, την ανάπτυξη και επίσης ένα Replicaset. Έτσι, μια ανάπτυξη δημιουργεί και διαχειρίζεται πάντα ένα Replicaset. Τώρα μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή για να περιγράψετε την ανάπτυξη:

kubectl describe deployment nginx-deployment 

Τώρα έχετε μια πλήρη περιγραφή της ανάπτυξης. Υπογραμμίζει τη στρατηγική που χρησιμοποιείται για τη δημιουργία/αναδημιουργία των ομάδων όταν μια ενημέρωση έχει οριστεί ως RollingUpdate.

Η στρατηγική RollingUpdate επιτρέπει μια τακτική μετεγκατάσταση μιας έκδοσης μιας εφαρμογής σε μια νεότερη έκδοση. Είναι η προεπιλεγμένη στρατηγική που χρησιμοποιείται στο Kubernetes.

Εκτός από αυτό, έχουμε επίσης τις ακόλουθες στρατηγικές:

  • Recreate: Τερματίζει τις τρέχουσες παρουσίες του Pod και τις ‘αναδημιουργεί’ με τη νέα έκδοση.
  • Μπλε/Πράσινο: Αυτή η στρατηγική δημιουργεί δύο ξεχωριστά αλλά πανομοιότυπα περιβάλλοντα. Στο μπλε περιβάλλον, η εφαρμογή εκτελείται ως έχει, ενώ στο πράσινο περιβάλλον, η εφαρμογή εκτελείται όπως θα εκτελείται στο μέλλον.
  • Canary: Μια στρατηγική ανάπτυξης όπου ένα υποσύνολο χρηστών εμπλέκεται στη σταδιακή απελευθέρωση μιας εφαρμογής ή μιας υπηρεσίας.

Εάν επιλέξετε την “κυλιόμενη ενημέρωση”, μπορείτε να διαμορφώσετε τη συμπεριφορά της σχετικά με τον αριθμό των αντιγράφων που θέλετε.

  • Το maxSurge σάς επιτρέπει να υποδείξετε (σε ποσοστό ή απόλυτους όρους) πόσα Pods μπορεί να δημιουργήσει επιπλέον του αριθμού των αντιγράφων που έχουν διαμορφωθεί αυτήν τη στιγμή.
  • Το maxUnavailable σάς επιτρέπει να υποδείξετε (σε ποσοστά ή απόλυτες τιμές) πόσα Pods μπορεί να είναι “μη διαθέσιμα” κατά την ενημέρωση, ανάλογα με τον αριθμό των αντιγράφων που έχουν διαμορφωθεί.
  11 Καλύτερο λογισμικό διαχείρισης πόρων για μικρές και μεσαίες επιχειρήσεις

Ανάλογα με την εφαρμογή σας και το πρόγραμμα αυτόματης κλίμακας, αυτές οι διαμορφώσεις θα σας επιτρέψουν να εξασφαλίσετε QoS ή να επιταχύνετε τις αναπτύξεις σας.

Στη συνέχεια, πρέπει να κλιμακώσετε τα Pods στο 10 και να αλλάξετε την ετικέτα εικόνας Nginx στην πιο πρόσφατη.

kubectl scale deployment nginx-deployment --replicas=10

Σημειώστε ότι έχουμε 5 κοντέινερ που δημιουργούνται και από 10 Pods, έχουμε 5 διαθέσιμα.

Μετά από μερικά δευτερόλεπτα, χρησιμοποιήστε την ακόλουθη εντολή:

kubectl get all

Εδώ μπορείτε να δείτε ότι όλα τα Pods έχουν δημιουργηθεί και τα κοντέινερ εκτελούνται.

Διαγραφή της ανάπτυξής σας

Για να διαγράψετε μια ανάπτυξη Kubernetes, μπορείτε να χρησιμοποιήσετε τις ακόλουθες εντολές:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: Απλοποιήστε τις αναπτύξεις

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

Στο λεξιλόγιο Helm, μια εφαρμογή ονομάζεται απελευθέρωση. Συνδέεται με ένα γράφημα, δηλαδή μια συλλογή αρχείων διαμόρφωσης σε μορφή YAML που περιέχει καθολικές μεταβλητές και πρότυπα που περιγράφουν πόρους Kubernetes.

συμπέρασμα

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

Μπορείτε επίσης να εξερευνήσετε μερικά από τα καλύτερα μαθήματα Kubernetes για να μάθετε από την αρχή και να γίνετε ειδικός.