Αναφορά εντολών: Kubernetes
Τελευταία ενημέρωση: 13 Ιουνίου 2026
Απευθύνεται σε: συμμετέχοντες σε Kubernetes workshops, ομάδες Operations, Troubleshooting, Reviews και τελικά Projects
Αυτή η αναφορά συγκεντρώνει τις σημαντικότερες εντολές του Kubernetes. Εξηγεί πότε τις χρησιμοποιείς, ποια έξοδο να περιμένεις και τι χρειάζεται προσοχή. Εστιάζει στα kubectl και kubeadm, καθώς και στα εργαλεία που χρειάζονται συχνά στην πράξη: kubelet, εκτελέσιμα του Control Plane, crictl, ctr, nerdctl, etcdctl, etcdutl, Helm, Kustomize, εργαλεία CNI και Cluster, καθώς και βοηθητικές εντολές Linux.
Σημαντικό: Οι εντολές του Kubernetes εξαρτώνται από την έκδοση, τη διανομή, τον Cloud Provider και τα εγκατεστημένα Add-ons. Το έγγραφο λειτουργεί ως εκτεταμένη αναφορά για το workshop και τις Operations. Για την πλήρη λίστα Flags της εγκατάστασής σου έλεγχε επίσης τα
<command> --help,<command> <subcommand> --helpκαι την τεκμηρίωση της έκδοσης Kubernetes που χρησιμοποιείς.
1. Βασικοί κανόνες για ασφαλή εργασία
Οι εντολές Kubernetes επηρεάζουν συχνά απευθείας Production Workloads. Ακολούθησε μια σαφή σειρά ενεργειών:
- Έλεγξε το Context: Επιβεβαίωσε πρώτα το Cluster, το Namespace και την ταυτότητά σου.
- Διάβασε πριν αλλάξεις: Ξεκίνα με
get,describe,diff,dry-runκαιauth can-i. - Περιόρισε την αλλαγή: Στόχευσε ένα Namespace, έναν Label Selector ή συγκεκριμένο Object αντί για
-Aή--all. - Κατανόησε τον αντίκτυπο: Έλεγξε αν η εντολή επανεκκινεί Pods, αναδρομολογεί την κίνηση, διαγράφει δεδομένα ή εκτελεί Drain σε Nodes.
- Προετοίμασε το Rollback: Φύλαξε εκ των προτέρων το Manifest, τα Values, το Revision, το Backup ή το Snapshot.
- Επαλήθευσε το αποτέλεσμα: Έλεγξε Status, Events, Logs, Endpoints και Metrics.
Κατηγορίες εντολών που απαιτούν προσοχή
| Κατηγορία εντολής | Κίνδυνος | Ασφαλέστερος χειρισμός |
|---|---|---|
kubectl delete |
Αφαιρεί Resources ή ενεργοποιεί την εκ νέου δημιουργία τους. | Εκτέλεσε πρώτα kubectl get και διέγραψε μόνο τα συγκεκριμένα Resources. Απόφυγε ανεξέλεγκτα Wildcards. |
kubectl replace --force |
Διαγράφει και δημιουργεί ξανά το Object· μπορεί να προκαλέσει διακοπή λειτουργίας. | Χρησιμοποίησέ το μόνο όταν επιδιώκεις συνειδητά την εκ νέου δημιουργία. |
kubectl drain |
Εκτελεί Eviction των Pods από ένα Node. | Έλεγξε πρώτα PDBs, DaemonSets, τοπικά δεδομένα και διαθέσιμη χωρητικότητα. |
kubeadm reset |
Αφαιρεί τοπικά στοιχεία του Cluster από ένα Node. | Εκτέλεσέ το μόνο στον σωστό Host. Έλεγξε έπειτα τα υπολείμματα του CNI, των iptables και των δεδομένων. |
etcdctl snapshot restore / etcdutl snapshot restore |
Δημιουργεί νέα λογική κατάσταση για το etcd Cluster. | Χρησιμοποίησέ το μόνο με τεκμηριωμένο σχέδιο Restore και Backup. |
kubectl patch |
Μπορεί να αντικαταστήσει Fields χωρίς να το αντιληφθείς. | Κράτησε τα Patches μικρά και έλεγξε το αποτέλεσμα με get -o yaml. |
kubectl apply --prune |
Μπορεί να αφαιρέσει Resources που δεν δηλώνονται πλέον. | Χρησιμοποίησέ το μόνο με περιορισμένο Selector και αφού το δοκιμάσεις σε Test Environment. |
2. Συμβολισμοί και Placeholders
Το έγγραφο χρησιμοποιεί σταθερά τους παρακάτω Placeholders:
| Placeholder | Σημασία | Παράδειγμα |
|---|---|---|
<namespace> |
Namespace | demo |
<pod> |
Όνομα Pod | web-785d9c9d8f-abc12 |
<deployment> |
Όνομα Deployment | web |
<service> |
Όνομα Service | web |
<node> |
Όνομα Node | worker-01 |
<container> |
Όνομα Container μέσα σε Pod | app |
<context> |
Context του kubeconfig | dev-cluster |
<image> |
Container Image | ghcr.io/example/app:1.2.3 |
<file> |
Manifest, αρχείο Values ή Snapshot | deployment.yaml |
Συμβάσεις:
# Όρισε ρητά το Namespace
kubectl get pods -n <namespace>
# Εμφάνισε όλα τα Namespaces
kubectl get pods -A
kubectl get pods --all-namespaces
# Σύντομα ονόματα Resources
kubectl get po,svc,deploy -n <namespace>
# Τα πλήρη ονόματα Resources είναι συχνά σαφέστερα στην τεκμηρίωση και στα workshops
kubectl get pods,services,deployments -n <namespace>
3. Shell, Autocomplete και Aliases
Έλεγχος εκδόσεων
kubectl version --client
kubectl version
kubectl version -o yaml
kubeadm version
helm version
crictl --version
ctr version
etcdctl version
Το kubectl version --client ελέγχει μόνο το τοπικό CLI. Το kubectl version επικοινωνεί και με το API Server. Αν δεν έχεις πρόσβαση, μπορεί να εμφανιστούν σφάλματα Authentication, δικτύου ή Certificates.
Autocomplete για Bash
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
alias k=kubectl
complete -o default -F __start_kubectl k
Autocomplete για Zsh
source <(kubectl completion zsh)
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc
Autocomplete για Fish
mkdir -p ~/.config/fish/completions
kubectl completion fish > ~/.config/fish/completions/kubectl.fish
Χρήσιμα Aliases
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgn='kubectl get nodes -o wide'
alias kga='kubectl get all'
alias kaf='kubectl apply -f'
alias kdf='kubectl diff -f'
alias kdel='kubectl delete'
alias kctx='kubectl config current-context'
alias kns='kubectl config set-context --current --namespace'
Χρησιμοποίησε Aliases μόνο σε διαδραστικό Shell. Στην τεκμηρίωση, στα Runbooks και στα CI Pipelines, οι πλήρως γραμμένες εντολές είναι πιο αξιόπιστες.
4. kubectl: σύνταξη και γενικά Options
Το kubectl είναι το βασικό CLI για επικοινωνία με το Kubernetes Control Plane. Η γενική σύνταξη είναι:
kubectl [global options] <verb> <resource> [name] [flags]
Παραδείγματα:
kubectl get pods -n demo
kubectl describe deployment web -n demo
kubectl apply -f deployment.yaml
kubectl delete service web -n demo
Γενικά Options
| Option | Σκοπός | Παράδειγμα |
|---|---|---|
--kubeconfig <file> |
Χρησιμοποιεί συγκεκριμένο αρχείο kubeconfig. | kubectl --kubeconfig ./kubeconfig get nodes |
--context <context> |
Χρησιμοποιεί συγκεκριμένο Context. | kubectl --context prod get pods -A |
-n, --namespace |
Ορίζει το Namespace για Resources που ανήκουν σε Namespace. | kubectl get pods -n demo |
-A, --all-namespaces |
Εμφανίζει Resources από όλα τα Namespaces. | kubectl get pods -A |
-o <format> |
Ορίζει τη μορφή της εξόδου. | kubectl get pods -o wide |
-l, --selector |
Φιλτράρει με Label Selector. | kubectl get pods -l app=web |
--field-selector |
Φιλτράρει με βάση ένα Field. | kubectl get pods --field-selector=status.phase=Pending |
--as <user> |
Εκτελεί το Request με την ταυτότητα άλλου User. | kubectl auth can-i get pods --as alice |
--as-group <group> |
Εκτελεί το Request με την ταυτότητα άλλου Group. | kubectl auth can-i list pods --as-group devs |
--request-timeout <duration> |
Ορίζει Timeout για API Requests. | kubectl get pods --request-timeout=10s |
--v <level> |
Αυξάνει τη λεπτομέρεια της εξόδου για Debugging. | kubectl get pods --v=8 |
--dry-run=client |
Ελέγχει ή παράγει το Resource τοπικά χωρίς να το αποθηκεύσει στο API. | kubectl create ns demo --dry-run=client -o yaml |
--dry-run=server |
Ελέγχει το Resource μέσω του API Server, μαζί με το Admission. | kubectl apply --dry-run=server -f app.yaml |
Μορφές εξόδου
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o name
kubectl get pods -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,STATUS:.status.phase'
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
Συνηθισμένα σύντομα ονόματα Resources
| Σύντομο όνομα | Πλήρες όνομα |
|---|---|
po |
pods |
svc |
services |
deploy |
deployments |
rs |
replicasets |
sts |
statefulsets |
ds |
daemonsets |
cm |
configmaps |
sa |
serviceaccounts |
ns |
namespaces |
ep |
endpoints |
pvc |
persistentvolumeclaims |
pv |
persistentvolumes |
sc |
storageclasses |
ing |
ingresses |
netpol |
networkpolicies |
cj |
cronjobs |
5. kubeconfig, Context και πρόσβαση
Έλεγχος του τρέχοντος Context
kubectl config current-context
kubectl config get-contexts
kubectl cluster-info
kubectl get nodes -o wide
Εκτέλεσε αυτές τις εντολές πριν από κάθε αλλαγή. Το λανθασμένο Context είναι ένα από τα συχνότερα λειτουργικά σφάλματα.
Αλλαγή Context
kubectl config use-context <context>
kubectl config current-context
Ορισμός Namespace στο τρέχον Context
kubectl config set-context --current --namespace=<namespace>
kubectl config view --minify | grep namespace
Αυτό είναι βολικό, αλλά μπορεί να οδηγήσει σε αλλαγές στο λάθος Namespace. Στα Runbooks το -n <namespace> δηλώνει τον στόχο πιο καθαρά.
Προβολή και έλεγχος του kubeconfig
kubectl config view
kubectl config view --raw
kubectl config view --minify
kubectl config get-clusters
kubectl config get-users
kubectl config get-contexts
Το --raw μπορεί να εμφανίσει ευαίσθητα δεδομένα, όπως Certificates ή Tokens. Μη μοιράζεσαι αυτή την έξοδο χωρίς να την ελέγξεις πρώτα.
Ορισμός Cluster, User και Context
kubectl config set-cluster <cluster> --server=https://<api-server>:6443 --certificate-authority=<ca.crt>
kubectl config set-credentials <user> --client-certificate=<user.crt> --client-key=<user.key>
kubectl config set-context <context> --cluster=<cluster> --user=<user> --namespace=<namespace>
kubectl config use-context <context>
Μετονομασία ή διαγραφή Contexts
kubectl config rename-context <old-context> <new-context>
kubectl config delete-context <context>
kubectl config delete-cluster <cluster>
kubectl config delete-user <user>
Χρήση προσωρινού kubeconfig
KUBECONFIG=./kubeconfig kubectl get nodes
kubectl --kubeconfig ./kubeconfig get pods -A
Συνένωση πολλών αρχείων kubeconfig
export KUBECONFIG=$HOME/.kube/config:./cluster-a.yaml:./cluster-b.yaml
kubectl config view --merge --flatten > ./merged-kubeconfig.yaml
6. Εξερεύνηση του API και μοντέλο Resources
Εμφάνιση API Versions και Resources
kubectl api-versions
kubectl api-resources
kubectl api-resources --namespaced=true
kubectl api-resources --namespaced=false
kubectl api-resources --verbs=list
kubectl api-resources --api-group=apps
kubectl api-resources -o wide
Οι εντολές δείχνουν ποιοι τύποι Resources είναι διαθέσιμοι στο Cluster. Εμφανίζονται επίσης τα CRDs που εγκατέστησαν Add-ons.
Εξήγηση του Schema ενός Resource
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain deployment.spec.strategy
kubectl explain networkpolicy.spec.ingress
kubectl explain gateway.spec.listeners
kubectl explain --recursive deployment.spec.template.spec
Το kubectl explain είναι ο γρηγορότερος τρόπος να κατανοήσεις τα Fields απευθείας από το API Schema.
Άμεση πρόσβαση στο API
kubectl get --raw /api
kubectl get --raw /apis
kubectl get --raw /version
kubectl get --raw /healthz
kubectl get --raw /readyz?verbose
kubectl get --raw /livez?verbose
kubectl get --raw /metrics | head
Η πρόσβαση στα /metrics, /readyz και /livez μπορεί να περιορίζεται από το RBAC και τη ρύθμιση του API Server.
Subresources
Ορισμένα Resources διαθέτουν Subresources, όπως status, scale ή, ανάλογα με την έκδοση, resize.
kubectl get deployment web -n demo --subresource=scale -o yaml
kubectl patch deployment web -n demo --subresource=scale --type=merge -p '{"spec":{"replicas":3}}'
kubectl get pod <pod> -n demo --subresource=status -o yaml
Χρησιμοποίησε Subresources όταν θέλεις να ελέγξεις ή να αλλάξεις συγκεκριμένα το Status, το Scaling ή άλλο εξειδικευμένο μέρος ενός Object.
7. Προβολή, φιλτράρισμα και μορφοποίηση Resources
Βασικές εντολές
kubectl get namespaces
kubectl get nodes -o wide
kubectl get pods -A -o wide
kubectl get all -n <namespace>
kubectl get deployments,replicasets,pods -n <namespace>
kubectl get services,endpoints,endpointslices -n <namespace>
kubectl describe pod <pod> -n <namespace>
kubectl describe node <node>
Λειτουργία Watch
kubectl get pods -n <namespace> -w
kubectl get events -n <namespace> --watch
watch -n 2 'kubectl get pods -n <namespace>'
Το kubectl -w παρακολουθεί τις αλλαγές μέσω του API. Η εντολή watch εκτελεί επανειλημμένα μια εντολή και είναι χρήσιμη όταν θέλεις να εμφανίζεις μαζί διαφορετικούς τύπους Objects.
Label Selectors
kubectl get pods -n demo -l app=web
kubectl get pods -n demo -l 'app in (web,api)'
kubectl get pods -n demo -l 'app=web,environment=dev'
kubectl get pods -A -l 'app.kubernetes.io/name=nginx'
Field Selectors
kubectl get pods -A --field-selector=status.phase=Pending
kubectl get pods -A --field-selector=status.phase!=Running
kubectl get events -A --field-selector=type=Warning
kubectl get pods -A --field-selector=spec.nodeName=<node>
Τα Field Selectors υποστηρίζουν λιγότερα Fields από τα Label Selectors, αλλά είναι ιδιαίτερα χρήσιμα για αναζητήσεις βάσει Status ή Node.
Ταξινόμηση
kubectl get pods -A --sort-by=.metadata.creationTimestamp
kubectl get events -A --sort-by=.lastTimestamp
kubectl get pv --sort-by=.spec.capacity.storage
kubectl get pods -A --sort-by=.status.containerStatuses[0].restartCount
Έξοδος μόνο με ονόματα
kubectl get pods -n demo -o name
kubectl get deploy -n demo -o name
kubectl get pods -n demo -l app=web -o name | xargs -r -n1 kubectl describe -n demo
Επιλεκτική αποθήκευση YAML και JSON
kubectl get deployment web -n demo -o yaml > deployment.web.yaml
kubectl get service web -n demo -o json > service.web.json
Κοινή προβολή πολλών Resources
kubectl get deploy,rs,po,svc,ep,endpointslice -n demo -o wide
kubectl get ingress,svc,ep,endpointslice -n demo -o wide
kubectl get pvc,pv,storageclass -A
8. Δημιουργία, εφαρμογή και έλεγχος Resources
Δηλωτική διαχείριση με apply
kubectl apply -f manifest.yaml
kubectl apply -f ./manifests/
kubectl apply -f https://example.invalid/manifest.yaml
kubectl apply -k overlays/dev
Το apply είναι η συνήθης επιλογή για δηλωτική διαχείριση. Το αρχείο Manifest παραμένει η αυθεντική πηγή του Desired State.
Server-Side Dry Run
kubectl apply --dry-run=server -f manifest.yaml
kubectl apply --dry-run=server -k overlays/dev
Το Server-Side Dry Run ελέγχει το Resource μέσω του API Server και περιλαμβάνει τους Admission Controllers. Έτσι παρέχει ισχυρότερο έλεγχο από την τοπική επικύρωση του YAML.
Client-Side Dry Run και δημιουργία YAML
kubectl create namespace demo --dry-run=client -o yaml
kubectl create deployment web --image=nginx:1.27 --replicas=2 --dry-run=client -o yaml
kubectl create service clusterip web --tcp=80:8080 --dry-run=client -o yaml
kubectl run debug --image=busybox --restart=Never --dry-run=client -o yaml -- sleep 3600
Χρησιμοποίησε αυτή τη μορφή για να δημιουργήσεις αρχικά Manifests και έπειτα να τα διαχειριστείς με Version Control.
Diff πριν από την αλλαγή
kubectl diff -f manifest.yaml
kubectl diff -k overlays/dev
kubectl diff -f ./manifests/ --server-side
Το diff δείχνει ποια Fields θα άλλαζαν στο Cluster.
Server-Side Apply
kubectl apply --server-side -f manifest.yaml
kubectl apply --server-side --field-manager=workshop -f manifest.yaml
kubectl apply --server-side --force-conflicts -f manifest.yaml
Το Server-Side Apply είναι χρήσιμο όταν πολλοί Controllers ή ομάδες διαχειρίζονται διαφορετικά Fields. Χρησιμοποίησε το --force-conflicts μόνο όταν θέλεις συνειδητά να παρακάμψεις το Field Ownership.
Replace
kubectl replace -f manifest.yaml
kubectl replace --force -f manifest.yaml
Το replace αντικαθιστά το Resource με βάση το Object που παρέχεις. Το replace --force το διαγράφει και το δημιουργεί ξανά· αυτό μπορεί να προκαλέσει διακοπή λειτουργίας.
Έλεγχος με Schema και Admission
kubectl apply --dry-run=server -f manifest.yaml
kubectl explain deployment.spec.template.spec.containers.resources
kubectl get events -n demo --sort-by=.lastTimestamp
Αν λειτουργούν Admission Controllers, όπως Policy Engines, ένα Manifest μπορεί να έχει σωστή σύνταξη και παρ’ όλα αυτά να απορριφθεί.
9. Τροποποίηση Resources: edit, patch, label, annotate και set
Διαδραστική επεξεργασία
kubectl edit deployment web -n demo
kubectl edit service web -n demo
kubectl edit configmap app-config -n demo
kubectl edit node <node>
Το edit είναι χρήσιμο σε επείγουσες περιπτώσεις, αλλά οι αλλαγές του δεν αναπαράγονται εύκολα. Πέρασε έπειτα τις μόνιμες αλλαγές στο Git Repository σου.
Τροποποίηση με Merge Patch
kubectl patch deployment web -n demo --type=merge -p '{"spec":{"replicas":3}}'
kubectl patch service web -n demo --type=merge -p '{"spec":{"type":"ClusterIP"}}'
Τροποποίηση με JSON Patch
kubectl patch deployment web -n demo --type=json -p='[
{"op":"replace","path":"/spec/replicas","value":3}
]'
Το JSON Patch είναι ακριβές, αλλά εξαρτάται από τις σωστές διαδρομές των Fields.
Τροποποίηση ενός Annotation
kubectl patch deployment web -n demo --type=merge -p '{
"metadata": {
"annotations": {
"workshop.example/change-reason": "manual-test"
}
}
}'
Ορισμός και αφαίρεση Labels
kubectl label namespace demo environment=dev
kubectl label pod <pod> -n demo debug=true
kubectl label deployment web -n demo app.kubernetes.io/version=1.2.3 --overwrite
kubectl label namespace demo environment-
Τα Labels επηρεάζουν Selectors, Policies, τη συγκέντρωση Metrics και συχνά τη λογική του GitOps ή του Deployment. Άλλαζέ τα με προσοχή.
Ορισμός και αφαίρεση Annotations
kubectl annotate deployment web -n demo kubernetes.io/change-cause='image update to 1.2.3'
kubectl annotate pod <pod> -n demo workshop.example/owner='team-a' --overwrite
kubectl annotate deployment web -n demo kubernetes.io/change-cause-
Αλλαγή Images
kubectl set image deployment/web app=<image> -n demo
kubectl set image deployment/web app=ghcr.io/example/app:1.2.3 -n demo --record=false
kubectl set image daemonset/node-agent agent=ghcr.io/example/agent:2.0.0 -n kube-system
Αλλαγή μεταβλητών περιβάλλοντος
kubectl set env deployment/web LOG_LEVEL=debug -n demo
kubectl set env deployment/web LOG_LEVEL- -n demo
kubectl set env deployment/web --from=configmap/app-config -n demo
kubectl set env deployment/web --list -n demo
Αλλαγή Requests και Limits
kubectl set resources deployment/web -n demo --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=512Mi
kubectl set resources deployment/web -n demo -c app --requests=cpu=200m,memory=256Mi
Ορισμός ServiceAccount
kubectl set serviceaccount deployment/web app-sa -n demo
Ορισμός Selector
kubectl set selector service/web app=web -n demo
Πρόσεχε ιδιαίτερα τους Selectors. Ένας λανθασμένος Service Selector μπορεί γρήγορα να αφήσει ένα Service χωρίς Endpoints ή να στείλει την κίνηση σε λάθος Pods.
10. Διαγραφή, αναμονή και καθαρισμός Resources
Στοχευμένη διαγραφή
kubectl delete pod <pod> -n demo
kubectl delete deployment web -n demo
kubectl delete service web -n demo
kubectl delete -f manifest.yaml
kubectl delete -k overlays/dev
Διαγραφή με βάση Label
kubectl delete pods -n demo -l app=web
kubectl delete jobs -n demo -l cleanup=true
Διαγραφή όλων των Resources ενός τύπου
kubectl delete pods --all -n demo
kubectl delete jobs --all -n demo
Χρησιμοποίησε το --all μόνο μέσα σε Namespace που έχεις επιλέξει συνειδητά.
Grace Period και αναγκαστική διαγραφή
kubectl delete pod <pod> -n demo --grace-period=30
kubectl delete pod <pod> -n demo --grace-period=0 --force
Το --force αφαιρεί το API Object χωρίς να περιμένει την κανονική ολοκλήρωση της διαγραφής. Αυτό δεν σημαίνει απαραίτητα ότι η διεργασία στο Node τερματίστηκε ομαλά.
Έλεγχος και αφαίρεση Finalizers
kubectl get <resource> <name> -n demo -o jsonpath='{.metadata.finalizers}'
kubectl patch <resource> <name> -n demo --type=merge -p '{"metadata":{"finalizers":null}}'
Αφαίρεσε Finalizers μόνο αν κατανοείς ποιος Controller κρατά το Resource σε αναμονή. Διαφορετικά μπορεί να μείνουν εξωτερικά Artifacts χωρίς καθαρισμό.
Αναμονή για συγκεκριμένη κατάσταση
kubectl wait --for=condition=Available deployment/web -n demo --timeout=120s
kubectl wait --for=condition=Ready pod/<pod> -n demo --timeout=60s
kubectl wait --for=delete pod/<pod> -n demo --timeout=60s
kubectl wait --for=jsonpath='{.status.phase}'=Running pod/<pod> -n demo --timeout=60s
Προσεκτική χρήση του Prune
kubectl apply -f ./manifests/ --prune -l app.kubernetes.io/part-of=demo
Το --prune μπορεί να διαγράψει Resources που δεν περιλαμβάνονται πλέον στο σύνολο Manifests που εφαρμόζεται. Χρησιμοποίησε περιορισμένο και σαφή Label Selector.
11. Pods
Προβολή Pods
kubectl get pods -n demo
kubectl get pods -n demo -o wide
kubectl get pod <pod> -n demo -o yaml
kubectl describe pod <pod> -n demo
Εύρεση Pods ανά Status
kubectl get pods -A --field-selector=status.phase=Pending
kubectl get pods -A --field-selector=status.phase=Failed
kubectl get pods -A --field-selector=status.phase=Succeeded
kubectl get pods -A --field-selector=spec.nodeName=<node>
Προβολή Containers ενός Pod
kubectl get pod <pod> -n demo -o jsonpath='{.spec.containers[*].name}'
kubectl get pod <pod> -n demo -o jsonpath='{.spec.initContainers[*].name}'
kubectl get pod <pod> -n demo -o jsonpath='{.status.containerStatuses[*].restartCount}'
Εκκίνηση προσωρινού Pod
kubectl run tmp-shell -n demo --rm -it --image=busybox:1.36 --restart=Never -- sh
kubectl run curl -n demo --rm -it --image=curlimages/curl:8.8.0 --restart=Never -- sh
kubectl run dns-test -n demo --rm -it --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
Δημιουργία Pod Manifest
kubectl run app -n demo --image=nginx:1.27 --restart=Never --dry-run=client -o yaml > pod.yaml
Διαγραφή Pod ώστε να το δημιουργήσει ξανά ο Controller
kubectl delete pod <pod> -n demo
kubectl get replicaset,deployment -n demo
Αν το Pod διαχειρίζεται Deployment, ReplicaSet, StatefulSet ή DaemonSet, ο Controller συνήθως δημιουργεί νέο Pod. Αν το Pod δημιουργήθηκε χειροκίνητα, η διαγραφή του είναι οριστική.
12. Deployments, ReplicaSets και Rollouts
Δημιουργία Deployment
kubectl create deployment web -n demo --image=nginx:1.27 --replicas=2
kubectl create deployment web -n demo --image=nginx:1.27 --replicas=2 --dry-run=client -o yaml > deployment.yaml
Έλεγχος Deployment
kubectl get deployment web -n demo
kubectl describe deployment web -n demo
kubectl get replicaset -n demo -l app=web
kubectl get pods -n demo -l app=web -o wide
Εκκίνηση και παρακολούθηση Rollout
kubectl set image deployment/web nginx=nginx:1.28 -n demo
kubectl rollout status deployment/web -n demo --timeout=120s
kubectl rollout history deployment/web -n demo
Έλεγχος ιστορικού Rollout και Revisions
kubectl rollout history deployment/web -n demo
kubectl rollout history deployment/web -n demo --revision=2
kubectl describe deployment web -n demo
Rollback
kubectl rollout undo deployment/web -n demo
kubectl rollout undo deployment/web -n demo --to-revision=2
kubectl rollout status deployment/web -n demo
Παύση και συνέχιση Rollout
kubectl rollout pause deployment/web -n demo
kubectl set image deployment/web app=ghcr.io/example/app:1.2.4 -n demo
kubectl set env deployment/web FEATURE_X=true -n demo
kubectl rollout resume deployment/web -n demo
kubectl rollout status deployment/web -n demo
Επανεκκίνηση Deployment
kubectl rollout restart deployment/web -n demo
kubectl rollout status deployment/web -n demo
Το rollout restart ορίζει ένα Annotation στο Pod Template και έτσι δημιουργεί νέα Pods.
Έλεγχος ReplicaSets
kubectl get rs -n demo
kubectl describe rs <replicaset> -n demo
kubectl get pods -n demo --show-labels
Τα ReplicaSets συνήθως δεν τροποποιούνται απευθείας. Άλλαξε το Deployment που τα διαχειρίζεται.
13. StatefulSets, DaemonSets, Jobs και CronJobs
StatefulSets
kubectl get statefulsets -n demo
kubectl describe statefulset db -n demo
kubectl rollout status statefulset/db -n demo
kubectl rollout restart statefulset/db -n demo
kubectl scale statefulset/db -n demo --replicas=3
kubectl get pods -n demo -l app=db -o wide
kubectl get pvc -n demo -l app=db
Τα StatefulSets δημιουργούν σταθερά ονόματα Pods και χρησιμοποιούν συχνά PVCs. Όταν διαγράφεται ένα StatefulSet, τα PVCs μπορεί να διατηρηθούν ανάλογα με την Storage Policy.
DaemonSets
kubectl get daemonsets -A
kubectl describe daemonset <daemonset> -n <namespace>
kubectl rollout status daemonset/<daemonset> -n <namespace>
kubectl rollout restart daemonset/<daemonset> -n <namespace>
kubectl get pods -n <namespace> -l <label-key>=<label-value> -o wide
Τα DaemonSets χρησιμοποιούνται συνήθως για Agents που εκτελούνται σε Nodes: CNI, CSI, Logging, Monitoring και Security.
Jobs
kubectl create job migrate -n demo --image=ghcr.io/example/app:1.2.3 -- ./migrate.sh
kubectl create job migrate -n demo --image=ghcr.io/example/app:1.2.3 --dry-run=client -o yaml > job.yaml
kubectl get jobs -n demo
kubectl describe job migrate -n demo
kubectl logs job/migrate -n demo
kubectl delete job migrate -n demo
Δημιουργία Job από CronJob
kubectl create job manual-backup -n demo --from=cronjob/backup
kubectl logs job/manual-backup -n demo
CronJobs
kubectl create cronjob backup -n demo --image=busybox:1.36 --schedule='*/15 * * * *' -- /bin/sh -c 'date; echo backup'
kubectl get cronjobs -n demo
kubectl describe cronjob backup -n demo
kubectl get jobs -n demo --sort-by=.metadata.creationTimestamp
kubectl delete cronjob backup -n demo
Καθαρισμός ολοκληρωμένων Jobs
kubectl get jobs -n demo
kubectl delete job -n demo --field-selector=status.successful=1
kubectl delete job -n demo -l cleanup=true
14. Scaling, Autoscaling και διαθεσιμότητα
Χειροκίνητο Scaling
kubectl scale deployment/web -n demo --replicas=3
kubectl scale statefulset/db -n demo --replicas=3
kubectl get deployment web -n demo
Δημιουργία HorizontalPodAutoscaler
kubectl autoscale deployment web -n demo --min=2 --max=10 --cpu-percent=70
kubectl get hpa -n demo
kubectl describe hpa web -n demo
Το HPA χρειάζεται Metrics, συνήθως μέσω του Metrics Server. Χωρίς Metrics δεν μπορεί να κλιμακώσει αποτελεσματικά τα Pods και ενδέχεται να εμφανίζει σφάλματα.
Έλεγχος HPA
kubectl get hpa -A
kubectl describe hpa <hpa> -n <namespace>
kubectl top pods -n <namespace>
kubectl top pods -n <namespace> --containers
PodDisruptionBudget
kubectl get poddisruptionbudgets -A
kubectl describe pdb web -n demo
kubectl create poddisruptionbudget web -n demo --selector=app=web --min-available=1 --dry-run=client -o yaml
Τα PDBs προστατεύουν από προγραμματισμένες διακοπές, όπως το kubectl drain. Δεν αποτρέπουν βλάβες των Nodes.
Έλεγχος διαθεσιμότητας Deployment
kubectl get deployment web -n demo -o jsonpath='{.status.availableReplicas}'
kubectl get deployment web -n demo -o jsonpath='{.status.conditions}'
kubectl describe deployment web -n demo
15. Logs, Exec, Attach, Copy και Debug
Προβολή Logs
kubectl logs pod/<pod> -n demo
kubectl logs pod/<pod> -n demo -c <container>
kubectl logs pod/<pod> -n demo --all-containers
kubectl logs deployment/web -n demo
kubectl logs deployment/web -n demo --tail=100
kubectl logs deployment/web -n demo --since=10m
kubectl logs deployment/web -n demo -f
kubectl logs pod/<pod> -n demo -c <container> --previous
Το --previous είναι σημαντικό για το CrashLoopBackOff, επειδή το τρέχον Container συχνά τερματίζεται ξανά σχεδόν αμέσως.
Logs με βάση Label
kubectl logs -n demo -l app=web --all-containers=true --tail=100
kubectl logs -n demo -l app=web --prefix=true --since=30m
Exec μέσα σε Container
kubectl exec -it pod/<pod> -n demo -- sh
kubectl exec -it pod/<pod> -n demo -c <container> -- bash
kubectl exec pod/<pod> -n demo -- printenv
kubectl exec pod/<pod> -n demo -- cat /etc/resolv.conf
Τα Minimal Images συχνά δεν περιέχουν bash, curl, nslookup ή Package Manager. Σε αυτή την περίπτωση χρησιμοποίησε Debug Containers.
Attach
kubectl attach pod/<pod> -n demo -c <container>
kubectl attach -it pod/<pod> -n demo -c <container>
Το attach συνδέεται με μια διεργασία που ήδη εκτελείται. Για πρόσβαση σε Shell, το exec είναι συνήθως καταλληλότερο.
Αντιγραφή αρχείων
kubectl cp demo/<pod>:/path/in/container ./local-file -c <container>
kubectl cp ./local-file demo/<pod>:/tmp/local-file -c <container>
Το kubectl cp συχνά απαιτεί tar μέσα στο Container. Αν λείπει, χρησιμοποίησε το kubectl exec με Streams ή ένα Debug Image.
Προσωρινό Debug Container
kubectl debug -it pod/<pod> -n demo --image=busybox:1.36 --target=<container> -- sh
kubectl debug -it pod/<pod> -n demo --image=nicolaka/netshoot --target=<container> -- bash
Τα Ephemeral Containers προστίθενται στο Pod για Debugging. Δεν προορίζονται για μόνιμες αλλαγές.
Δημιουργία Debug αντιγράφου ενός Pod
kubectl debug pod/<pod> -n demo -it --copy-to=<pod>-debug --container=debug --image=busybox:1.36 -- sh
Debugging ενός Node
kubectl debug node/<node> -it --image=ubuntu:24.04
Στο Debug Shell το Filesystem του Host είναι συνήθως διαθέσιμο στη διαδρομή /host. Χρησιμοποίησε αυτή τη δυνατότητα μόνο για συγκεκριμένο σκοπό.
16. Port Forwarding, Proxy και τοπικές δοκιμές
Port Forward προς Pod
kubectl port-forward pod/<pod> -n demo 8080:80
Port Forward προς Service
kubectl port-forward service/web -n demo 8080:80
curl http://127.0.0.1:8080
Port Forward προς Deployment
kubectl port-forward deployment/web -n demo 8080:8080
API Proxy
kubectl proxy --port=8001
curl http://127.0.0.1:8001/api/
curl http://127.0.0.1:8001/apis/apps/v1/namespaces/demo/deployments
Το kubectl proxy βοηθά στην τοπική ανάπτυξη και στην εξερεύνηση του API. Μην το εκθέτεις χωρίς προστασία σε κοινόχρηστα συστήματα.
Τοπικές δοκιμές Service
kubectl run curl -n demo --rm -it --image=curlimages/curl:8.8.0 --restart=Never -- http://web.demo.svc.cluster.local
kubectl run netshoot -n demo --rm -it --image=nicolaka/netshoot --restart=Never -- bash
17. Services, DNS, Endpoints και EndpointSlices
Προβολή Services
kubectl get services -n demo
kubectl get svc -n demo -o wide
kubectl describe service web -n demo
kubectl get service web -n demo -o yaml
Δημιουργία Service
kubectl expose deployment web -n demo --port=80 --target-port=8080 --type=ClusterIP
kubectl create service clusterip web -n demo --tcp=80:8080 --dry-run=client -o yaml
kubectl create service nodeport web -n demo --tcp=80:8080 --dry-run=client -o yaml
kubectl create service loadbalancer web -n demo --tcp=80:8080 --dry-run=client -o yaml
Έλεγχος Endpoints
kubectl get endpoints web -n demo -o wide
kubectl get endpointslices -n demo -l kubernetes.io/service-name=web
kubectl describe endpointslice -n demo -l kubernetes.io/service-name=web
Αν ένα Service δεν έχει Endpoints, συνήθως ο Selector δεν ταιριάζει με τα Pod Labels ή τα Pods δεν είναι Ready.
Δοκιμή DNS μέσα στο Cluster
kubectl run dns-test -n demo --rm -it --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
kubectl run dns-test -n demo --rm -it --image=busybox:1.36 --restart=Never -- nslookup web.demo.svc.cluster.local
kubectl run dns-test -n demo --rm -it --image=busybox:1.36 --restart=Never -- cat /etc/resolv.conf
Έλεγχος CoreDNS
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=100
kubectl get configmap coredns -n kube-system -o yaml
Έλεγχος κίνησης Service
kubectl run curl -n demo --rm -it --image=curlimages/curl:8.8.0 --restart=Never -- curl -sv http://web.demo.svc.cluster.local
kubectl run netshoot -n demo --rm -it --image=nicolaka/netshoot --restart=Never -- curl -sv http://web.demo.svc.cluster.local
18. Ingress και Gateway API
Προβολή Ingress Resources
kubectl get ingress -A
kubectl describe ingress web -n demo
kubectl get ingress web -n demo -o yaml
Έλεγχος IngressClass
kubectl get ingressclass
kubectl describe ingressclass <ingressclass>
Έλεγχος Ingress Controller
kubectl get pods -A | grep -i ingress
kubectl get svc -A | grep -i ingress
kubectl logs -n ingress-nginx deployment/ingress-nginx-controller --tail=100
Το Namespace και τα Labels εξαρτώνται από τον συγκεκριμένο Controller.
Προβολή Gateway API Resources
kubectl get gatewayclasses
kubectl get gateways -A
kubectl get httproutes -A
kubectl get grpcroutes -A
kubectl get tlsroutes -A
kubectl get referencegrants -A
Λεπτομέρειες Gateway API Resources
kubectl describe gateway <gateway> -n <namespace>
kubectl describe httproute <route> -n <namespace>
kubectl get httproute <route> -n <namespace> -o yaml
Τυπική διαδικασία Triage για Ingress και Gateway
kubectl get ingress,svc,ep,endpointslice -n demo -o wide
kubectl describe ingress web -n demo
kubectl get events -n demo --sort-by=.lastTimestamp
kubectl get pods -A -o wide | grep -i ingress
kubectl logs -n <ingress-namespace> <ingress-controller-pod> --tail=200
19. NetworkPolicies και δοκιμές δικτύου
Προβολή NetworkPolicies
kubectl get networkpolicy -A
kubectl describe networkpolicy <policy> -n <namespace>
kubectl get networkpolicy <policy> -n <namespace> -o yaml
Pods για δοκιμές δικτύου
kubectl run netshoot -n demo --rm -it --image=nicolaka/netshoot --restart=Never -- bash
kubectl run busybox -n demo --rm -it --image=busybox:1.36 --restart=Never -- sh
kubectl run curl -n demo --rm -it --image=curlimages/curl:8.8.0 --restart=Never -- sh
Δοκιμή DNS και HTTP
nslookup web.demo.svc.cluster.local
curl -sv http://web.demo.svc.cluster.local
wget -qO- http://web.demo.svc.cluster.local
nc -vz web.demo.svc.cluster.local 80
Δοκιμή επικοινωνίας μεταξύ Pods
kubectl get pods -n demo -o wide
kubectl exec -it <pod> -n demo -- sh
ip addr
ip route
cat /etc/resolv.conf
Βασικός έλεγχος CNI
kubectl get pods -n kube-system -o wide
kubectl get daemonsets -n kube-system
kubectl get nodes -o wide
kubectl describe node <node>
Αν τα NetworkPolicies δεν εφαρμόζονται, έλεγξε πρώτα αν το CNI της εγκατάστασής σου υποστηρίζει την επιβολή τους.
20. ConfigMaps, Secrets και ServiceAccounts
Δημιουργία ConfigMap
kubectl create configmap app-config -n demo --from-literal=LOG_LEVEL=info
kubectl create configmap app-config -n demo --from-file=application.yaml
kubectl create configmap app-config -n demo --from-env-file=.env
kubectl create configmap app-config -n demo --from-literal=LOG_LEVEL=info --dry-run=client -o yaml > configmap.yaml
Έλεγχος ConfigMap
kubectl get configmap app-config -n demo
kubectl describe configmap app-config -n demo
kubectl get configmap app-config -n demo -o yaml
Δημιουργία Secret
kubectl create secret generic app-secret -n demo --from-literal=password='dummy'
kubectl create secret generic app-secret -n demo --from-file=credentials.json
kubectl create secret tls web-tls -n demo --cert=tls.crt --key=tls.key
kubectl create secret docker-registry regcred -n demo \
--docker-server=<registry> \
--docker-username=<user> \
--docker-password=<password> \
--docker-email=<email>
Δημιουργία Secret Manifest χωρίς πραγματικές τιμές
kubectl create secret generic app-secret -n demo --from-literal=password='dummy' --dry-run=client -o yaml > secret.example.yaml
Τα πραγματικά Secrets δεν πρέπει να αποθηκεύονται σε Git Repositories των workshops. Χρησιμοποίησε εξωτερικά συστήματα Secrets, Sealed Secrets, External Secrets ή τη λύση διαχείρισης Secrets της πλατφόρμας σου.
Ανάγνωση Secret
kubectl get secret app-secret -n demo -o yaml
kubectl get secret app-secret -n demo -o jsonpath='{.data.password}' | base64 -d; echo
Το Base64 είναι κωδικοποίηση, όχι κρυπτογράφηση.
Δημιουργία ServiceAccount και έλεγχος Token
kubectl create serviceaccount app-sa -n demo
kubectl get serviceaccount app-sa -n demo -o yaml
kubectl create token app-sa -n demo
Ορισμός ImagePullSecrets
kubectl patch serviceaccount default -n demo -p '{"imagePullSecrets":[{"name":"regcred"}]}'
kubectl get serviceaccount default -n demo -o yaml
21. RBAC, Authentication και Authorization
Έλεγχος των δικών σου δικαιωμάτων
kubectl auth can-i get pods -n demo
kubectl auth can-i list secrets -n demo
kubectl auth can-i create deployments -n demo
kubectl auth can-i '*' '*' -n demo
kubectl auth whoami
Έλεγχος δικαιωμάτων ενός ServiceAccount
kubectl auth can-i get pods -n demo --as system:serviceaccount:demo:app-sa
kubectl auth can-i list secrets -n demo --as system:serviceaccount:demo:app-sa
kubectl auth can-i '*' '*' --as system:serviceaccount:demo:app-sa
Προβολή Roles και Bindings
kubectl get roles,rolebindings -n demo
kubectl get clusterroles,clusterrolebindings
kubectl describe role <role> -n demo
kubectl describe rolebinding <rolebinding> -n demo
kubectl describe clusterrole <clusterrole>
kubectl describe clusterrolebinding <clusterrolebinding>
Δημιουργία Role
kubectl create role pod-reader -n demo --verb=get,list,watch --resource=pods
kubectl create role deployment-editor -n demo --verb=get,list,watch,update,patch --resource=deployments.apps
Δημιουργία RoleBinding
kubectl create rolebinding read-pods -n demo --role=pod-reader --serviceaccount=demo:app-sa
kubectl create rolebinding read-pods-user -n demo --role=pod-reader --user=alice@example.com
kubectl create rolebinding read-pods-group -n demo --role=pod-reader --group=developers
ClusterRole και ClusterRoleBinding
kubectl create clusterrole node-reader --verb=get,list,watch --resource=nodes
kubectl create clusterrolebinding node-reader-binding --clusterrole=node-reader --user=alice@example.com
Τα δικαιώματα σε ολόκληρο το Cluster είναι ιδιαίτερα ευαίσθητα. Παραχώρησέ τα μόνο όταν τα Roles σε επίπεδο Namespace δεν επαρκούν.
Reconciliation του RBAC από Manifests
kubectl auth reconcile -f rbac.yaml --dry-run=server
kubectl auth reconcile -f rbac.yaml
Προβολή των ServiceAccounts που χρησιμοποιούν τα Pods
kubectl get pods -A -o custom-columns='NS:.metadata.namespace,POD:.metadata.name,SA:.spec.serviceAccountName'
22. Ασφάλεια Pods και Containers
Έλεγχος SecurityContext
kubectl get pod <pod> -n demo -o jsonpath='{.spec.securityContext}'
kubectl get pod <pod> -n demo -o jsonpath='{.spec.containers[*].securityContext}'
kubectl get pods -A -o custom-columns='NS:.metadata.namespace,POD:.metadata.name,SA:.spec.serviceAccountName'
Εύρεση Privileged Pods
kubectl get pods -A -o json | jq -r '
.items[] |
select(any(.spec.containers[]?; .securityContext.privileged == true)) |
[.metadata.namespace, .metadata.name] | @tsv'
Εύρεση Pods με Host Network, Host PID ή Host IPC
kubectl get pods -A -o json | jq -r '
.items[] |
select(.spec.hostNetwork == true or .spec.hostPID == true or .spec.hostIPC == true) |
[.metadata.namespace, .metadata.name, "host-level"] | @tsv'
Pod Security Admission μέσω Namespace Label
kubectl label namespace demo pod-security.kubernetes.io/enforce=baseline --overwrite
kubectl label namespace demo pod-security.kubernetes.io/audit=restricted --overwrite
kubectl label namespace demo pod-security.kubernetes.io/warn=restricted --overwrite
kubectl get namespace demo --show-labels
Έλεγχος σφαλμάτων Admission
kubectl apply --dry-run=server -f pod.yaml
kubectl get events -n demo --sort-by=.lastTimestamp
Έλεγχος Images και Pull Policy
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{" "}{.imagePullPolicy}{";"}{end}{"\n"}{end}'
Απόφυγε ανεξέλεγκτα Tags :latest σε περιβάλλοντα που προσομοιώνουν Production.
23. Διαχείριση πόρων: Requests, Limits, Quotas και LimitRanges
Προβολή Requests και Limits
kubectl get pod <pod> -n demo -o jsonpath='{.spec.containers[*].resources}'
kubectl describe pod <pod> -n demo
kubectl get pods -n demo -o custom-columns='POD:.metadata.name,CPU_REQ:.spec.containers[*].resources.requests.cpu,MEM_REQ:.spec.containers[*].resources.requests.memory,CPU_LIM:.spec.containers[*].resources.limits.cpu,MEM_LIM:.spec.containers[*].resources.limits.memory'
Ορισμός Requests και Limits
kubectl set resources deployment/web -n demo --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=512Mi
kubectl set resources deployment/web -n demo -c app --requests=cpu=200m,memory=256Mi --limits=cpu=1,memory=1Gi
ResourceQuota
kubectl get resourcequota -n demo
kubectl describe resourcequota -n demo
kubectl create quota demo-quota -n demo \
--hard=pods=20,requests.cpu=4,requests.memory=8Gi,limits.cpu=8,limits.memory=16Gi
LimitRange
kubectl get limitrange -n demo
kubectl describe limitrange -n demo
Τα LimitRanges συντηρούνται συνήθως ως Manifests, επειδή οι εντολές δημιουργίας τους έχουν περιορισμένες δυνατότητες.
Έλεγχος Metrics Server
kubectl top nodes
kubectl top pods -A
kubectl top pods -n demo --containers
kubectl get apiservice v1beta1.metrics.k8s.io
kubectl describe apiservice v1beta1.metrics.k8s.io
Αν το kubectl top δεν λειτουργεί, έλεγξε το Metrics Server και το αντίστοιχο APIService.
24. Storage: StorageClasses, PVs, PVCs, CSI και VolumeAttachments
Προβολή StorageClasses
kubectl get storageclass
kubectl describe storageclass <storageclass>
kubectl get storageclass -o yaml
Προβολή PVCs και PVs
kubectl get pvc -A
kubectl get pv
kubectl describe pvc <pvc> -n demo
kubectl describe pv <pv>
Δημιουργία PVC
cat <<'YAML' | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
namespace: demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard
YAML
Προσάρτηση PVC σε Debug Pod
cat <<'YAML' | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: pvc-debug
namespace: demo
spec:
restartPolicy: Never
containers:
- name: shell
image: busybox:1.36
command: ["sh", "-c", "sleep 3600"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: data
YAML
Έλεγχος CSI
kubectl get csidrivers
kubectl get csinodes
kubectl get volumeattachments
kubectl describe volumeattachment <volumeattachment>
kubectl get pods -A | grep -i csi
Διαδικασία Triage για Storage
kubectl describe pvc <pvc> -n demo
kubectl describe pod <pod> -n demo
kubectl get events -n demo --sort-by=.lastTimestamp
kubectl get pv,pvc -A
kubectl get storageclass
kubectl get volumeattachments
25. Nodes, Scheduling, Taints, Drain και συντήρηση
Προβολή Nodes
kubectl get nodes
kubectl get nodes -o wide
kubectl describe node <node>
kubectl get node <node> -o yaml
Προβολή Pods σε συγκεκριμένο Node
kubectl get pods -A --field-selector=spec.nodeName=<node> -o wide
Node Labels
kubectl get nodes --show-labels
kubectl label node <node> disktype=ssd
kubectl label node <node> disktype-
Ορισμός και αφαίρεση Taints
kubectl taint nodes <node> dedicated=gpu:NoSchedule
kubectl taint nodes <node> dedicated=gpu:NoSchedule-
kubectl describe node <node> | grep -i taints -A2
Node cordon και uncordon
kubectl cordon <node>
kubectl get node <node>
kubectl uncordon <node>
Το cordon αποτρέπει το νέο Scheduling στο Node. Τα Pods που ήδη εκτελούνται παραμένουν εκεί.
Node drain
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data --timeout=10m
kubectl uncordon <node>
Πριν από το drain, έλεγξε:
kubectl get pdb -A
kubectl get pods -A --field-selector=spec.nodeName=<node> -o wide
kubectl describe node <node>
Ανάλυση προβλημάτων Scheduling
kubectl describe pod <pod> -n demo
kubectl get events -n demo --sort-by=.lastTimestamp
kubectl describe node <node>
kubectl get resourcequota,limitrange -n demo
kubectl get pods -A --field-selector=status.phase=Pending
Έλεγχος πίεσης πόρων στο Node
kubectl describe node <node> | grep -E 'Pressure|Allocatable|Capacity' -A5
kubectl get events -A --field-selector=reason=Evicted
kubectl top node <node>
kubectl top pods -A --sort-by=memory
26. Events, Metrics και Observability
Προβολή Events
kubectl get events -n demo
kubectl get events -n demo --sort-by=.lastTimestamp
kubectl get events -A --sort-by=.lastTimestamp | tail -50
kubectl get events -A --field-selector=type=Warning
Νεότερη εντολή events, εφόσον υποστηρίζεται
kubectl events -n demo
kubectl events -n demo --for pod/<pod>
kubectl events -A --types=Warning
Οι παλαιότερες εκδόσεις του kubectl δεν υποστηρίζουν όλες την εντολή kubectl events με τον ίδιο τρόπο.
Προβολή Metrics
kubectl top nodes
kubectl top pods -A
kubectl top pod <pod> -n demo
kubectl top pods -n demo --containers
Έλεγχος Health και Readiness του API Server
kubectl get --raw /readyz?verbose
kubectl get --raw /livez?verbose
kubectl get --raw /healthz
Εξαγωγή πληροφοριών Cluster
kubectl cluster-info
kubectl cluster-info dump
kubectl cluster-info dump --namespaces demo --output-directory ./cluster-dump
Το cluster-info dump μπορεί να περιέχει ευαίσθητα δεδομένα. Μη μοιράζεσαι την έξοδο χωρίς προηγούμενο έλεγχο.
27. Συνοπτική αναφορά βασικών εντολών kubectl
| Εντολή | Σκοπός | Τυπική χρήση |
|---|---|---|
kubectl annotate |
Ορίζει, αλλάζει ή αφαιρεί Annotations. | Metadata, αιτία αλλαγής και πληροφορίες για Controllers. |
kubectl api-resources |
Εμφανίζει διαθέσιμους τύπους Resources. | Εξερεύνηση API και έλεγχος CRDs. |
kubectl api-versions |
Εμφανίζει διαθέσιμες API Versions. | Έλεγχος συμβατότητας Manifests. |
kubectl apply |
Εφαρμόζει δηλωτική Configuration. | Συνήθης επιλογή για αλλαγές τύπου GitOps. |
kubectl attach |
Συνδέεται με διεργασία Container που εκτελείται. | Διαδραστική διάγνωση. |
kubectl auth |
Ελέγχει Authorization και εκτελεί Reconciliation του RBAC. | can-i, whoami, reconcile. |
kubectl autoscale |
Δημιουργεί HPA. | Εκκίνηση Autoscaling με βάση το CPU. |
kubectl certificate |
Διαχειρίζεται CertificateSigningRequests. | Έγκριση ή απόρριψη CSRs. |
kubectl cluster-info |
Εμφανίζει τα Endpoints του Cluster. | Αρχική διάγνωση Cluster. |
kubectl completion |
Δημιουργεί Shell Autocomplete. | Ταχύτερη εργασία στο Shell. |
kubectl config |
Διαχειρίζεται το kubeconfig. | Context, Cluster, User και Namespace. |
kubectl cordon |
Αποκλείει νέο Scheduling σε Node. | Προετοιμασία συντήρησης. |
kubectl cp |
Αντιγράφει αρχεία μεταξύ Container και τοπικού συστήματος. | Διάγνωση και εξαγωγή μικρών αρχείων. |
kubectl create |
Δημιουργεί Resources με Imperative εντολές. | Γρήγορες δοκιμές και δημιουργία YAML. |
kubectl debug |
Ξεκινά Debug Container ή Debug Session σε Node. | Διάγνωση κατά την εκτέλεση. |
kubectl delete |
Διαγράφει Resources. | Καθαρισμός, Rollback και νέα δημιουργία από Controller. |
kubectl describe |
Εμφανίζει λεπτομέρειες μαζί με Events. | Troubleshooting. |
kubectl diff |
Δείχνει διαφορές ανάμεσα σε Manifest και Cluster. | Έλεγχος πριν από το apply. |
kubectl drain |
Απομακρύνει Pods από Node για συντήρηση. | Node Patching και συντήρηση υλικού. |
kubectl edit |
Τροποποιεί διαδραστικά ένα Resource. | Επείγουσα αλλαγή. |
kubectl events |
Εμφανίζει Events, αν το υποστηρίζει η έκδοση. | Γρήγορη διάγνωση μέσω Events. |
kubectl exec |
Εκτελεί εντολή μέσα σε Container. | Δοκιμές Shell, διεργασιών και δικτύου. |
kubectl explain |
Εξηγεί Fields του API. | Σύνταξη Manifests. |
kubectl expose |
Δημιουργεί Service για ένα Resource. | Γρήγορη δημιουργία Service. |
kubectl get |
Παραθέτει ή ανακτά Resources. | Συνήθης εντολή ανάγνωσης. |
kubectl kustomize |
Παράγει Manifests από Kustomization. | Δημιουργία Manifests. |
kubectl label |
Ορίζει, αλλάζει ή αφαιρεί Labels. | Selectors, οργάνωση και Policies. |
kubectl logs |
Εμφανίζει Container Logs. | Διάγνωση εφαρμογής. |
kubectl options |
Εμφανίζει γενικά Options. | Βοήθεια CLI. |
kubectl patch |
Εφαρμόζει μερική αλλαγή. | Στοχευμένη τροποποίηση Fields. |
kubectl plugin |
Εμφανίζει Plugins. | Επεκτάσεις CLI. |
kubectl port-forward |
Προωθεί τοπική θύρα σε Pod ή Service. | Τοπικές δοκιμές. |
kubectl proxy |
Ξεκινά τοπικό Proxy προς το Kubernetes API. | Εξερεύνηση API. |
kubectl replace |
Αντικαθιστά ένα Resource. | Πλήρης αντικατάσταση Object. |
kubectl rollout |
Διαχειρίζεται Rollouts. | Status, History, Undo και Restart. |
kubectl run |
Ξεκινά Pod ή δημιουργεί Manifest. | Debugging και γρήγορες δοκιμές. |
kubectl scale |
Αλλάζει τον αριθμό Replicas. | Χειροκίνητο Scaling. |
kubectl set |
Ορίζει επιμέρους στοιχεία ενός Resource. | Image, Env, Resources και ServiceAccount. |
kubectl taint |
Διαχειρίζεται Node Taints. | Έλεγχος Scheduling. |
kubectl top |
Εμφανίζει Metrics. | Επισκόπηση CPU και μνήμης. |
kubectl uncordon |
Επιτρέπει ξανά το Scheduling σε Node. | Ολοκλήρωση συντήρησης. |
kubectl version |
Εμφανίζει τις εκδόσεις Client και Server. | Έλεγχος συμβατότητας. |
kubectl wait |
Περιμένει συγκεκριμένο Condition. | Scripts, CI και έλεγχος Rollout. |
Βοήθεια για κάθε εντολή
kubectl --help
kubectl get --help
kubectl create --help
kubectl create secret --help
kubectl rollout --help
kubectl rollout history --help
kubectl options
28. kubeadm: επισκόπηση
Το kubeadm είναι εργαλείο Bootstrap για Kubernetes Clusters. Δημιουργεί ένα Cluster με τις ελάχιστες βασικές λειτουργίες. Δεν παρέχει αυτόματα Machine Provisioning, Cloud Integration, Monitoring, Dashboards ή πλήρη εγκατάσταση Add-ons.
Τυπικές εργασίες:
| Εντολή | Σκοπός |
|---|---|
kubeadm init |
Αρχικοποιεί Control Plane Node. |
kubeadm join |
Προσθέτει Worker Node ή επιπλέον Control Plane Node στο Cluster. |
kubeadm upgrade |
Σχεδιάζει και εκτελεί Cluster Upgrade. |
kubeadm config |
Εμφανίζει, μετατρέπει, ελέγχει και διαχειρίζεται kubeadm Configuration και Images. |
kubeadm token |
Διαχειρίζεται Bootstrap Tokens. |
kubeadm reset |
Αφαιρεί τα Artifacts του kubeadm από ένα Node. |
kubeadm certs |
Ελέγχει και ανανεώνει Kubernetes Certificates. |
kubeadm kubeconfig |
Διαχειρίζεται αρχεία kubeconfig. |
kubeadm version |
Εμφανίζει την έκδοση του kubeadm. |
kubeadm completion |
Δημιουργεί Shell Completion. |
kubeadm alpha |
Περιέχει πειραματικές λειτουργίες· μην τις χρησιμοποιείς ως σταθερή βάση Operations. |
Βοήθεια
kubeadm --help
kubeadm init --help
kubeadm join --help
kubeadm upgrade --help
kubeadm certs --help
29. kubeadm init
Ελάχιστη εκκίνηση Control Plane
sudo kubeadm init
Η εντολή χρησιμοποιεί τις προεπιλεγμένες ρυθμίσεις και επαρκεί για Labs, αλλά δεν είναι αρκετά συγκεκριμένη για αναπαραγώγιμες εγκαταστάσεις.
Αρχικοποίηση με Pod CIDR
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Το Pod CIDR πρέπει να ταιριάζει με το CNI. Το Flannel χρησιμοποιεί το 10.244.0.0/16 σε πολλά παραδείγματα· άλλα CNIs έχουν διαφορετικές προεπιλογές.
Αρχικοποίηση με Advertise Address του API Server
sudo kubeadm init --apiserver-advertise-address=<ip-address>
Η παράμετρος έχει σημασία σε Hosts με περισσότερα από ένα Network Interfaces.
Αρχικοποίηση με Control Plane Endpoint
sudo kubeadm init \
--control-plane-endpoint=<dns-name-or-load-balancer>:6443 \
--upload-certs
Το --control-plane-endpoint είναι σημαντικό για Control Planes υψηλής διαθεσιμότητας. Το --upload-certs διευκολύνει την προσθήκη επιπλέον Control Plane Nodes αργότερα.
Αρχικοποίηση με αρχείο Configuration
sudo kubeadm init --config kubeadm-init.yaml
Παράδειγμα:
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.0.2.10
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.36.0
controlPlaneEndpoint: k8s-api.example.internal:6443
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
Μετά το init: ρύθμιση kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
Μετά το init: εγκατάσταση CNI
kubectl get nodes
kubectl get pods -n kube-system
kubectl apply -f <cni-manifest.yaml>
kubectl get nodes -w
Χωρίς CNI, τα Nodes συχνά παραμένουν σε κατάσταση NotReady και τα CoreDNS Pods δεν μπορούν να εκτελεστούν σωστά.
Έλεγχος του init μέσω Phases
sudo kubeadm init phase --help
sudo kubeadm init phase preflight --config kubeadm-init.yaml
sudo kubeadm init phase certs all --config kubeadm-init.yaml
sudo kubeadm init phase kubeconfig all --config kubeadm-init.yaml
sudo kubeadm init phase control-plane all --config kubeadm-init.yaml
sudo kubeadm init phase etcd local --config kubeadm-init.yaml
sudo kubeadm init phase upload-config all --config kubeadm-init.yaml
sudo kubeadm init phase bootstrap-token --config kubeadm-init.yaml
sudo kubeadm init phase addon all --config kubeadm-init.yaml
Τα Phases βοηθούν στο Debugging και σε ειδικές περιπτώσεις. Για μια συνηθισμένη εγκατάσταση χρησιμοποιείς κανονικά το kubeadm init --config ....
30. kubeadm join
Εμφάνιση της εντολής Join
Σε υπάρχον Control Plane Node:
kubeadm token create --print-join-command
Προσθήκη Worker Node
Στον νέο Worker Node:
sudo kubeadm join <api-server>:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
Join με αρχείο Configuration
sudo kubeadm join --config kubeadm-join.yaml
Παράδειγμα:
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: k8s-api.example.internal:6443
token: abcdef.0123456789abcdef
caCertHashes:
- sha256:<hash>
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
Προσθήκη επιπλέον Control Plane Node
sudo kubeadm join <api-server>:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane \
--certificate-key <certificate-key>
Δημιούργησε ή ανανέωσε το Certificate Key με:
sudo kubeadm init phase upload-certs --upload-certs
Phases της διαδικασίας Join
sudo kubeadm join phase --help
sudo kubeadm join phase preflight --config kubeadm-join.yaml
sudo kubeadm join phase kubelet-start --config kubeadm-join.yaml
sudo kubeadm join phase control-plane-prepare all --config kubeadm-join.yaml
sudo kubeadm join phase control-plane-join all --config kubeadm-join.yaml
31. kubeadm reset
Reset ενός Node
sudo kubeadm reset
sudo kubeadm reset -f
Το kubeadm reset αφαιρεί τα τοπικά Artifacts του kubeadm. Δεν επαναφέρει ολόκληρο το λειτουργικό σύστημα.
Reset με CRI Socket
sudo kubeadm reset -f --cri-socket unix:///var/run/containerd/containerd.sock
Έλεγχος μετά το Reset
sudo systemctl status kubelet
sudo ls -la /etc/kubernetes/
sudo ls -la /var/lib/kubelet/
sudo iptables-save | grep -i kube || true
ip link
Ανάλογα με το CNI, μπορεί να χρειαστεί χωριστός καθαρισμός Network Interfaces, κανόνων iptables/nftables ή καταλόγων CNI.
Προσεκτική αφαίρεση υπολειμμάτων CNI
sudo rm -rf /etc/cni/net.d
sudo rm -rf /var/lib/cni
Εκτέλεσε αυτές τις εντολές μόνο αν το Node αφαιρείται πράγματι από το Cluster ή εγκαθίσταται ξανά.
32. kubeadm upgrade
Έλεγχος τρεχουσών εκδόσεων
kubectl get nodes
kubectl version
kubeadm version
Προβολή σχεδίου Upgrade
sudo kubeadm upgrade plan
Upgrade του Control Plane
sudo kubeadm upgrade apply v1.36.0
Προσάρμοσε την εντολή στην έκδοση προορισμού. Στην πράξη εγκαθιστάς πρώτα την αντίστοιχη έκδοση του Package kubeadm.
Βήμα Upgrade των Nodes
Σε επιπλέον Control Plane Nodes και Worker Nodes:
sudo kubeadm upgrade node
Προβολή διαφορών
sudo kubeadm upgrade diff v1.36.0
Τυπική σειρά ενεργειών ανά Node
kubectl cordon <node>
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
# Ενημέρωσε τα kubeadm/kubelet/kubectl μέσω του Package Manager
sudo kubeadm upgrade node
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon <node>
kubectl get nodes
Για Control Plane Nodes έλεγξε επίσης το API Server, το Controller Manager, τον Scheduler και το etcd.
33. kubeadm config και Images
Εμφάνιση προεπιλεγμένων ρυθμίσεων
kubeadm config print init-defaults
kubeadm config print join-defaults
Μεταφορά Configuration σε νεότερη μορφή
kubeadm config migrate --old-config old.yaml --new-config new.yaml
Έλεγχος Configuration
kubeadm config validate --config kubeadm-init.yaml
Ανάγνωση του Cluster Configuration από ConfigMap
kubectl get configmap kubeadm-config -n kube-system -o yaml
kubectl get configmap kubeadm-config -n kube-system -o jsonpath='{.data.ClusterConfiguration}'
Λίστα και προληπτική λήψη Images
kubeadm config images list
kubeadm config images list --kubernetes-version v1.36.0
sudo kubeadm config images pull
sudo kubeadm config images pull --kubernetes-version v1.36.0
sudo kubeadm config images pull --cri-socket unix:///var/run/containerd/containerd.sock
Αυτό είναι σημαντικό για Air-Gapped περιβάλλοντα ή ελεγχόμενα Registry Mirrors.
34. kubeadm token, certs και kubeconfig
Προβολή και δημιουργία Bootstrap Tokens
kubeadm token list
kubeadm token generate
kubeadm token create
kubeadm token create --ttl 2h
kubeadm token create --print-join-command
kubeadm token delete <token-id>
Έλεγχος λήξης Certificates
sudo kubeadm certs check-expiration
Ανανέωση Certificates
sudo kubeadm certs renew all
sudo kubeadm certs renew apiserver
sudo kubeadm certs renew apiserver-kubelet-client
sudo kubeadm certs renew front-proxy-client
sudo kubeadm certs renew etcd-server
sudo kubeadm certs renew etcd-peer
sudo kubeadm certs renew etcd-healthcheck-client
sudo kubeadm certs renew apiserver-etcd-client
Μετά την ανανέωση των Certificates πρέπει να επανεκκινήσεις ή να ανανεώσεις τα Static Pods ή τα αντίστοιχα Components, συχνά με επανεκκίνηση του kubelet ή με εκ νέου εγγραφή ή προσωρινή μετακίνηση των Manifests.
Δημιουργία Certificate Key
sudo kubeadm certs certificate-key
sudo kubeadm init phase upload-certs --upload-certs
Δημιουργία CSRs
sudo kubeadm certs generate-csr
Διαχείριση αρχείων kubeconfig
sudo kubeadm kubeconfig --help
sudo kubeadm kubeconfig user --client-name <name>
sudo kubeadm init phase kubeconfig admin
sudo kubeadm init phase kubeconfig kubelet
sudo kubeadm init phase kubeconfig controller-manager
sudo kubeadm init phase kubeconfig scheduler
Τα τυπικά αρχεία kubeconfig του kubeadm βρίσκονται στη διαδρομή:
ls -la /etc/kubernetes/*.conf
35. kubeadm phases, completion, version και alpha
Έκδοση
kubeadm version
kubeadm version -o yaml
kubeadm version -o json
Συμπλήρωση εντολών Shell
source <(kubeadm completion bash)
kubeadm completion zsh
kubeadm completion fish
Προβολή Phases
kubeadm init phase --help
kubeadm join phase --help
kubeadm reset phase --help
Alpha λειτουργίες
kubeadm alpha --help
Οι Alpha λειτουργίες μπορούν να αλλάξουν ή να αφαιρεθούν. Μην τις θεωρείς σταθερή βάση για Production Runbooks.
36. kubelet και systemd
Το kubelet είναι ο Agent του Node. Σε εγκαταστάσεις kubeadm εκτελείται συνήθως ως υπηρεσία systemd και εκκινεί Static Pods από τον κατάλογο /etc/kubernetes/manifests.
Έλεγχος της υπηρεσίας
sudo systemctl status kubelet
sudo systemctl is-enabled kubelet
sudo systemctl cat kubelet
sudo journalctl -u kubelet -n 200 --no-pager
sudo journalctl -u kubelet -f
Διαχείριση της υπηρεσίας
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl stop kubelet
sudo systemctl start kubelet
Έλεγχος του Configuration του kubelet
sudo cat /var/lib/kubelet/config.yaml
sudo cat /var/lib/kubelet/kubeadm-flags.env
sudo cat /etc/default/kubelet 2>/dev/null || true
sudo cat /etc/sysconfig/kubelet 2>/dev/null || true
Άμεση κλήση του kubelet
kubelet --help
kubelet --version
Η άμεση εκκίνηση του kubelet δεν είναι συνήθης στη λειτουργία ενός Cluster. Κανονικά ελέγχεις και διαχειρίζεσαι το kubelet μέσω systemd.
Έλεγχος συνηθισμένων σφαλμάτων του kubelet
sudo journalctl -u kubelet -n 300 --no-pager | grep -Ei 'error|failed|certificate|cni|runtime|eviction'
crictl info
crictl ps -a
kubectl describe node <node>
37. Components του Control Plane: kube-apiserver, Scheduler, Controller Manager
Σε Clusters kubeadm τα Components του Control Plane εκτελούνται συνήθως ως Static Pods.
Εμφάνιση των Manifests των Static Pods
sudo ls -la /etc/kubernetes/manifests
sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml
sudo cat /etc/kubernetes/manifests/kube-controller-manager.yaml
sudo cat /etc/kubernetes/manifests/kube-scheduler.yaml
sudo cat /etc/kubernetes/manifests/etcd.yaml
Έλεγχος των Pods του Control Plane
kubectl get pods -n kube-system -o wide
kubectl describe pod -n kube-system kube-apiserver-<node>
kubectl logs -n kube-system kube-apiserver-<node> --tail=100
kubectl logs -n kube-system kube-controller-manager-<node> --tail=100
kubectl logs -n kube-system kube-scheduler-<node> --tail=100
kube-apiserver
kube-apiserver --help
kubectl get --raw /readyz?verbose
kubectl get --raw /livez?verbose
kubectl get --raw /metrics | head
Σημαντικά θέματα για τον API Server είναι τα Certificates, οι Admission Controllers, το Authentication, το Authorization, τα Audit Logs, η σύνδεση με το etcd και τα Feature Gates.
kube-controller-manager
kube-controller-manager --help
kubectl logs -n kube-system kube-controller-manager-<node> --tail=200
Ο Controller Manager περιέχει τους κεντρικούς Control Loops που συγκλίνουν την πραγματική κατάσταση προς την επιθυμητή.
kube-scheduler
kube-scheduler --help
kubectl logs -n kube-system kube-scheduler-<node> --tail=200
Ο Scheduler επιλέγει Nodes για τα Pods. Τα σφάλματα Scheduling εμφανίζονται συχνά στα Pod Events και όχι μόνο στα Logs του Scheduler.
38. kube-proxy
Το kube-proxy υλοποιεί τους κανόνες δικτύωσης των Services. Ανάλογα με το Mode χρησιμοποιεί iptables, IPVS, nftables ή μηχανισμούς της εκάστοτε διανομής.
Έλεγχος του kube-proxy
kubectl get daemonset kube-proxy -n kube-system
kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide
kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=100
kubectl get configmap kube-proxy -n kube-system -o yaml
Άμεση εκτέλεση του Binary
kube-proxy --help
kube-proxy --version
Έλεγχος των κανόνων Service σε Node
sudo iptables-save | grep KUBE-SVC | head
sudo iptables-save | grep KUBE-SEP | head
sudo ipvsadm -Ln 2>/dev/null | head || true
sudo nft list ruleset 2>/dev/null | grep -i kube | head || true
Οι διαθέσιμες εντολές εξαρτώνται από το Mode του kube-proxy και το λειτουργικό σύστημα.
39. Container Runtime: crictl, ctr, nerdctl και Docker
crictl: βασικό εργαλείο για CRI Debugging
Το crictl επικοινωνεί με το Kubernetes Container Runtime Interface API. Για το Debugging ενός Node είναι συνήθως το καταλληλότερο εργαλείο.
Ρύθμιση του Endpoint
sudo crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
sudo crictl config image-endpoint unix:///var/run/containerd/containerd.sock
sudo cat /etc/crictl.yaml
Για το CRI-O:
sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock ps
Πληροφορίες Runtime
sudo crictl info
sudo crictl version
Εμφάνιση Pods και Containers
sudo crictl pods
sudo crictl pods -a
sudo crictl ps
sudo crictl ps -a
sudo crictl inspect <container-id>
sudo crictl inspectp <pod-id>
Logs και Exec
sudo crictl logs <container-id>
sudo crictl logs --tail=100 <container-id>
sudo crictl exec -it <container-id> sh
Images
sudo crictl images
sudo crictl pull <image>
sudo crictl rmi <image-id>
sudo crictl inspecti <image-id>
Διακοπή και αφαίρεση Containers
sudo crictl stop <container-id>
sudo crictl rm <container-id>
sudo crictl rmp <pod-id>
Χρησιμοποίησε τις εντολές διακοπής και αφαίρεσης σε Kubernetes Containers μόνο για διαγνωστικούς σκοπούς. Το kubelet δημιουργεί ξανά τα Containers που διαχειρίζεται.
ctr: εγγενές εργαλείο του containerd
Το ctr επικοινωνεί απευθείας με το containerd και λειτουργεί σε χαμηλότερο επίπεδο από το crictl.
sudo ctr version
sudo ctr namespaces list
sudo ctr -n k8s.io containers list
sudo ctr -n k8s.io tasks list
sudo ctr -n k8s.io images list
sudo ctr -n k8s.io snapshots list
sudo ctr -n k8s.io content ls
Τα Kubernetes Objects στο containerd βρίσκονται συνήθως στο Namespace k8s.io.
nerdctl
Το nerdctl παρέχει τρόπο χρήσης του containerd παρόμοιο με το Docker. Για Debugging του Kubernetes Runtime, το crictl είναι συνήθως καταλληλότερο επειδή εμφανίζει την κατάσταση μέσω του CRI.
sudo nerdctl version
sudo nerdctl -n k8s.io ps
sudo nerdctl -n k8s.io images
sudo nerdctl -n k8s.io logs <container>
sudo nerdctl -n k8s.io inspect <container>
Docker
Στα σύγχρονα Kubernetes Clusters, το Docker δεν χρησιμοποιείται πλέον απευθείας ως Kubernetes Runtime. Οι εντολές Docker εξακολουθούν να είναι χρήσιμες για την τοπική δημιουργία Images.
docker build -t <image> .
docker tag <image> <registry>/<image>:<tag>
docker push <registry>/<image>:<tag>
docker run --rm -it <image> sh
docker logs <container>
docker inspect <container>
Για Containers που εκκινούνται από το kubelet μέσω containerd ή CRI-O, χρησιμοποίησε crictl ps αντί για docker ps.
40. etcd, etcdctl και etcdutl
Το etcd αποθηκεύει την κατάσταση του Cluster. Οι εργασίες στο etcd είναι κρίσιμες. Πριν από αλλαγές χρειάζεσαι Backups, προγραμματισμένο χρονικό παράθυρο αλλαγής και σχέδιο Restore.
Έλεγχος του etcd Pod στο kubeadm
kubectl get pods -n kube-system -l component=etcd -o wide
kubectl logs -n kube-system etcd-<node> --tail=100
sudo cat /etc/kubernetes/manifests/etcd.yaml
Περιβάλλον etcdctl για kubeadm
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/healthcheck-client.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/healthcheck-client.key
Έλεγχος υγείας και κατάστασης των Endpoints
sudo -E etcdctl endpoint health
sudo -E etcdctl endpoint status -w table
sudo -E etcdctl member list -w table
Δημιουργία Snapshot
sudo -E etcdctl snapshot save /var/backups/etcd-snapshot.db
sudo -E etcdctl snapshot status /var/backups/etcd-snapshot.db -w table
Έλεγχος του Snapshot με etcdutl
etcdutl snapshot status /var/backups/etcd-snapshot.db -w table
Επαναφορά Snapshot
etcdutl snapshot restore /var/backups/etcd-snapshot.db --data-dir /var/lib/etcd-restore
Κατά την επαναφορά ενός Kubernetes Cluster, είναι σημαντικό να αυξάνεται το Revision ώστε οι Caches των Informers να μη χρησιμοποιούν δεδομένα από Revision που έχει μετακινηθεί προς τα πίσω:
etcdutl snapshot restore /var/backups/etcd-snapshot.db \
--bump-revision 1000000000 \
--mark-compacted \
--data-dir /var/lib/etcd-restore
Έλεγχος των Keys
sudo -E etcdctl get / --prefix --keys-only | head
sudo -E etcdctl get /registry/namespaces --prefix --keys-only
Κατά την κανονική λειτουργία διάβαζε την κατάσταση του Kubernetes μέσω του API και όχι απευθείας από το etcd. Τα απευθείας Queries στο etcd χρησιμεύουν στη διάγνωση και στο Disaster Recovery.
41. Helm
Το Helm διαχειρίζεται Kubernetes Applications ως Charts και Releases.
Repositories
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo list
helm repo update
helm search repo nginx
helm repo remove bitnami
Έλεγχος ενός Chart
helm show chart bitnami/nginx
helm show values bitnami/nginx
helm show readme bitnami/nginx
helm show crds <chart>
helm pull bitnami/nginx --untar
Έλεγχος και Render ενός Chart
helm lint ./chart
helm template web ./chart -f values.yaml
helm template web ./chart -f values.yaml --debug
helm template web ./chart -n demo --include-crds
Εγκατάσταση και Upgrade
helm install web ./chart -n demo --create-namespace
helm upgrade web ./chart -n demo -f values.yaml
helm upgrade --install web ./chart -n demo --create-namespace -f values.yaml
helm upgrade --install web ./chart -n demo --atomic --wait --timeout 5m
helm upgrade --install web ./chart -n demo --dry-run --debug
Το --atomic εκτελεί Rollback σε περίπτωση σφάλματος. Το --wait περιμένει να ικανοποιηθούν οι συνθήκες ετοιμότητας του Kubernetes στον βαθμό που μπορεί να τις ελέγξει το Helm.
Εμφάνιση Releases
helm list -n demo
helm list -A
helm status web -n demo
helm history web -n demo
Ανάκτηση περιεχομένου ενός Release
helm get values web -n demo
helm get values web -n demo --all
helm get manifest web -n demo
helm get hooks web -n demo
helm get notes web -n demo
helm get all web -n demo
Rollback και απεγκατάσταση
helm rollback web 1 -n demo
helm uninstall web -n demo
helm uninstall web -n demo --keep-history
Εξαρτήσεις
helm dependency list ./chart
helm dependency update ./chart
helm dependency build ./chart
Δημιουργία Package και OCI Registry
helm package ./chart
helm registry login <registry>
helm push ./chart-0.1.0.tgz oci://<registry>/<repo>
helm pull oci://<registry>/<repo>/<chart> --version 0.1.0
Plugins του Helm
helm plugin list
helm plugin install <plugin-url>
helm plugin update <plugin-name>
helm plugin uninstall <plugin-name>
42. Kustomize
Το Kustomize δημιουργεί Kubernetes Manifests από Bases και Overlays.
Kustomize ενσωματωμένο στο kubectl
kubectl kustomize overlays/dev
kubectl apply -k overlays/dev
kubectl diff -k overlays/dev
kubectl delete -k overlays/dev
Αυτόνομο Binary του kustomize
kustomize build overlays/dev
kustomize build overlays/prod > rendered.yaml
kustomize edit set image app=ghcr.io/example/app:1.2.3
kustomize edit set namespace demo
kustomize edit add resource deployment.yaml
Έλεγχος ενός τυπικού Overlay
find overlays/dev -maxdepth 2 -type f -name 'kustomization.yaml' -print
kubectl kustomize overlays/dev | kubectl apply --dry-run=server -f -
kubectl kustomize overlays/dev | kubectl diff -f -
Generators για ConfigMaps και Secrets
kustomize edit add configmap app-config --from-literal=LOG_LEVEL=info
kustomize edit add secret app-secret --from-literal=password=dummy
Μην αποθηκεύεις πραγματικά Secrets στο Git.
43. Τοπικά και ελαφριά Clusters: kind, minikube, k3d, k3s, k0s και Talos
Αυτά τα εργαλεία δεν αποτελούν μέρος του Kubernetes Core, αλλά χρησιμοποιούνται συχνά σε Workshops και Labs.
kind
kind version
kind create cluster
kind create cluster --name workshop
kind get clusters
kind get kubeconfig --name workshop
kind load docker-image <image> --name workshop
kind export logs ./kind-logs --name workshop
kind delete cluster --name workshop
minikube
minikube version
minikube start
minikube start --driver=docker
minikube status
minikube kubectl -- get pods -A
minikube addons list
minikube addons enable ingress
minikube service <service> -n <namespace>
minikube tunnel
minikube logs
minikube delete
k3d
k3d version
k3d cluster create workshop
k3d cluster list
k3d kubeconfig get workshop
k3d image import <image> -c workshop
k3d cluster delete workshop
k3s
sudo systemctl status k3s
sudo journalctl -u k3s -f
sudo k3s kubectl get nodes
sudo cat /etc/rancher/k3s/k3s.yaml
k0s
k0s version
sudo k0s status
sudo k0s kubectl get nodes
sudo k0s kubeconfig admin
sudo systemctl status k0scontroller
sudo systemctl status k0sworker
Talos
talosctl version
talosctl config endpoint <node-ip>
talosctl config node <node-ip>
talosctl health
talosctl kubeconfig .
talosctl service kubelet
talosctl logs kubelet
talosctl dmesg
talosctl dashboard
Το Talos δεν χρησιμοποιεί το κλασικό μοντέλο SSH ή Shell. Η διαχείρισή του γίνεται μέσω του talosctl.
44. Cloud Clusters: EKS, GKE και AKS
Τα Cloud CLIs συχνά δημιουργούν καταχωρίσεις kubeconfig. Έπειτα συνεχίζεις τη διαχείριση με kubectl.
AWS EKS
aws eks list-clusters --region <region>
aws eks describe-cluster --name <cluster> --region <region>
aws eks update-kubeconfig --name <cluster> --region <region>
kubectl get nodes
Google GKE
gcloud container clusters list --region <region>
gcloud container clusters get-credentials <cluster> --region <region> --project <project>
kubectl get nodes
Azure AKS
az aks list -o table
az aks get-credentials --resource-group <resource-group> --name <cluster>
az aks get-credentials --resource-group <resource-group> --name <cluster> --overwrite-existing
kubectl get nodes
Τα δικαιώματα, τα μοντέλα δικτύου, οι LoadBalancers, οι StorageClasses και τα Managed Add-ons διαφέρουν σημαντικά ανά Cloud Provider. Έλεγχε πάντα την τεκμηρίωση του εκάστοτε Provider.
45. Εντολές για CNI, Service Mesh και Add-ons
Αυτές οι εντολές εξαρτώνται από τα εγκατεστημένα Add-ons.
Cilium
cilium status
cilium version
cilium connectivity test
cilium sysdump
cilium config view
cilium policy get
hubble status
hubble observe
hubble observe --namespace demo
Calico
calicoctl version
calicoctl get nodes
calicoctl get ippools
calicoctl get networkpolicy -A
calicoctl get globalnetworkpolicy
calicoctl get felixconfiguration default -o yaml
Istio
istioctl version
istioctl proxy-status
istioctl analyze
istioctl x describe pod <pod> -n <namespace>
istioctl proxy-config clusters <pod> -n <namespace>
istioctl proxy-config listeners <pod> -n <namespace>
istioctl proxy-config routes <pod> -n <namespace>
istioctl proxy-config endpoints <pod> -n <namespace>
cert-manager
kubectl get certificates -A
kubectl get certificaterequests -A
kubectl get issuers -A
kubectl get clusterissuers
kubectl describe certificate <certificate> -n <namespace>
kubectl describe certificaterequest <request> -n <namespace>
kubectl get challenges,orders -A
Argo CD CLI και προβολή μέσω kubectl
argocd version
argocd login <server>
argocd app list
argocd app get <app>
argocd app sync <app>
argocd app diff <app>
argocd app history <app>
kubectl get applications -n argocd
kubectl describe application <app> -n argocd
Flux CLI
flux version
flux check
flux get sources all -A
flux get kustomizations -A
flux get helmreleases -A
flux reconcile kustomization <name> -n <namespace>
flux reconcile source git <name> -n <namespace>
Krew και Plugins του kubectl
kubectl plugin list
kubectl krew version
kubectl krew search
kubectl krew install ctx
kubectl krew install ns
kubectl krew install neat
kubectl krew update
kubectl krew upgrade
Τα Plugins είναι χρήσιμα, αλλά δεν είναι διαθέσιμα σε κάθε Cluster ή σε κάθε σταθμό διαχείρισης. Τα Runbooks πρέπει να παραμένουν κατανοητά και χωρίς μη απαραίτητα Plugins.
46. Βοηθητικές εντολές Linux για τη λειτουργία του Kubernetes
Αυτές οι εντολές εκτελούνται σε Nodes ή σε σταθμούς διαχείρισης.
systemd και Logs
sudo systemctl status kubelet
sudo systemctl status containerd
sudo systemctl status crio
sudo journalctl -u kubelet -n 200 --no-pager
sudo journalctl -u containerd -n 200 --no-pager
sudo journalctl -u crio -n 200 --no-pager
Δίκτυο
ip addr
ip route
ss -lntup
ss -antp | grep 6443
sudo iptables-save | grep -i kube
sudo nft list ruleset | grep -i kube
sudo ipvsadm -Ln
conntrack -L 2>/dev/null | head
DNS
resolvectl status 2>/dev/null || true
cat /etc/resolv.conf
nslookup kubernetes.default.svc.cluster.local <cluster-dns-ip>
dig kubernetes.default.svc.cluster.local @<cluster-dns-ip>
Αρχεία και Mounts
df -h
df -ih
mount | grep kubelet
findmnt | grep kubelet
sudo du -sh /var/lib/kubelet/* 2>/dev/null | sort -h
sudo du -sh /var/lib/containerd/* 2>/dev/null | sort -h
Έλεγχος Certificates
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | less
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -subject -issuer
Διεργασίες
ps aux | grep kubelet
ps aux | grep containerd
ps aux | grep kube-apiserver
sudo crictl ps -a
47. JSONPath, jq, yq, custom-columns και Templates
Παραδείγματα JSONPath
kubectl get pods -n demo -o jsonpath='{.items[*].metadata.name}'
kubectl get pod <pod> -n demo -o jsonpath='{.status.phase}'
kubectl get pod <pod> -n demo -o jsonpath='{.spec.nodeName}'
kubectl get secret app-secret -n demo -o jsonpath='{.data.password}' | base64 -d; echo
Λίστα με αλλαγές γραμμής
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'
custom-columns
kubectl get pods -A -o custom-columns='NS:.metadata.namespace,POD:.metadata.name,NODE:.spec.nodeName,PHASE:.status.phase'
kubectl get nodes -o custom-columns='NODE:.metadata.name,VERSION:.status.nodeInfo.kubeletVersion,RUNTIME:.status.nodeInfo.containerRuntimeVersion'
jq
kubectl get pods -A -o json | jq '.items[] | {namespace: .metadata.namespace, name: .metadata.name, phase: .status.phase}'
kubectl get pods -A -o json | jq -r '.items[] | [.metadata.namespace, .metadata.name, .status.phase] | @tsv'
yq
yq '.spec.template.spec.containers[].image' deployment.yaml
kubectl get deployment web -n demo -o yaml | yq '.spec.template.spec.containers[].image'
Template της Go
kubectl get pods -A -o go-template='{{range .items}}{{.metadata.namespace}}{{"\t"}}{{.metadata.name}}{{"\n"}}{{end}}'
48. Οδηγίες Troubleshooting
Γρήγορη αρχική διάγνωση του Cluster
kubectl config current-context
kubectl get nodes -o wide
kubectl get pods -A --field-selector=status.phase!=Running
kubectl get events -A --sort-by=.lastTimestamp | tail -100
kubectl get componentstatuses 2>/dev/null || true
kubectl get --raw /readyz?verbose
Pod σε κατάσταση Pending
kubectl describe pod <pod> -n <namespace>
kubectl get events -n <namespace> --sort-by=.lastTimestamp
kubectl get nodes -o wide
kubectl describe nodes | grep -E 'Taints:|Allocatable:|Allocated resources:' -A10
kubectl get resourcequota,limitrange -n <namespace>
Συνήθεις αιτίες: ανεπαρκείς πόροι, Taints χωρίς αντίστοιχα Tolerations, ασυμφωνία NodeSelector ή Affinity, PVC χωρίς Binding ή εξάντληση Quota.
CrashLoopBackOff
kubectl describe pod <pod> -n <namespace>
kubectl logs <pod> -n <namespace> --all-containers --previous
kubectl logs <pod> -n <namespace> --all-containers --tail=200
kubectl get pod <pod> -n <namespace> -o jsonpath='{.status.containerStatuses}'
Συνήθεις αιτίες: τερματισμός της διεργασίας, λανθασμένο Configuration, Secret που λείπει, υπερβολικά αυστηρό Probe, πρόβλημα δικαιωμάτων ή αποτυχία εκκίνησης του Container από το Image.
ImagePullBackOff ή ErrImagePull
kubectl describe pod <pod> -n <namespace>
kubectl get secret -n <namespace>
kubectl get serviceaccount -n <namespace> <serviceaccount> -o yaml
kubectl get events -n <namespace> --sort-by=.lastTimestamp
Συνήθεις αιτίες: λανθασμένο όνομα Image, Tag που λείπει, μη προσβάσιμο Registry, ImagePullSecret που λείπει ή Rate Limit.
Service χωρίς Endpoints
kubectl get svc <service> -n <namespace> -o yaml
kubectl get endpoints <service> -n <namespace> -o wide
kubectl get endpointslices -n <namespace> -l kubernetes.io/service-name=<service>
kubectl get pods -n <namespace> --show-labels
kubectl describe pod -n <namespace> -l <selector>
Συνήθεις αιτίες: λανθασμένος Selector, Pods που δεν είναι Ready, λανθασμένο όνομα Port ή Pods σε διαφορετικό Namespace.
Πρόβλημα DNS
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=100
kubectl get configmap coredns -n kube-system -o yaml
kubectl run dns-test -n <namespace> --rm -it --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
Το Ingress δεν δρομολογεί την κίνηση
kubectl get ingress -A
kubectl describe ingress <ingress> -n <namespace>
kubectl get ingressclass
kubectl get svc,ep,endpointslice -n <namespace>
kubectl get pods -A | grep -i ingress
kubectl logs -n <ingress-namespace> <ingress-controller-pod> --tail=200
Το Gateway Route δεν λειτουργεί
kubectl get gatewayclasses,gateway,httproute -A
kubectl describe gateway <gateway> -n <namespace>
kubectl describe httproute <route> -n <namespace>
kubectl get events -n <namespace> --sort-by=.lastTimestamp
PVC Pending
kubectl describe pvc <pvc> -n <namespace>
kubectl get storageclass
kubectl get pv
kubectl get events -n <namespace> --sort-by=.lastTimestamp
kubectl get pods -A | grep -i csi
Node NotReady
kubectl describe node <node>
kubectl get pods -A --field-selector=spec.nodeName=<node> -o wide
sudo systemctl status kubelet
sudo journalctl -u kubelet -n 300 --no-pager
sudo crictl info
sudo crictl ps -a
RBAC Forbidden
kubectl auth can-i <verb> <resource> -n <namespace>
kubectl auth can-i <verb> <resource> -n <namespace> --as system:serviceaccount:<namespace>:<serviceaccount>
kubectl get role,rolebinding -n <namespace>
kubectl get clusterrole,clusterrolebinding | grep <name>
OOMKilled
kubectl describe pod <pod> -n <namespace>
kubectl get pod <pod> -n <namespace> -o jsonpath='{.status.containerStatuses[*].lastState.terminated.reason}'
kubectl top pod <pod> -n <namespace> --containers
kubectl get pod <pod> -n <namespace> -o jsonpath='{.spec.containers[*].resources}'
Το Rollout έχει κολλήσει
kubectl rollout status deployment/<deployment> -n <namespace> --timeout=60s
kubectl describe deployment <deployment> -n <namespace>
kubectl get rs,pods -n <namespace> -l app=<app>
kubectl get events -n <namespace> --sort-by=.lastTimestamp
kubectl logs deployment/<deployment> -n <namespace> --all-containers --tail=100
Ο API Server δεν είναι προσβάσιμος
kubectl cluster-info
kubectl get --raw /readyz?verbose
curl -k https://<api-server>:6443/readyz
sudo crictl ps -a | grep kube-apiserver
sudo crictl logs <apiserver-container-id>
sudo journalctl -u kubelet -n 300 --no-pager
49. Checklists λειτουργίας
Πριν από μια αλλαγή
kubectl config current-context
kubectl get namespace <namespace>
kubectl auth can-i patch deployments -n <namespace>
kubectl diff -f manifest.yaml
kubectl apply --dry-run=server -f manifest.yaml
Έλεγξε επίσης:
- Είναι το σωστό Cluster;
- Είναι το σωστό Namespace;
- Υπάρχει σχέδιο Rollback;
- Υπάρχει Backup αν επηρεάζονται δεδομένα;
- Έχουν αποκλειστεί τα πραγματικά Secrets;
- Επαρκούν τα PDBs και η διαθέσιμη χωρητικότητα;
Μετά από μια αλλαγή
kubectl rollout status deployment/<deployment> -n <namespace> --timeout=120s
kubectl get pods -n <namespace> -o wide
kubectl get events -n <namespace> --sort-by=.lastTimestamp | tail -50
kubectl logs deployment/<deployment> -n <namespace> --all-containers --tail=100
kubectl get svc,ep,endpointslice -n <namespace>
Πριν από τη συντήρηση ενός Node
kubectl get node <node> -o wide
kubectl get pods -A --field-selector=spec.nodeName=<node> -o wide
kubectl get pdb -A
kubectl cordon <node>
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data --timeout=10m
Μετά τη συντήρηση ενός Node
sudo systemctl restart kubelet
kubectl uncordon <node>
kubectl get node <node> -o wide
kubectl get pods -A --field-selector=spec.nodeName=<node> -o wide
kubectl get events -A --sort-by=.lastTimestamp | tail -50
Πριν από το Upgrade με kubeadm
kubectl get nodes
kubectl get pods -A
kubectl get pdb -A
sudo kubeadm upgrade plan
sudo kubeadm certs check-expiration
sudo -E etcdctl endpoint health
sudo -E etcdctl snapshot save /var/backups/etcd-before-upgrade.db
Μετά το Upgrade με kubeadm
kubectl get nodes -o wide
kubectl get pods -A
kubectl get --raw /readyz?verbose
kubectl top nodes
kubectl get events -A --sort-by=.lastTimestamp | tail -100
50. Πηγές και περαιτέρω αναφορές
- Αναφορά kubectl του Kubernetes: https://kubernetes.io/docs/reference/kubectl/
- Γρήγορη αναφορά kubectl του Kubernetes: https://kubernetes.io/docs/reference/kubectl/quick-reference/
- Αναφορά kubeadm του Kubernetes: https://kubernetes.io/docs/reference/setup-tools/kubeadm/
- Αναφορά kubelet του Kubernetes: https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/
- Αναφορά εργαλείων Components του Kubernetes: https://kubernetes.io/docs/reference/command-line-tools-reference/
- Οδηγός Debugging με crictl του Kubernetes: https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/
- Αναφορά εντολών Helm: https://helm.sh/docs/helm/
- Οδηγός Disaster Recovery του etcd: https://etcd.io/docs/v3.5/op-guide/recovery/