spinny:~/writing $ vim introduction-to-kubernetes.md
1~2Αν εργάζεστε στον κόσμο της ανάπτυξης λογισμικού, σίγουρα έχετε ακούσει για το Kubernetes. Αλλά τι ακριβώς είναι και γιατί έχει γίνει το de facto πρότυπο για τη διαχείριση containerized εφαρμογών; Αυτός ο οδηγός θα σας πάει από τα βασικά στις θεμελιώδεις έννοιες, με πρακτικά παραδείγματα και διαγράμματα.3~4## Πριν το Kubernetes: Λίγη Ιστορία5~61. **Παραδοσιακό Deployment**: Αρχικά, οι εφαρμογές εκτελούνταν σε φυσικούς διακομιστές. Ακριβό, δύσκολο να κλιμακωθεί.72. **Εικονικοποιημένο Deployment**: Μετά ήρθαν οι Virtual Machines (VMs). Βελτίωσαν τη χρήση πόρων αλλά κάθε VM τρέχει ένα πλήρες λειτουργικό σύστημα.83. **Containerized Deployment**: Τα containers (όπως Docker) μοιράζονται το ίδιο host OS αλλά τρέχουν απομονωμένες διεργασίες. Είναι ελαφριά, γρήγορα και φορητά.9~10Εδώ μπαίνει το **Kubernetes**.11~12## Τι είναι το Kubernetes;13~14Το Kubernetes (συχνά συντομογραφία **K8s**) είναι μια πλατφόρμα ανοιχτού κώδικα για ενορχήστρωση containers. Αυτοματοποιεί το deployment, την κλιμάκωση και τη διαχείριση containerized εφαρμογών. Δημιουργήθηκε από τη Google και συντηρείται πλέον από το Cloud Native Computing Foundation (CNCF).15~16## Η Αρχιτεκτονική ενός Kubernetes Cluster17~18```mermaid19graph TD20 subgraph "Control Plane (Master)"21 A["API Server"]22 B["etcd"]23 C["Scheduler"]24 D["Controller Manager"]25 end26~27 subgraph "Worker Node 1"28 E["Kubelet"] --- F["Container Runtime"]29 G["Kube-proxy"]30 F --- H["Pod"]31 F --- I["Pod"]32 end33~34 subgraph "Worker Node 2"35 J["Kubelet"] --- K["Container Runtime"]36 L["Kube-proxy"]37 K --- M["Pod"]38 end39~40 A -- "Communicates with" --> E41 A -- "Communicates with" --> J42 User -- "kubectl" --> A43 C -- "Assigns Pods to Nodes" --> E44 D -- "Maintains state" --> A45 A -- "Saves/Reads state" --> B46```47~48### Control Plane49~50Το Control Plane είναι ο "εγκέφαλος" του cluster:51~52- **API Server (`kube-apiserver`)**: Η πύλη εισόδου στο cluster.53- **etcd**: Μια συνεπής βάση δεδομένων κλειδιού-τιμής.54- **Scheduler (`kube-scheduler`)**: Αναθέτει νέα Pods σε διαθέσιμα Worker Nodes.55- **Controller Manager (`kube-controller-manager`)**: Εκτελεί βρόχους ελέγχου.56~57### Worker Node58~59- **Kubelet**: Agent που διασφαλίζει ότι τα containers τρέχουν.60- **Kube-proxy**: Διαχειρίζεται κανόνες δικτύου.61- **Container Runtime**: Λογισμικό που τρέχει containers (Docker, `containerd`, `CRI-O`).62~63## Θεμελιώδη Αντικείμενα Kubernetes64~65### Pod66~67Το **Pod** είναι η μικρότερη μονάδα εκτέλεσης. Αντιπροσωπεύει ένα ή περισσότερα containers.68~69### Deployment70~71Ένα **Deployment** περιγράφει την επιθυμητή κατάσταση για μια ομάδα ίδιων Pods.72~73```yaml74# nginx-deployment.yaml75apiVersion: apps/v176kind: Deployment77metadata:78 name: nginx-deployment79spec:80 replicas: 381 selector:82 matchLabels:83 app: nginx84 template:85 metadata:86 labels:87 app: nginx88 spec:89 containers:90 - name: nginx91 image: nginx:1.14.292 ports:93 - containerPort: 8094```95~96### Service97~98Ένα **Service** παρέχει ένα **σταθερό σημείο πρόσβασης** για μια ομάδα Pods.99~100```mermaid101graph TD102 subgraph "Service (nginx-service)"103 A["ClusterIP: 10.96.0.10"]104 end105~106 subgraph "Pods"107 B("Pod 1 - IP: 192.168.1.2")108 C("Pod 2 - IP: 192.168.1.3")109 D("Pod 3 - IP: 192.168.1.4")110 end111~112 A -- "Selector: app=nginx" --> B113 A -- "Selector: app=nginx" --> C114 A -- "Selector: app=nginx" --> D115~116 Client -- "Request to nginx-service" --> A117```118~119```yaml120# nginx-service.yaml121apiVersion: v1122kind: Service123metadata:124 name: nginx-service125spec:126 selector:127 app: nginx128 ports:129 - protocol: TCP130 port: 80131 targetPort: 80132 type: ClusterIP # Default - exposes the service only within the cluster133```134~135Τύποι Services:136- `ClusterIP`: Εκθέτει την υπηρεσία σε εσωτερικό IP cluster (προεπιλογή).137- `NodePort`: Εκθέτει σε στατική θύρα σε κάθε Worker Node.138- `LoadBalancer`: Δημιουργεί εξωτερικό load balancer.139~140### Ingress141~142Ένα **Ingress** λειτουργεί ως "ευφυής δρομολογητής" για εξωτερική κίνηση.143~144```mermaid145graph LR146 User -- "mysite.com/api" --> Ingress147 User -- "mysite.com/ui" --> Ingress148~149 subgraph "Cluster"150 Ingress -- "/api" --> ServiceA("api-service")151 Ingress -- "/ui" --> ServiceB("ui-service")152~153 ServiceA --> PodA1("API Pod 1")154 ServiceA --> PodA2("API Pod 2")155~156 ServiceB --> PodB1("UI Pod 1")157 ServiceB --> PodB2("UI Pod 2")158 end159```160~161```yaml162# example-ingress.yaml163apiVersion: networking.k8s.io/v1164kind: Ingress165metadata:166 name: example-ingress167spec:168 rules:169 - host: mysite.com170 http:171 paths:172 - path: /api173 pathType: Prefix174 backend:175 service:176 name: api-service177 port:178 number: 8080179 - path: /ui180 pathType: Prefix181 backend:182 service:183 name: ui-service184 port:185 number: 3000186```187~188### Άλλα Χρήσιμα Αντικείμενα189~190- **Namespace**: Δημιουργεί "εικονικά clusters" μέσα σε ένα φυσικό cluster.191- **ConfigMap και Secret**: Για διαχείριση δεδομένων ρύθμισης και μυστικών.192- **StatefulSet**: Παρόμοιο με Deployment, αλλά για stateful εφαρμογές.193- **PersistentVolume (PV) και PersistentVolumeClaim (PVC)**: Για μόνιμη αποθήκευση.194~195## Συμπέρασμα196~197Το Kubernetes είναι ένα απίστευτα ισχυρό εργαλείο, αλλά η καμπύλη εκμάθησης μπορεί να είναι απότομη.198~199**Τι να κάνετε τώρα;**200- **Πειραματιστείτε τοπικά**: Εγκαταστήστε [Minikube](https://minikube.sigs.k8s.io/docs/start/) ή [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/).201- **Χρησιμοποιήστε `kubectl`**: Εξοικειωθείτε με την εντολή `kubectl`.202- **Εξερευνήστε τα επίσημα tutorials**: Η [τεκμηρίωση Kubernetes](https://kubernetes.io/docs/tutorials/) είναι εξαιρετικός πόρος.203~204Η ενορχήστρωση containers είναι θεμελιώδης δεξιότητα στον cloud-native κόσμο. Καλή διασκέδαση!205~
NORMAL · introduction-to-kubernetes.md [readonly]205 lines · :q to close