Kubernetes: Kümeler ve Dümen grafikleri
Kubernetes: Kümeler ve Dümen grafikleri
1) Küme Mimarisi - Üst Görünüm
Kontrol Düzlemi: 'Kube-apiserver', 'etcd', 'kube-scheduler', 'kube-controller-manager', (bir kısmı kontrollü bulutlarda gizlidir).
İşçi: 'kubelet', CRI çalışma zamanı (containerd/CRI-O), CNI eklentisi, kube-proxy/ebpf-proxy.
Intracluster ağ: Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
Depolama: CSI sürücüleri, dinamik PVC - PV sağlama (StorageClass).
Hata sınırları: düğüm/AZ/bölge. Kopyaları bölgeye göre yerleştir (TopologySpreadConditions/anti-affinity).
Tipik roller
Platform komutu: kümeler, CNI/CSI/Ingress, policy ve GitOps oluşturur/yükseltir.
Ürün ekipleri: para yatırma çizelgeleri/sürümleri, güvenlik politikalarını ve kaynaklarını izleyin.
2) Küme yaşam döngüsü
Oluşturma: kOps, kubeadm, Rancher, EKS/AKS/GKE. OIDC kimlik doğrulamasını ve denetimini hemen etkinleştirin.
Yükseltmeler: Sırayla küçük sürümler (kontrol düzlemi - düğümler), maxUnavailable tarafından kontrol edilir, evreleme testleri.
Eklentiler (tümü Helm/GitOps aracılığıyla): CNI (Calico/Cilium), CSI sürücüsü, Giriş denetleyicisi (NGINX/Gateway API/Contour/Traefik), Metrics-Server, Cluster-Autoscaler, Node-Local DNS, logging/metrics/trace.
Yedeklemeler: etcd snapshot (kendi kendini yönetiyorsa), isim alanı/PVC için Velero.
3) Ağlar, hizmetler ve giriş
CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh- фичи).
Servis: 'ClusterIP', 'NodePort', 'LoadBalancer' (L4 bulut dengeleme), 'ExternalName'.
Giriş/Ağ Geçidi API'si: L7 yönlendirme, TLS, çevrede hız sınırı/WAF geçmişi.
NetworkPolicy: deny-all + explicit allow by namespace/label varsayılan olarak.
StatefulSet ve servis keşfi için başsız servis ('clusterIP: None').
4) Depolama (CSI) ve durumlar
StorageClass: 'reclaimPolicy', 'volumeBindingMode' (daha iyi yerleştirme için 'WaitForFirstConsumer').
StatefulSet: hızlı taramalar için kararlı adlar/birimler ('volumeClaimTemplates'), 'podManagementPolicy: Parallel'.
ReadWriteMany: dağıtılmış dosyayı (EFS/Filestore) dikkatli kullanın - gecikmeyi değerlendirin.
Anlık görüntüler: 'VolumeSnapshotClass' + cron yedeklemeleri.
5) Çok kiracılık ve politika
Ürün/ortama göre ad alanları.
RBAC: minimal roller, ayrı servis hesapları, mümkünse 'ClusterRole' yerine 'Role'/' RoleBinding'.
PSA (Pod Security Admission): 'Baseline'/' restricted' modları (PSP değiştirme).
KaynakKota/LimitAralık: потолки CPU/Bellek/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: kabul politikası (örn. yasaklama ': en son', gereksinim 'kaynaklar', 'OnlyRootFilesystem' okuyun).
ImagePolicy/webhooks: görüntü imza doğrulaması (cosign/policy-controller).
6) Gözlemlenebilirlik ve çalışma
Metrikler: Prometheus yığını, kube-state-metrics, düğüm ihracatçıları.
Günlükler: Akıcı Bit/Vektör - nesne/ES/OpenSearch, düğümlerde dönüş.
Yollar: OpenTelemetry Collector.
SLO panoları: Giriş ve anahtar servislerde RED modeli.
Autoscale: HPA (uygulama metriklerine göre), arka plan için VPA, düğümler için Cluster-Autoscaler.
7) Tezahür kalıpları (hile sayfası)
Dağıtım: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 }
StatefulSet (snippet):
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 (PodDisruptionBudget):
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: { name: api-pdb }
spec:
minAvailable: 2 selector: { matchLabels: { app: api } }
Giriş (Nginx, kısaca):
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) Helm v3 - temelleri ve yapısı
Grafik = şablonlar + değerler + meta veriler.
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)
Grafik. yaml (örnek):
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) Dümen Şablonları - Uygulamalar
'_ helpers içindeki yardımcıları kullan. İsimler/etiketler/ek açıklamalar için tpl '.
Her yerde 'kaynaklar', 'güvenlik' Bağlamı ',' hazırlık/canlılık 'belirtin.
Standart bir şemaya ('app. kubernetes. io/').
Özellikleri 'değerler' (ingress/hpa/pdb/servicemonitor) aracılığıyla isteğe bağlı hale getirin.
Include 'değerleri. şema. json '- yanlış yapılandırmalardan vazgeç.
Hassas veriler için - Dış operatörlerden gelen sırlar (Dış Sırlar, SAPS) ve değerlerde depolanmaz.
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name trunc 63 trimSuffix "-" -}}
{{- end -}}
Görev dağılımı. tpl (fragment):
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) Bağımlılıklar, depolar ve OCI
Helm v3, OCI kayıtlarını destekler: 'oci ://registry/org/charts'.
Bağımlı sürümleri kilitle ('^ 1. 2. 0`, `~1. 2 ') ve' helm dependency build 'çalıştırın.
Grafiği imzalayın (prov), eserleri CI eser deposunda saklayın.
Kütüphane çizelgeleri: genel şablonlar (giriş/servicemonitor) yeniden kullanım için.
11) Kancalar, CRD ve işlem sırası
Hooks: 'Pre-install', 'post-install', 'pre-upgrade', 'post-upgrade', 'test'. Politikalar ekle ('before-hook-creation', 'hook-succeed').
CRD: 'crds/' (şablonlara ayarlanmış) koyun, anında CRD güncellemelerinden kaçının - ayrı olarak geçirin.
Veritabanı geçişleri/başlatılması - idempotency ve zaman aşımları ile iş kanca.
12) Grafik ve CI testi
'helm lint' + planın doğrulanması.
Helm unittest (birim), grafik testi (ct) - CI'de ayni/minikube montaj/kurulum.
Şablonların anlık görüntü testleri ('dümen şablonu' - bir şablonla karşılaştırın).
Duman testleri 'dümen testi' (çeklerle 'Pod' yükseltin).
13) GitOps (Argo CD/Flux)
Gerçeğin kaynağı depodur. Grafik HelmRelease/HelmChart (Flux) veya Application (Argo) olarak depolanır.
Lavabo politikaları: Kuru erik/kendi kendine iyileşme, durumlar ve sağlık kontrolleri ile otomatik senkronizasyon.
Promosyon sürümleri: tag-bots/semver-range, PR-flow.
Repo'yu uygulamalara (grafikler) ve env'ye (geçersiz kılmalar/değerler) bölün.
Gizli yönetim: SOP (yaş/KMS), Dış Sırlar.
14) Güvenlik: minimum gerekli
PSA kısıtlı: ayrıcalık yok, hostPath yok, sınırlı yetenekler, salt okunur rootflar.
ImagePolicy - yalnızca imzalı/güvenilir görüntüler.
NetworkPolicy: "locked by default".
RBAC: uygulama başına hizmet hesabı, ad alanında 'Rol'/' RoleBinding'.
Giriş kontrolü: Gatekeeper/Kyverno kuralları (kaynaklar/sınırlar, etiketler, en son yok).
Sırlar: SAPS/Dış Sırlar; Sırları değerlere/düz Git'e koymayın.
15) Anti-desenler
': son' çizelgeleri ve görüntüleri; 'değerlerinin yokluğu. şema. Json '.
Modüler yerine'her şey için "büyük bir grafik.
CRD'ler 'şablonlar/' içindeki şablonlarla güncellenir - yükseltmelerde kaos.
Şablonlarda sabit kodlu adlar/port/ad alanı.
Kaynak/limit ve numune eksikliği - gecikme sürüklenme ve kararsızlık.
Hiçbir PDB yok - drenaj/yükseltmelerle sıfır kesinti mümkün değildir.
Şifrelemesiz Git sırları; Çek politikası olmadan tezahür eder.
16) Uygulama kontrol listesi (0-45 gün)
0-10 gün
'_ helpers'ile temel bir grafik iskeleti oluşturun. tpl ', etiketler, problar, kaynaklar, isteğe bağlı PDB/Giriş.
PSA kısıtlı Включить, NetworkPolicy tüm inkar, ResourceCota/LimitRange.
GitOps (Argo/Flux), özel kayıt, görüntü/grafik imzasını yapılandırın.
11-25 gün
Grafiği modüllere/bağımlılıklara bölün, 'değer' ekleyin. şema. Json ', testler (' helm lint ', ünite, ct).
Bağlantı gözlemlenebilirliği (ServiceMonitor/PodMonitor), log ajanları, OTel.
Yükseltme işlemini girin: evreleme - kanarya - prod, geri alma ile kanca geçişi.
26-45 gün
Bağımlılık güncellemelerini otomatikleştirin (botlar/semver-aralıkları + PR).
Gatekeeper/Kyverno politikalarını ve politika raporlarını CI'ye ekleyin.
Küme yükseltme çalışma kitabını, DR yordamlarını (Velero/etcd snapshot) belgeleyin.
17) Olgunluk metrikleri
Uygulamaların %100'ü 'kubectl apply' manually olmadan Helm/GitOps aracılığıyla tüketilir.
Tüm grafiklerin 'değerleri' vardır. şema. Json ', testler, imza ve taahhüt bağımlılık sürümleri.
PSA restricted/NetworkPolicy tüm ad alanlarında etkindir.
PDB ve HPA tüm kritik hizmetlerde mevcuttur.
SOP/Dış Sırlar, en son politika yok, görüntü imzası.
Küme ve grafik yükseltmeleri kesinti olmadan gerçekleştirilir (kanarya/mavi-yeşil), geri yükleme testleri düzenlidir.
18) Sonuç
Güçlü Kubernetes temeli = sağlam küme mimarisi + sıkı politikalar + GitOps tarafından yönetilen endüstriyel kaliteli Dümen grafikleri. Şablonları standartlaştırın, PSA/NetworkPolicy/RBAC ortamını güvence altına alın, değerleri doğrulayın ve testleri, imzayı ve promosyonu otomatikleştirin. Daha sonra yükseltmeler ve sürümler öngörülebilir hale gelecek ve platform ürün ekipleri için istikrarlı ve uygun hale gelecektir.