GH GambleHub

Kubernetes 'կլաստերներ և Helm charts

Kubernetes 'կլաստերներ և Helm charts

1) Պերեստրոյկայի ճարտարապետությունը վերևի հայացքն է

Disl Plane: «kube-apiserver», «etcd», «kube-scheduler», «kube-entler-2019» (կառավարվող ամպերում մի մասը թաքնված է)։

Worker: «kubelet», CRI-rantaim (CRI-O), CNI-plagin, kube-proxy/ebpf-proxy։

Ներերակային ցանցը ՝ Pod-to-Pod, System-VIP/ClusterIP, RTO NO։

Մոսկվա: CSI վարորդներ, PVC 24PV (Storts Class) դինամիկ պրովիզինինգը։

Հրաժարման սահմանները 'հանգույց/AZ/տարածք։ Տեղադրեք օրինակներ գոտիներով (TopologySpreadConstrainment/anti-affinity)։

Տիպիկ դերեր

Պլատֆորմենային թիմը 'ստեղծում է/ապգրադավորում կլաստերներ, CNI/CSI/Ingress, քաղաքականություն և GitOps։

Ապրանքային թիմերը 'ավելացնում են գծապատկերները/օրինագծերը, հետևում են անվտանգության և ռեսուրսների քաղաքականություններին։

2) Կյանքի ցիկլը

Ստեղծում ՝ kOps, kubeadm, Rancher, EKS/AKS/GKE։ Անմիջապես միացրեք OIDC-վավերացումը և աուդիտը։

Apgraids: minor-տարբերակները հերթով (www.l plane), որը վերահսկվում է Unavailable-ի կողմից, սթեյջինգի թեստերը։

Add-ons (բոլորը Helm/GitoPs): CNI (Calico/Cil.ru), CSI վարորդ, Ingress վերահսկիչ (NGINX/Gateway API/Wintour/Traefik), Metrice-Server-Server, Cerver-Autoscaler, Node-Internal III, տրամաբանությունը/մետրերը/թրեյսը։

Bakaps: etcd entapshot (եթե www.f-inted), Velero namespace/PVC-ի համար։

3) Ցանցեր, ծառայություններ և ingress

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).

Մոսկվա: «ClusterIP», «NodePox», «LoadBalancer» (L4 ամպերի հավասարակշռություն), «ExternalName»։

Ingress/Gateway API: L7-միկրոօրգանիզացիա, TSA, anamnez rate-limit/WAF պարագծի վրա։

NetworkPolicy: լռելյայն deny-all + ակնհայտ allow namespace/label։

Headless-2019 ("clusterIP: None ') StatefullPro-ի և դիսկերի ծառայության համար։

4) Մոսկվան (CSI) և վիճակը

Storts Class: «reclaimPolicy», «volumeBindingMode» («WaitFirStonsumer»)։

StatefullPro: Կայուն անուններ/հատորներ («volumeClaimTemplates»), «podJ Policy: Parallel» արագ տեղակայման համար։

ReadWrance Many: օգտագործեք բաշխված ալյումինե (EFC/Investore) զգուշորեն գնահատեք լատենտությունը։

Նկարները '«VolumeDiapshotClass» + cast-bakaps։

5) Բազմաբնույթ և քաղաքականություն

Namespaces-ը ապրանքներ/միջատներ։

RBAC 'նվազագույն դերեր, առանձին հաշիվներ, «Role »/« RoleBinding» փոխարեն «ClusterRole», որտեղ հնարավոր է։

PMS (Pod You Admission): «baseline »/« restricted» ռեժիմները (PSA փոխարինումը)։

ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.

OPA Gatekeeper/Kyverno 'թույլատրման քաղաքականություն (օրինակ արգելքը' latest ', պահանջը' resources "," readOnlyRootem ")։

Imault Policy/webhuki: Պատկերների ստորագրման ստուգում (cos.ru/policy-winler)։

6) Դիտողությունն ու շահագործումը

Մետրիկները ՝ Prometheus-stek, kube-state-metrance, node-օպերատորներ։

Լոգներ ՝ Fluent Bit/Vector-ը օբյեկտի/ES/OpenSearch-ն, հանգույցների վրա։

Թրեյսները ՝ OpenTelemetry Collector։

SLO-dashbords: RED մոդելը ingress-ի և հիմնական ծառայությունների վրա։

Autokrail: HPA (ծրագրի մետրերով), SNA բեքգրադի, Cluster-Autoscaler-ի համար հանգույցների համար։

7) Մանիֆեստների պատրանքները (լրտեսություն)

Deploy.ru (կանգնել)

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 }

StatefullExpress (հատված)

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 } }

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) Helm v3 - հիմքեր և կառուցվածք։

Chart = + արժեքներ + մետատվյալներ։


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)

Chart. yaml (օրինակ)

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) Helm ձևանմուշները 'պրակտիկա

Օգտագործեք helpers '_ helpers։ tpl 'անունների/պիտակների/ծանոթությունների համար։

Ամենուր նշեք «resources», «Windows Express», «readiness/liveness»։

Արտադրեք labels համաձայն ստանդարտացված սխեմայի ("app. kubernetes. io/`).

Դարձրեք ֆիչին «values» (ingress/hpa/pdb/servicemonitor)։

Միացրեք 'values։ schema. json '- սխալ եզրերից հոտ։

Զգայուն տվյալների համար Secrets-ը արտաքին օպերատորներից (External Secrets, SOPS), ոչ թե values-ում։

Օրինակ '_ helpers։ tpl '(հատված)։

gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}

Deployment. 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

Helm v3 աջակցում է OCI-գրանցումները ՝ «oci : //registry/org/charts»։

Փայլեք կախվածության տարբերակները ("^ 1։ 2. 0`, `~1. 2 ') և թողեք' helm dependency build '։

Ստորագրեք աղյուսակը (prov), պահեք արտեֆակտները CI արտեֆակտում։

Library charts: Ընդհանուր օրինակները (ingress/servicemonitor) վերարտադրման համար։

11) Hooks, CRD և վիրահատությունների կարգը

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. Ավելացրեք policies («before-hook-creation», «hook-succeeeded»)։

CRD 'դրեք "crds/' (տեղադրվում են մինչև մթնշաղ), խուսափեք CRD դեղատներից" ամռան վրա ", արեք առանձին։

NoBD/նախաձեռնումը job-hook-ն է idempotency-ով և թայմաուտներով։

12) Չարտի և CI փորձարկումը

«helm lint» + սխեմայի վալիդացիա։

Helm unittest (unit), chart-testing (ct) - հավաքումը/տեղադրումը kind/minikube-ում CI-ում։

Diapshot թեստերը («helm template») համեմատել ստանդարտի հետ։

Smoke-թեստերը 'helm test "(բարձրացնում են" Pod "ստուգումներով)։

13) GitOps (Argo CD/Flux)

Ճշմարտության աղբյուրը ռեպոզորիա է։ Չարթը պահպանվում է որպես HelmRele.ru/HelmChart (Flux) կամ Apport (Argo)։

Սինկայի քաղաքական գործիչները ՝ 108-108 nc prune/www.f-heal, կարգավիճակներ և health-winks։

Պրոմոուշեն տարբերակներ ՝ 108-բոտներ/semver-range, PR-ֆլոու։

Բաժանեք repo (charts) և env (overrides/values)։

Secret-ղեկավարությունը 'SOPS (age/KEA), External Secrets-ը։

14) Անվտանգություն ՝ առնվազն անհրաժեշտ

PMS restricted: առանց արտոնությունների, առանց hostPath, սահմանափակ capabilities, read-only rootics։

Imault Policy: միայն ստորագրված/վստահելի պատկերներ։

NetworkPolicy: «Լռելյայն փակված»։

RBAC 'per-app ծառայություն, «Role »/« RoleBinding» namespace-ում։

Admission-վերահսկումը 'Gatekeeper/Kyverno կանոնները (resources/limits, labels, www.latest)։

Գաղտնիքները ՝ SOPS/External Secrets; գաղտնիքները չփակցնել values/plain Git-ում։

15) Anti-patterna

🚨 <latest> գծապատկերներում և պատկերներում; «values» -ի բացակայությունը։ schema. json`.

Մեկ հսկայական աղյուսակ «ամեն ինչի» փոխարեն մոդուլային։

CRD-ն նորարարվում է «templates/» wwww.haos apgraides-ում։

Կոշտ թաղված անուններ/պորտ/namespace ձևանմուշներով։

Ռեսուրսների/լիմիթների և փորձարկումների բացակայությունը բացատրվում է լատենտության և անկայունության միջոցով։

Ոչ PDB-ը զրոյական dauntaim-ը անհնար է antain/apgraid-ով։

Գաղտնիքները Git-ում առանց մրցույթի; մանիֆեստներ առանց քաղաքական քաղաքականության։

16) Chek-Show-( 0-45 օր)

0-10 օր

Կառուցել հիմնական գծապատկերային կմախքը '_ helpers-ի հետ։ tpl ', labels, probes, resources, PDB/Ingress օբյեկտիվ։

Включить PSA restricted, NetworkPolicy deny-all, ResourceQuota/LimitRange.

Տեղադրեք GitOps (Argo/Flux), մասնավոր գրանցում, պատկերների/գծերի ստորագրություն։

11-25 օր

Կիսել աղյուսակը մոդուլների/կախվածության վրա, ավելացնել 'values։ schema. json ', թեստեր («helm lint», unit, ct)։

Միացրեք observability (WindoMonitor/PodMonitor), log-2019, OTel։

Ներմուծել apgrads գործընթացը 'staging www.canary, hook-2019 rollback-ից։

26-45 օր

Ավտոմատիզացնել կախվածության նորարարությունները (բոտեր/semver-ranges + PR)։

Ավելացնել Gatekeeper/Kyverno քաղաքականությունը և policy հաղորդագրությունները CI-ում։

Փաստաթղթավորել runbook apgraid 2019, DR ընթացակարգերը (Velero/etcd depshot)։

17) Հասունության մետրերը

Դիմումների 100 տոկոսը հավաքվում են Helm/GitOps-ի միջոցով, առանց «kubectl apply» ձեռքով։

Բոլոր գծապատկերները ունեն «values»։ schema. json ', թեստեր, ստորագրություններ և կախվածության արձանագրված տարբերակներ։

PMS resricted/NetworkPolicy-ը ներառված է բոլոր namespace-ում։

PDB և HPA-ն ներկա են բոլոր քննադատական ծառայություններում։

Անվտանգ գաղտնիքները (SOPS/External Secrets), «www.latest» քաղաքականությունը, պատկերների ստորագրությունը։

Մրցույթի և աղյուսակի ապգրադները անցնում են առանց duntima (canary/blue-green), restore թեստերը։

18) Եզրակացություն

Ուժեղ Kubernetes-հիմքը = հուսալի ճարտարապետությունը + խիստ քաղաքականությունը + Helm-charts արդյունաբերական որակի տակ GitOps-ի ղեկավարությամբ։ Ստանդարտացրեք ձևանմուշները, պաշտպանեք PFC/NetworkPolicy/RBAC-ի շրջապատը, վալիդիրուսացրեք և ավտոմատիզացրեք թեստերը, ստորագրությունները և բացթողումները։ Այդ ժամանակ apgraids և ալգորիթմները կդառնան կանխատեսելի, իսկ պլատֆորմը կայուն և հարմար է սննդի թիմերի համար։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։