Αν εργάζεστε στον κόσμο της ανάπτυξης λογισμικού, σίγουρα έχετε ακούσει για το Kubernetes. Αλλά τι ακριβώς είναι και γιατί έχει γίνει το de facto πρότυπο για τη διαχείριση containerized εφαρμογών; Αυτός ο οδηγός θα σας πάει από τα βασικά στις θεμελιώδεις έννοιες, με πρακτικά παραδείγματα και διαγράμματα.
Πριν το Kubernetes: Λίγη Ιστορία
- Παραδοσιακό Deployment: Αρχικά, οι εφαρμογές εκτελούνταν σε φυσικούς διακομιστές. Ακριβό, δύσκολο να κλιμακωθεί.
- Εικονικοποιημένο Deployment: Μετά ήρθαν οι Virtual Machines (VMs). Βελτίωσαν τη χρήση πόρων αλλά κάθε VM τρέχει ένα πλήρες λειτουργικό σύστημα.
- Containerized Deployment: Τα containers (όπως Docker) μοιράζονται το ίδιο host OS αλλά τρέχουν απομονωμένες διεργασίες. Είναι ελαφριά, γρήγορα και φορητά.
Εδώ μπαίνει το Kubernetes.
Τι είναι το Kubernetes;
Το Kubernetes (συχνά συντομογραφία K8s) είναι μια πλατφόρμα ανοιχτού κώδικα για ενορχήστρωση containers. Αυτοματοποιεί το deployment, την κλιμάκωση και τη διαχείριση containerized εφαρμογών. Δημιουργήθηκε από τη Google και συντηρείται πλέον από το Cloud Native Computing Foundation (CNCF).
Η Αρχιτεκτονική ενός Kubernetes Cluster
Control Plane
Το Control Plane είναι ο "εγκέφαλος" του cluster:
- API Server (
kube-apiserver): Η πύλη εισόδου στο cluster. - etcd: Μια συνεπής βάση δεδομένων κλειδιού-τιμής.
- Scheduler (
kube-scheduler): Αναθέτει νέα Pods σε διαθέσιμα Worker Nodes. - Controller Manager (
kube-controller-manager): Εκτελεί βρόχους ελέγχου.
Worker Node
- Kubelet: Agent που διασφαλίζει ότι τα containers τρέχουν.
- Kube-proxy: Διαχειρίζεται κανόνες δικτύου.
- Container Runtime: Λογισμικό που τρέχει containers (Docker,
containerd,CRI-O).
Θεμελιώδη Αντικείμενα Kubernetes
Pod
Το Pod είναι η μικρότερη μονάδα εκτέλεσης. Αντιπροσωπεύει ένα ή περισσότερα containers.
Deployment
Ένα Deployment περιγράφει την επιθυμητή κατάσταση για μια ομάδα ίδιων Pods.
# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Service
Ένα Service παρέχει ένα σταθερό σημείο πρόσβασης για μια ομάδα Pods.
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP # Default - exposes the service only within the cluster
Τύποι Services:
ClusterIP: Εκθέτει την υπηρεσία σε εσωτερικό IP cluster (προεπιλογή).NodePort: Εκθέτει σε στατική θύρα σε κάθε Worker Node.LoadBalancer: Δημιουργεί εξωτερικό load balancer.
Ingress
Ένα Ingress λειτουργεί ως "ευφυής δρομολογητής" για εξωτερική κίνηση.
# example-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: mysite.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 8080 - path: /ui pathType: Prefix backend: service: name: ui-service port: number: 3000
Άλλα Χρήσιμα Αντικείμενα
- Namespace: Δημιουργεί "εικονικά clusters" μέσα σε ένα φυσικό cluster.
- ConfigMap και Secret: Για διαχείριση δεδομένων ρύθμισης και μυστικών.
- StatefulSet: Παρόμοιο με Deployment, αλλά για stateful εφαρμογές.
- PersistentVolume (PV) και PersistentVolumeClaim (PVC): Για μόνιμη αποθήκευση.
Συμπέρασμα
Το Kubernetes είναι ένα απίστευτα ισχυρό εργαλείο, αλλά η καμπύλη εκμάθησης μπορεί να είναι απότομη.
Τι να κάνετε τώρα;
- Πειραματιστείτε τοπικά: Εγκαταστήστε Minikube ή Kind.
- Χρησιμοποιήστε
kubectl: Εξοικειωθείτε με την εντολήkubectl. - Εξερευνήστε τα επίσημα tutorials: Η τεκμηρίωση Kubernetes είναι εξαιρετικός πόρος.
Η ενορχήστρωση containers είναι θεμελιώδης δεξιότητα στον cloud-native κόσμο. Καλή διασκέδαση!