Το να ενεργοποιήσεις το Kubernetes στο Docker Desktop είναι σαν να προσθέτεις μια επέκταση σε ένα διαμέρισμα που ήδη κατοικείς: τα θεμέλια (η εικονική μηχανή Linux, η μηχανή Docker, το δίκτυο προς το localhost) είναι στη θέση τους, μένει να τσεκάρεις ένα κουτάκι και να αφήσεις την εφαρμογή να κατεβάσει καμιά δεκαριά εικόνες, να ανεβάσει το control plane και να γράψει μία γραμμή στο αρχείο σου ~/.kube/config. Πέντε λεπτά αργότερα, το kubectl get nodes απαντά docker-desktop Ready. Σε αυτό το μάθημα, ξετυλίγεις την εγκατάσταση βήμα προς βήμα για το σύστημά σου, επαληθεύεις κάθε βήμα με μια εντολή της οποίας γνωρίζεις την αναμενόμενη έξοδο, και φεύγεις με τη λίστα των πέντε βλαβών που μπλοκάρουν εννέα στους δέκα φοιτητές την πρώτη μέρα, με το ακριβές μήνυμα και τη θεραπεία.
Το Docker Desktop τρέχει μια ελαφριά εικονική μηχανή Linux: σε Windows είναι μια διανομή WSL 2 με όνομα docker-desktop, σε macOS μια VM Apple Virtualization, σε Linux μια VM QEMU. Η μηχανή Docker ζει μέσα της, και το Kubernetes επίσης: όταν το ενεργοποιείς, το Docker Desktop κατεβάζει τις εικόνες του control plane από το Docker Hub (docker/desktop-kubernetes, desktop-kubernetes-etcd, desktop-kubernetes-apiserver…), τις εκκινεί ως προνομιακά containers σε αυτή τη VM, παράγει τα πιστοποιητικά, έπειτα προσθέτει στο ~/.kube/config σου ένα context docker-desktop που δείχνει στο https://kubernetes.docker.internal:6443. Εγκαθιστά επίσης το kubectl (στο C:\Program Files\Docker\Docker\resources\bin σε Windows, /usr/local/bin/kubectl σε macOS): δεν έχεις τίποτα άλλο να κατεβάσεις.
Δύο τρόποι παροχής του cluster υπάρχουν από το Docker Desktop 4.38. Το Kubeadm δημιουργεί έναν μόνο κόμβο, με την έκδοση Kubernetes που επιλέγει το Docker Desktop (v1.34.1 στην 4.68)· είναι η προεπιλεγμένη λειτουργία και αυτή του μαθήματος. Το kind (Kubernetes in Docker) δημιουργεί πολλούς κόμβους, καθένας από τους οποίους είναι ένα container, και σε αφήνει να επιλέξεις την έκδοση· ξεκινά πιο γρήγορα αλλά δεν μοιράζεται το κλασικό αποθετήριο εικόνων Docker (χρειάζεται η λειτουργία «containerd image store»). Όσο μαθαίνεις, ένας κόμβος αρκεί: όλα όσα κάνει το μάθημα χωρούν στο docker-desktop.
| Σύστημα | Τι εγκαθιστάς | Πού ρυθμίζεται η μνήμη | Ενσωματωμένο Kubernetes; |
|---|---|---|---|
| Windows 10 (21H2+) / 11 | Docker Desktop, μηχανή WSL 2 | αρχείο %UserProfile%\.wslconfig, έπειτα wsl --shutdown | ναι |
| macOS 13+ (Intel ή Apple Silicon) | Docker Desktop (.dmg του chip σου) | Settings → Resources → Memory, «Apply & restart» | ναι |
| Linux (Ubuntu, Debian, Fedora…) | Docker Desktop για Linux (.deb / .rpm) ή Docker Engine μόνο | Settings → Resources (Desktop)· όλη η RAM (Engine) | ναι με Docker Desktop· όχι με Docker Engine μόνο (χρησιμοποίησε τότε minikube ή kind) |
| Ρύθμιση Kubernetes (Settings → Kubernetes) | Τι κάνει | Η επιλογή μας |
|---|---|---|
| Enable Kubernetes | Εγκαθιστά και εκκινεί το cluster· το ξετσεκάρισμα σταματά και διαγράφει τα containers του cluster και αφαιρεί το kubectl | τσεκαρισμένο |
| Cluster provisioning method | Kubeadm (1 κόμβος, επιβαλλόμενη έκδοση) ή kind (πολλοί κόμβοι, έκδοση κατ' επιλογή) | Kubeadm |
| Show system containers (advanced) | Δείχνει τα containers k8s_… του cluster στο docker ps | τσεκαρισμένο (χρήσιμο για κατανόηση, μάθημα 01 βήμα 7) |
| Reset Kubernetes cluster | Διαγράφει ολόκληρο το cluster (namespaces, Deployments, τόμους) και το ξαναδημιουργεί καθαρό· μόνος τρόπος για αλλαγή έκδοσης Kubernetes | μόνο για αποσφαλμάτωση |
Η ρύθμιση αποθηκεύεται σε ένα αρχείο JSON: σε Windows %APPDATA%\Docker\settings-store.json, κλειδί KubernetesEnabled (true/false) και KubernetesMode (kubeadm/kind). Το να το γνωρίζεις χρησιμεύει όταν η διεπαφή αρνείται να ανοίξει.
Windows: εγκατάσταση WSL 2, έπειτα Docker Desktop. Άνοιξε το PowerShell ως διαχειριστής και εγκατάστησε το WSL αν δεν έχει ήδη γίνει (η εντολή δεν κάνει τίποτα αν το WSL υπάρχει):
wsl --install
wsl --statusΕπανεκκίνησε αν σου ζητηθεί. Κατέβασε έπειτα το «Docker Desktop for Windows» από το docs.docker.com/desktop, εκκίνησε τον installer, άφησε τσεκαρισμένο το Use WSL 2 instead of Hyper-V, έπειτα ξεκίνα το Docker Desktop και περίμενε να σταματήσει να αναβοσβήνει το εικονίδιο της φάλαινας στη γραμμή εργασιών. Τι πρέπει να δεις:
wsl --list --verbose NAME STATE VERSION
* docker-desktop Running 2
…Η διανομή docker-desktop είναι η VM μέσα στην οποία θα τρέχουν το Docker και το Kubernetes. Αν το VERSION δείχνει 1, μετάτρεψέ την: wsl --set-version docker-desktop 2.
Windows: δώσε μνήμη στο WSL 2. Από προεπιλογή το WSL παίρνει τη μισή RAM σου· συχνά αρκεί, αλλά για να μην εξαρτάσαι από την τύχη, όρισέ την. Δημιούργησε το αρχείο %UserProfile%\.wslconfig:
notepad $env:UserProfile\.wslconfigΕπικόλλησε, αποθήκευσε, έπειτα επανεκκίνησε τη VM WSL (το Docker Desktop επανεκκινεί μόνο του από πίσω):
[wsl2]
memory=8GB
processors=4wsl --shutdownΤι πρέπει να δεις, μόλις επιστρέψει το Docker Desktop: το docker info --format '{{.MemTotal}}' επιστρέφει έναν αριθμό κοντά στο 8 000 000 000 (στο μηχάνημα του μαθήματος, χωρίς όριο, επιστρέφει 33480151040, δηλαδή 31 GB). Το μάθημα λειτουργεί από 4 GB και πάνω· τα 8 GB σε βάζουν σε άνεση έως την ενότητα 8.
macOS: εγκατάσταση και ρύθμιση της μνήμης. Κατέβασε το .dmg που αντιστοιχεί στο chip σου (Apple Silicon ή Intel), σύρε το Docker στο Applications, εκκίνησέ το. Έπειτα Settings (γρανάζι) → Resources → Advanced: σπρώξε το Memory στα 8 GB (4 GB ελάχιστο) και τα CPUs στα 4, έπειτα Apply & restart. Τι πρέπει να δεις: το docker info --format '{{.MemTotal}}' αντανακλά την τιμή σου. Το kubectl θα εγκατασταθεί στο /usr/local/bin/kubectl κατά την ενεργοποίηση του Kubernetes· αν είχες ένα μέσω Homebrew και τα δύο τσακώνονται, διάγραψε αυτό του Docker ή του Homebrew, όχι και τα δύο (μάθημα 03).
Linux: Docker Desktop, ή όχι. Δύο διαδρομές. Το Docker Desktop για Linux (πακέτο .deb ή .rpm στο docs.docker.com/desktop/setup/install/linux) δίνει ακριβώς το ίδιο ενσωματωμένο Kubernetes όπως σε Windows και macOS· απαιτεί KVM (το lsmod | grep kvm πρέπει να λιστάρει το module) και μια γραφική συνεδρία. Το Docker Engine μόνο (docker-ce μέσω apt/dnf) δεν περιλαμβάνει Kubernetes: αν είσαι σε server ή προτιμάς το Engine, εγκατάστησε kind ή minikube· όλες οι εντολές kubectl του μαθήματος θα μείνουν ταυτόσημες, μόνο η πρόσβαση στα Services θα αλλάξει (μάθημα 04). Στο Docker Desktop για Linux, το kubectl δεν παρέχεται: εγκατάστησέ το από το kubernetes.io/docs/tasks/tools στο /usr/local/bin/kubectl.
Ενεργοποίηση του Kubernetes. Άνοιξε Docker Desktop → Settings → Kubernetes → τσέκαρε Enable Kubernetes. Άφησε το Cluster provisioning method στο Kubeadm (ένας κόμβος), τσέκαρε Show system containers (advanced), έπειτα Apply & restart. Στις εκδόσεις 4.51 και άνω, μπορείς επίσης να περάσεις από την προβολή Kubernetes του πίνακα ελέγχου (εικονίδιο στην πλευρική μπάρα) → Create cluster → ίδια επιλογή Kubeadm / kind → Create. Το Docker Desktop κατεβάζει τότε τις εικόνες του control plane· μπορείς να τις λιστάρεις όσο δουλεύει:
docker desktop kubernetes images listΠραγματική έξοδος (Docker Desktop 4.68.0):
Mode Repo Name Tag
kind docker desktop-containerd-registry-mirror v0.0.3
kind docker desktop-cloud-provider-kind v0.5.0
kind envoyproxy envoy v1.36.4
kind kindest node
kubeadm docker desktop-kubernetes kubernetes-v1.34.1-cni-v1.7.1-critools-v1.33.0-cri-dockerd-v0.3.20-1-debian
kubeadm docker desktop-storage-provisioner v3.0
kubeadm docker desktop-vpnkit-controller v4.0
kubeadm docker desktop-kubernetes-etcd 3.6.4-0
kubeadm docker desktop-kubernetes-coredns v1.12.1
kubeadm docker desktop-kubernetes-pause 3.10
kubeadm docker desktop-kubernetes-apiserver v1.34.1
kubeadm docker desktop-kubernetes-controller-manager v1.34.1
kubeadm docker desktop-kubernetes-scheduler v1.34.1
kubeadm docker desktop-kubernetes-proxy v1.34.1Τι πρέπει να δεις: δέκα εικόνες για τη λειτουργία kubeadm, όλες με tag v1.34.1 για τα στοιχεία του control plane. Αναγνωρίζεις etcd, apiserver, controller-manager, scheduler, proxy και coredns από το μάθημα 01. Το κατέβασμα διαρκεί από δύο έως δεκαπέντε λεπτά· το εικονίδιο Kubernetes κάτω αριστερά στο παράθυρο περνά από πορτοκαλί (starting) σε πράσινο.
Κοίτα καλά τι θα συμβεί: ρώτησε το ίδιο το Docker Desktop. Η εντολή docker desktop (υποεντολές kubernetes διαθέσιμες από την έκδοση 4.44) μιλά στην εφαρμογή, όχι στον daemon. Είναι η πιο αξιόπιστη επαλήθευση, πριν ακόμη από το kubectl.
docker desktop status
docker desktop kubernetes statusΠραγματική έξοδος:
Name Value
Status running
SessionID 5bc01282-499f-4434-b135-f8ecf0a79886
Field Value
ID: 1758e244
State: running
Mode: kubeadm
Node Count: 1
Version: v1.34.1
Started At: 2026-09-10 21:27:23.469 -0400 EDT
Progress Message: Kubernetes is up and running
Error: NoneΤι πρέπει να δεις: Status running για την εφαρμογή, έπειτα State: running, Mode: kubeadm, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running, Error: None. Κατά την εκκίνηση, το State είναι starting και το Progress Message περιγράφει το τρέχον βήμα (Pulling images…, Starting control plane…). Αν η έκδοση του Docker Desktop σου είναι προγενέστερη της 4.44, η εντολή δεν υπάρχει: πέρασε απευθείας στο επόμενο βήμα.
Επαλήθευση του κόμβου με kubectl. Κλείσε και ξανάνοιξε το τερματικό σου (το PATH άλλαξε), έπειτα:
kubectl get nodes -o wideΠραγματική έξοδος:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
docker-desktop Ready control-plane 18d v1.34.1 192.168.65.3 <none> Docker Desktop 6.6.87.2-microsoft-standard-WSL2 docker://29.3.1Τι πρέπει να δεις: Ready, v1.34.1, η εσωτερική IP 192.168.65.3 (αυτή της VM, όχι του μηχανήματός σου), ο πυρήνας WSL 2 (σε macOS θα διαβάσεις έναν πυρήνα linuxkit), και το runtime docker://29.3.1: το Kubernetes εκκινεί τα containers του με το ίδιο Docker όπως εσύ. Σε σένα το AGE μετριέται σε δευτερόλεπτα ή λεπτά.
Δες το context που έγραψε το Docker Desktop. Όλα όσα ξέρει το kubectl για το cluster σου χωρούν στο ~/.kube/config (C:\Users\<εσύ>\.kube\config σε Windows).
kubectl config get-contexts
kubectl config view --minifyΠραγματική έξοδος (το μηχάνημα του μαθήματος κρατά ένα παλιό context minikube, σβηστό· σε σένα θα υπάρχει μόνο το docker-desktop):
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* docker-desktop docker-desktop docker-desktop
minikube minikube minikube default
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
current-context: docker-desktop
kind: Config
users:
- name: docker-desktop
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTEDΤι πρέπει να δεις: το αστεράκι στο docker-desktop, ο server https://kubernetes.docker.internal:6443, και μια αυθεντικοποίηση με πιστοποιητικό πελάτη (client-certificate-data) που παράχθηκε κατά την ενεργοποίηση. Το μάθημα 03 επανέρχεται στα contexts.
Windows: διάβασε τη ρύθμιση στο αρχείο της. Χρήσιμο τη μέρα που η διεπαφή αρνείται να ανοίξει, ή για να επαληθεύσεις τι έκανε ένας συνάδελφος.
(Get-Content "$env:APPDATA\Docker\settings-store.json" -Raw | ConvertFrom-Json) | Select-Object KubernetesEnabled, KubernetesMode, ShowKubernetesSystemContainers | Format-ListΠραγματική έξοδος:
KubernetesEnabled : True
KubernetesMode : kubeadm
ShowKubernetesSystemContainers : TrueΤι πρέπει να δεις: οι τρεις τιμές που τσεκάρισες στο βήμα 5. Μην τροποποιείς αυτό το αρχείο με το χέρι όσο τρέχει το Docker Desktop· πέρνα από τη διεπαφή. Τίποτα να καθαρίσεις σε αυτό το μάθημα: δεν δημιούργησες τίποτα στο cluster.
docker desktop kubernetes status δείχνει State: starting για πάνω από δεκαπέντε λεπτά → οι εικόνες του βήματος 5 δεν κατεβαίνουν. Τρεις αιτίες με τη σειρά: καμία πρόσβαση στο Docker Hub (εταιρικό δίκτυο με proxy: Settings → Resources → Proxies, ή ζήτα από τον διαχειριστή σου τη ρύθμιση KubernetesImagesRepository), γεμάτος δίσκος (docker system df), ή μια αλλοιωμένη κατάσταση μετά από ενημέρωση. Στην τελευταία περίπτωση: Settings → Kubernetes → Reset Kubernetes cluster, έπειτα Apply & restart.Unable to connect to the server: dial tcp 127.0.0.1:6443: connectex: No connection could be made because the target machine actively refused it. (macOS/Linux: connect: connection refused) → κανείς δεν ακούει στη θύρα 6443: το Docker Desktop είναι σταματημένο, ή το Kubernetes δεν είναι (ή δεν είναι πια) ενεργοποιημένο. Εκκίνησε το Docker Desktop, έλεγξε docker desktop kubernetes status → State: running, ξαναδοκίμασε. Αν είναι Error: … αντί για None, διάβασε το μήνυμα: συχνότερα είναι η μνήμη.docker desktop kubernetes status απαντά State: running αλλά το kubectl get nodes αποτυγχάνει, ή απαντά για άλλο cluster → το kubectl σου κοιτάζει αλλού (context minikube, kind-…, ένα εταιρικό cluster). Το kubectl config current-context πρέπει να λέει docker-desktop· αλλιώς kubectl config use-context docker-desktop. Λεπτομέρειες στο μάθημα 03.WSL 2 installation is incomplete ή το wsl --status αποτυγχάνει → το υποσύστημα Windows για Linux δεν είναι εγκατεστημένο ή λείπει ο πυρήνας WSL 2. wsl --install σε PowerShell διαχειριστή, επανεκκίνηση, έπειτα επανεκκίνηση του Docker Desktop. Αν το παράθυρο μιλά για Virtual Machine Platform ή για εικονικοποίηση, ενεργοποίησε το Virtualization Technology (VT-x / AMD-V) στο BIOS/UEFI: χωρίς αυτό ούτε το WSL 2 ούτε το Docker Desktop ξεκινούν.Error: αναφέρει OOM ή τα containers k8s_… επανεκκινούν σε βρόχο → δεν υπάρχει αρκετή μνήμη για τη VM. Επιστροφή στο βήμα 2 (Windows: .wslconfig, wsl --shutdown) ή 3 (macOS: Resources → Memory), έπειτα Reset Kubernetes cluster αν η κατάσταση μένει ασυνεπής.kubectl του Docker Desktop δεν βρίσκεται ενώ το Kubernetes τρέχει → σε Windows, η εγκατάσταση «ανά χρήστη» το τοποθετεί στο %LOCALAPPDATA%\Programs\DockerDesktop\resources\bin\kubectl.exe αντί για C:\Program Files\Docker\Docker\resources\bin· πρόσθεσε τον σωστό φάκελο στο PATH (μάθημα 03) και ξανάνοιξε το τερματικό.docker-desktop κάτω από WSL 2)· ενεργοποίηση = Settings → Kubernetes → Enable Kubernetes → Apply & restart, ή προβολή Kubernetes → Create cluster (4.51+).%UserProfile%\.wslconfig (memory=8GB, processors=4) έπειτα wsl --shutdown.docker desktop kubernetes status πρέπει να δείχνει State: running, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running· το kubectl get nodes -o wide πρέπει να δείχνει docker-desktop Ready control-plane.dial tcp 127.0.0.1:6443 … refused = Docker Desktop σταματημένο ή Kubernetes απενεργοποιημένο, ποτέ πρόβλημα του YAML σου.kubectl, το τηλεχειριστήριο — εκδόσεις, contexts, ανατομία μιας εντολής, και το πρώτο σου namespace premiers-pas.Το Docker Desktop δεν ενημερώνει το cluster Kubernetes όταν ενημερώνεται η εφαρμογή: ο κόμβος σου θα μείνει σε v1.34.1 μέχρι να κάνεις Reset Kubernetes cluster, που ξαναδημιουργεί ένα καθαρό cluster με την έκδοση που ενσωματώνει το νέο Docker Desktop. Είναι μια ουσιαστική διαφορά από ένα managed cluster (EKS, GKE, AKS), όπου μεταναστεύεις το control plane και έπειτα τους κόμβους χωρίς να χάσεις τα αντικείμενα. Η επίσημη σελίδα Deploy on Kubernetes with Docker Desktop περιγράφει τους δύο provisioners, την προβολή Kubernetes του πίνακα ελέγχου και τη ρύθμιση KubernetesImagesRepository για δίκτυα χωρίς πρόσβαση στο Docker Hub· από την πλευρά του Kubernetes, το Install Tools εξηγεί πώς να εγκαταστήσεις το kubectl ξεχωριστά αν το χρειάζεσαι σε άλλο μηχάνημα.