קוברנטס: אשכולות ותרשימי הלם
קוברנטס: אשכולות ותרשימי הלם
1) ארכיטקטורת אשכול - תצוגה עליונה
מטוס בקרה: ”kube-apiserver”, ”etcd”, ”kube-linzuler”, ”kube-controller-manager”, (חלק מוסתר בעננים מבוקרים).
פועל: ”kubelet”, CRI runtime (בלימה/CRI-O), תוסף CNI, kube-proxy/ebpf-proxy.
רשת תוך-קלוסטר: Pod-to-Pod, Service-VIP/Clouglouster IP, DNS CoreyDNS.
אחסון: נהגי CSI, PVC דינמי = PV provisioning ( Class).
גבולות כישלון: צומת/אזור AZ. הצב העתקים לפי אזור (TopologyServantaints/anti-affinity).
תפקידים טיפוסיים
פקודת פלטפורמה: יוצר/משדרג אשכולות, CNI/CSI/Ingress, מדיניות ו-GitOps.
צוותי מוצר: טבלאות הפקדה/שחרור, המשך מדיניות אבטחה ומשאבים.
2) אופן חיים של אשכול
יצירה: kOps, kubeadm, Rancher, EKS/AKS/GKE. אפשר אימות OIDC וביקורת מייד.
שדרוגים: גרסאות קטנות בתורו (control plason ach nodes), הנשלטות על ידי MaxUnavable, בדיקות על ההיערכות.
תוספות (כולן באמצעות Helm/GitOps): CNI (Calico/Cilium), Ingress, Ingress (NGINX/GATEway API/Contour/Traefik), Metrics-Server, Cluster-Autoscaler, Node-Local DNS, רישום/מדדים/עקבות.
גיבויים: etcd snapshot (אם מנוהל בעצמו), Velero עבור שם/PVC.
3) רשתות, שירותים וחדירה
CNI: Calico (NetworkPolicy), Cilium (ראשי תיבות של eBPF/servicemesh).
שירות: "Clouglough IP", "NodePort'," LoodBalancer "(איזון ענן L4)," שם ".
Ingress/Gateway API: ניתוב L7, TLS, מגבלת קצב/WAF בהיקפו.
מדיניות Networks: מכחיש כל + מפורש מאפשר על ידי שם/תווית כברירת מחדל.
שירות ללא ראש (”Clought IP: None”) עבור State Set ותגלית שירות.
4) אחסון (CSI) ומצבים
מחלקה : 'reclimePolicy', ' Binnament Mode' ('הצרכן הראשון למיקום טוב יותר').
StatFound Set: שמות יציבים/כרכים ( Templates), PoddGround Policy: מקבילים לסריקות מהירות.
ReadImage Many: השתמש בקובץ מבוזר (EFS/Filestore) בזהירות - הערכת איחור.
תמונות: "גיבויים של Snaphire Class' + Cron.
5) עמידות מרובה בפוליטיקה
אספות שם על ידי מוצר/סביבה.
RBAC: תפקידים מינימליים, חשבונות שירות נפרדים, 'תפקיד '/' Bullending Binding' במקום 'Clough Role' היכן שאפשר.
(PSA (Pod Security Administration: "Basseline '/' lected 'modes (PSP.
Quota/LaughtBalancer: Memory/PVC/LocalBalancer.
אופ "א שומר שער/קיוורנו: מדיניות הכניסה (למשל: איסור ": האחרונה", דרישה "משאבים", "Readly Name Filesystem').
ImagePolicy/webhooks: אימות חתימת תמונה (cosign/policy-controller).
6) יכולת תצפית ותפעול
מחסנית פרומתאוס, מדדי קוב, צומת יצוא.
יומנים: Fluent Bit/Vector = אובייקט/ES/OpenSearch, סיבוב על צמתים.
שבילים: OpenTelemetry Collector.
לוחות מחוונים: מודל אדום על חדירה ושירותי מפתח.
Autoscale: HPA (by application metrics), VPA לרקע, Cluster-Autoscaler לצמתים.
7) תבניות מניפסט (גיליון רמאות)
פריסה:yaml apiVersion: apps/v1 kind: Deployment metadata: { name: api, labels: { app: api } }
spec:
replicas: 3 strategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: 0, maxSurge: 1 } }
selector: { matchLabels: { app: api } }
template:
metadata:
labels: { app: api }
spec:
serviceAccountName: api-sa securityContext: { runAsNonRoot: true, fsGroup: 2000 }
containers:
- name: api image: registry. example. com/api:1. 2. 3 ports: [{ containerPort: 8080 }]
resources: { requests: { cpu: "200m", memory: "256Mi" }, limits: { cpu: "1", memory: "512Mi" } }
readinessProbe: { httpGet: { path: /healthz, port: 8080 }, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez, port: 8080 }, initialDelaySeconds: 20 }
StatholdSet (קטע):
yaml apiVersion: apps/v1 kind: StatefulSet metadata: { name: db }
spec:
serviceName: db replicas: 3 podManagementPolicy: Parallel selector: { matchLabels: { app: db } }
template:
metadata: { labels: { app: db } }
spec:
containers:
- name: db image: postgres:16-alpine volumeMounts: [{ name: data, mountPath: /var/lib/postgresql/data }]
volumeClaimTemplates:
- metadata: { name: data }
spec:
accessModes: ["ReadWriteOnce"]
resources: { requests: { storage: 100Gi } }
storageClassName: fast-ssd
PDB (תקציב פודה):
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: { name: api-pdb }
spec:
minAvailable: 2 selector: { matchLabels: { app: api } }
Ingress (Nginx, קצר):
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/proxy-read-timeout: "30"
spec:
tls: [{ hosts: ["api. example. com"], secretName: api-tls }]
rules:
- host: api. example. com http:
paths:
- path: /
pathType: Prefix backend: { service: { name: api, port: { number: 80 } } }
8) הגאי v3 - יסודות ומבנה
תרשים = תבניות + ערכים + metadata.
mychart/
Chart. yaml # name, version (semver), type (application/library), dependencies values. yaml # default values. schema. json # (recommended) validation values templates/# .yaml. gotmpl (Deployment, Service, Ingress, …)
templates/tests/ # helm tests (smoke)
charts/# local dependencies (or OCI dependencies)
תרשים. יאמל (דוגמה):
yaml apiVersion: v2 name: api description: API service type: application version: 1. 4. 0 # chart version (semver)
appVersion: "1. 2. 3" # dependencies application version:
- name: redis version: 17. x.x repository: "oci://registry. example. com/charts"
9) תבניות עזר - מנהגים
השתמש בעוזרים in '_ עוזרים. tpl' לשמות/תוויות/הערות.
ציין ”משאבים”, ”הקשר ”, ”מוכנות/לביאה” בכל מקום.
צור תוויות לפי סכימה סטנדרטית ('ap. kubernetes. io/').
הפוך תכונות אופציונליות באמצעות 'values' (כניסה/hpa/pdb/servicemonitor).
כולל 'vallues. סכימה. ג 'סון - להפסיק תצורות שגויות.
למידע רגיש - סודות מפעילים חיצוניים (סודות חיצוניים, SOPS), ולא לאחסן ערכים.
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name trunc 63 trimSuffix "-" -}}
{{- end -}}
פריסה. tpl (שבר):
gotmpl apiVersion: apps/v1 kind: Deployment metadata:
name: {{ include "api. fullname". }}
labels: {{- include "api. labels". nindent 4 }}
spec:
replicas: {{.Values. replicaCount }}
strategy:
rollingUpdate:
maxSurge: 1 maxUnavailable: 0 selector:
matchLabels: {{- include "api. selectorLabels". nindent 6 }}
template:
metadata:
labels: {{- include "api. selectorLabels". nindent 8 }}
spec:
serviceAccountName: {{ include "api. serviceAccountName". }}
securityContext: {{- toYaml. Values. podSecurityContext nindent 8 }}
containers:
- name: {{.Chart. Name }}
image: "{{.Values. image. repository }}:{{.Values. image. tag }}"
imagePullPolicy: IfNotPresent ports: [{ containerPort: {{.Values. service. port }} }]
resources: {{- toYaml. Values. resources nindent 10 }}
envFrom:
- secretRef: { name: {{.Values. secretsRef }} }
10) תלויות, פוזיציות ו ־ OCI
הגה v3 תומך ברישומי OCI: ”oci ://registry/org/charts”.
תלות נעילה בגרסאות ('í1. 2. 0`, `~1. 2 ') ולהפעיל' תלות הגה לבנות '.
חתום על התרשים (מש), לאחסן חפצים במאגר החפץ המודיעיני.
תרשימי ספרייה: תבניות כלליות (ingress/servicemonitor) לשימוש חוזר.
11) הוקס, CRD וסדר פעולות
הוק: ”התקנה מראש”, ”לאחר התקנה”, ”טרום שדרוג”, ”לאחר שדרוג”, ”מבחן”. הוסף מדיניות ('לפני-הוו-יצירה', 'וו-הצליח').
CRD: להכניס 'קראדים/' (להגדיר לתבניות), להימנע מעדכוני CRD על הזבוב - להגר בנפרד.
נדידת מסד נתונים/אתחול - וו עבודה עם אידמפוטנטיות ופסקי זמן.
12) תרשים ובדיקת מודיע
'helm מוך' + אימות של המזימה.
הגה unitest (יחידה), תרשים-בדיקה (ct) - הרכבה/התקנה בסוג/מיניקובה ב CI.
בדיקות Snapshot של תבניות (”helm template”).
מבחני עשן "בדיקת הגה" (להעלות "Pod' with צ 'קים).
13) גיטופס (ארגו תקליטור/שטף)
מקור האמת הוא המאגר. התרשים מאוחסן בשם HelmRelease/HelmChart (שטף) או Application (ארגו).
מדיניות כיור: סינכרון אוטומטי עם שזיפים/ריפוי עצמי, סטטוסים ובדיקות בריאות.
גרסאות קידום: tag-bots/semver-range, PR-flow.
חלוקת repo לאפליקציות (תרשימים) ו ־ env (עוקף/ערכים).
ניהול סודי: SOPS (גיל/KMS), סודות חיצוניים.
14) בטיחות: מינימום נדרש
PSA מוגבל: אין הרשאות, אין hostPath Path, יכולות מוגבלות, גגות קריאה בלבד.
מדיניות גיבוש - תמונות חתומות/אמינות בלבד.
מדיניות Networks: ”נעול כברירת מחדל”.
RBAC: לכל חשבון שירות אפליקציה, ”תפקיד ”/” מחייב” בשמות.
בקרת כניסה: Gatekeeeper/Kyverno rules (משאבים/מגבלות, תוויות, אין חדש).
סודות: SOPS/סודות חיצוניים; לא לשים סודות בערכים/פשוט Git.
15) אנטי דפוסים
”: האחרון” בתרשימים ודימויים; היעדר אמצעים. סכימה. ג 'סון'.
תרשים אחד ענק ”לכל דבר” במקום מודולרי.
CRDs מעודכנים עם תבניות בתבניות '/' תוהו ובוהו על שדרוגים.
שמות קשיחים/פורט/שם בתבנית.
מחסור במשאבים/מגבלות ודגימות.
אין PDB = אפס זמן השבתה אינו אפשרי עם ניקוז/שדרוגים.
סודות בגיט ללא הצפנה; מניפסטים ללא בדיקות מדיניות.
16) רשימת מימושים (0-45 ימים)
0-10 ימים
צור שלד תרשים בסיסי עם '_ עוזרים. Tpl ', תוויות, גשושיות, משאבים, PDB/Ingress אופציונלי.
PSA מוגבלת, Networklics Policy Detective All, LockQuate/LaunCare Range.
הגדרות GitOps (ארגו/שטף), רישום פרטי, חתימת תמונה/תרשים.
11-25 ימים
לחלק את התרשים למודולים/תלויות, להוסיף 'values. סכימה. ג 'סון, בדיקות (' מוך הגאי ', יחידה, ct).
חיבור יכולת תצפית (Service Monitor/PodMonitor), סוכני רישום, Otel.
הזן את תהליך השדרוג: היערכות ach canary prod, הנדידה עם rollback.
26-45 ימים
עדכוני תלות אוטומטיים (bots/semver-ranges + PR).
הוסף את מדיניות שומר השער/קיוורנו ואת דו "חות המדיניות למודיע.
תיעד את ספר ההפעלה של אשכול, הליכי DR (Velero/etcd snapshot).
17) מדדי בגרות
100% מהיישומים מתרוקנים באמצעות Helm/GitOps, ללא 'kubectl' יישום ידני.
לכל הגיליונות יש ערך. סכימה. ג 'סון, בדיקות, חתימה, וגרסאות תלות מבוצעות.
PSA מוגבלת/NetworkPolicy מופעלת בכל שם.
PDB ו HPA נוכחים בכל השירותים הקריטיים.
SOPS/סודות חיצוניים, אין מדיניות עדכנית, חתימת תמונה.
אשכול ושדרוג תרשימים מבוצעים ללא השבתה (כנרית/כחול-ירוק), בדיקות שחזור הן סדירות.
18) מסקנה
קרן סטרונג קוברנטס (Strong Kubernetes foundation) - ארכיטקטורת אשכול חזקה + מדיניות קפדנית + תרשימי הלם באיכות תעשייתית המנוהלים על ידי GitOps. תקן תבניות, אבטח את סביבת PSA/Networks Policy/RBAC, תאמת ערכים, ומבחנים אוטומטיים, חתימה וקידום. ואז שדרוגים ושחרורים יהפכו להיות צפויים, והפלטפורמה תהיה יציבה ונוחה לצוותי מוצרים.