אם אתם עובדים בעולם פיתוח התוכנה, בוודאי שמעתם על Kubernetes. אבל מה בדיוק זה, ולמה הוא הפך לסטנדרט דה-פקטו לניהול יישומים מבוססי קונטיינרים? מדריך זה ייקח אתכם מהבסיס ועד למושגים היסודיים, עם דוגמאות מעשיות ודיאגרמות.
לפני Kubernetes: קצת היסטוריה
- פריסה מסורתית: בתחילה, יישומים רצו על שרתים פיזיים. גישה זו הייתה יקרה, קשה להרחבה ונוטה לקונפליקטים של משאבים.
- פריסה וירטואלית: אחר כך הגיעו מכונות וירטואליות (VMs). VMs אפשרו ריבוי יישומים מבודדים לרוץ על אותו חומרה.
- פריסה מבוססת קונטיינרים: קונטיינרים (כמו Docker) הם השלב הבא. הם חולקים את אותה מערכת הפעלה אך מריצים תהליכים מבודדים. הם קלים, מהירים בהפעלה וניידים.
קונטיינרים פתרו את בעיית הניידות אך יצרו אחרת: כיצד לנהל מאות (או אלפי) קונטיינרים בסביבת ייצור?
כאן נכנס Kubernetes.
מה זה Kubernetes?
Kubernetes (מקוצר לעתים קרובות ל-K8s) היא פלטפורמה בקוד פתוח לתזמור קונטיינרים. במילים פשוטות, היא מאפשרת אוטומציה של פריסה, הרחבה וניהול של יישומים מבוססי קונטיינרים.
ארכיטקטורת אשכול Kubernetes
מישור הבקרה
מישור הבקרה הוא "המוח" של האשכול. רכיביו העיקריים:
- API Server (
kube-apiserver): שער הכניסה לאשכול. - etcd: מסד נתונים עקבי וזמין גבוה מסוג מפתח-ערך.
- Scheduler (
kube-scheduler): מקצה Pods שנוצרו לאחרונה ל-Worker Nodes זמינים. - Controller Manager (
kube-controller-manager): מריץ בקרים שעוקבים אחר מצב האשכול ומביאים אותו למצב הרצוי.
Worker Node
ה-Worker Nodes הן המכונות שבהן היישומים רצים בפועל. כל node מכיל:
- Kubelet: סוכן שרץ על כל node.
- Kube-proxy: פרוקסי רשת המנהל כללי רשת.
- Container Runtime: התוכנה האחראית להרצת קונטיינרים.
אובייקטים בסיסיים של Kubernetes
Pod
ה-Pod הוא יחידת הביצוע הקטנה ביותר ב-Kubernetes.
Deployment
# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Service
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP
סוגי Service: ClusterIP, NodePort, LoadBalancer.
Ingress
אובייקטים שימושיים נוספים
- Namespace: מאפשר ליצור "אשכולות וירטואליים" בתוך אשכול פיזי.
- ConfigMap ו-Secret: לניהול נתוני תצורה וסודות.
- StatefulSet: דומה ל-Deployment, אך ספציפי ליישומים בעלי מצב.
- PersistentVolume (PV) ו-PersistentVolumeClaim (PVC): לניהול אחסון קבוע.
סיכום
Kubernetes הוא כלי חזק להפליא. מה לעשות עכשיו?
- התנסו מקומית: התקינו Minikube או Kind.
- השתמשו ב-
kubectl: היכרו עם הפקודהkubectl. - חקרו את המדריכים הרשמיים: תיעוד Kubernetes הוא משאב פנטסטי.
תזמור קונטיינרים הוא מיומנות יסודית בעולם ה-cloud-native, ושליטה ב-Kubernetes תפתח עולם של אפשרויות. בהצלחה!