Naarmate organisaties microservices en cloud-native architecturen gebruiken, wordt Kubernetes de norm voor containerorkestratie. Voor zover Kubernetes het implementeren en beheren van containers vereenvoudigt, maken workloads op grote schaal het leven complex, en zijn robuuste praktijken noodzakelijk.
In dit artikel zal ik technische strategieën en best practices voor workloadbeheer op grote schaal in Kubernetes behandelen.
Weten van uitdagingen bij het schalen van Kubernetes
Het opschalen in Kubernetes houdt in dat men obstakels moet overwinnen zoals:
- Cluster resource planning. Geoptimaliseerd CPU-, geheugen- en schijfin gebruik over nodes.
- Netwerkcomplexiteit. Consistente communicatie tussen services in grote, gedistribueerde omgevingen.
- Fout en schaalbaarheid. Omgaan met beschikbaarheid tijdens storingen en tijdens een schaal-uit/schaal-in scenario.
- Operationele overhead. Het verwijderen van repetitieve operaties zoals schalen, monitoren en het balanceren van lasten.
- Beveiliging op grote schaal. Rolgebaseerde toegangscontrole (RBAC), geheimen en netwerkbeleid in grote clusters.
In dit artikel zal ik voorbeelden bespreken van het overwinnen van dergelijke obstakels met een combinatie van native Kubernetes-functionaliteiten en aanvullende tools.
Functionaliteiten en Tools
1. Efficiënte planning van clusterresources
Prestaties op schaal worden direct bepaald door de verdeling van middelen op schaal. Er zijn verschillende mogelijkheden in Kubernetes voor geoptimaliseerd gebruik van middelen:
Verzoeken en Limieten
Het verklaren van CPU- en geheugenvragen en -limieten zal zorgen voor een eerlijke verdeling van middelen en zal niet toestaan dat storende buren alle middelen verbruiken.
apiVersion v1
kind Pod
metadata
name resource-demo
spec
containers
name app
image nginx
resources
requests
memory"128Mi"
cpu"500m"
limits
memory"256Mi"
cpu"1"
Best practices:
- Gebruik quota voor handhaving op het namespace-niveau.
- Analyseer periodiek het gebruik met
kubectl top
en maak de nodige aanpassingen aan de limieten.
Cluster Autoscaler
De autoscaler schaalt het aantal knooppunten in je cluster dynamisch op basis van de vraag naar workloads.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/cluster-autoscaler-<version>/cluster-autoscaler.yaml
Best practices:
- Label je autoscaler-operaties passend voor je knooppunten.
- Monitor het schalingsgedrag om overprovisioning te voorkomen.
2. Horizontale en Verticale Pod Autoscaling
Horizontale Pod Autoscaler (HPA) en Verticale Pod Autoscaler (VPA) autoscaling mogelijkheden zijn ingebouwd in Kubernetes, maar servicemeshes zoals Istio en Linkerd maken inter-servicecommunicatie gemakkelijker en efficiënter.
Horizontale Pod Autoscaler (HPA)
HPA schaalt replica’s van pods op basis van CPU, geheugen of aangepaste statistieken.
Voorbeeld: CPU-gebruik voor autoscaling
apiVersion autoscaling/v2
kind HorizontalPodAutoscaler
metadata
name hpa-example
spec
scaleTargetRef
apiVersion apps/v1
kind Deployment
name web-app
minReplicas2
maxReplicas10
metrics
type Resource
resource
name cpu
target
type Utilization
averageUtilization50
Verticale Pod Autoscaler (VPA)
Verticale Pod Autoscaler schaalt een run-time verzoek en limiet van een pod.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/vertical-pod-autoscaler-<version>/vpa.yaml
3. Netwerken optimaliseren op schaal
Service Mesh
Service meshes zoals Istio en Linkerd maken en vereenvoudigen inter-service communicatie gemakkelijker en efficiënter door de abstractie van service belastingen, herpogingen en encryptiezorgen.
Voorbeeld: Istio VirtualService voor het routeren van verkeer
apiVersion networking.istio.io/v1beta1
kind VirtualService
metadata
name example-route
spec
hosts
example.com
http
route
destination
host service-v1
weight80
destination
host service-v2
weight20
Netwerkbeleid
Gebruik netwerkbeleid om verkeer tussen pods te beperken voor verbeterde beveiliging.
apiVersion networking.k8s.io/v1
kind NetworkPolicy
metadata
name restrict-traffic
spec
podSelector
matchLabels
app web-app
policyTypes
Ingress
ingress
from
podSelector
matchLabels
role backend
4. Verbetering van de waarnemingsmogelijkheden
Waarneming is cruciaal bij het beheersen van Kubernetes op een hoger niveau. Gebruik tools zoals Prometheus, Grafana en Jaeger voor metingen, logs en tracing.
Prometheus-metingen
Gebruik Prometheus-annotaties voor het verzamelen van pod-metingen.
apiVersion v1
kind Pod
metadata
annotations
prometheus.io/scrape"true"
prometheus.io/port"8080"
labels
app monitored-app
spec
containers
name app
image monitored-app latest
ports
containerPort8080
5. Weerbaarheid opbouwen
Pod Verstoring Begrotingen (PDB)
Gebruik PDB’s om een minimale beschikbaarheid van pods te handhaven tijdens onderhoud en upgrades.
apiVersion policy/v1
kind PodDisruptionBudget
metadata
name pdb-example
spec
minAvailable2
selector
matchLabels
app web-app
Rollende updates
Voer updates gefaseerd uit op een manier die geen downtime veroorzaakt.
kubectl set image deployment/web-app web-app=web-app:v2 --record
kubectl rollout status deployment/web-app
6. Kubernetes beveiligen op schaal
RBAC-configuratie
Gebruik RBAC om de privileges van de gebruiker en app te beperken.
apiVersion rbac.authorization.k8s.io/v1
kind Role
metadata
namespace default
name pod-reader
rules
apiGroups""
resources"pods"
verbs"get" "list" "watch"
Secrets-beheer
Gebruik Kubernetes Secrets voor veilig beheer van gevoelige informatie. Gebruik Kubernetes Secrets om gevoelige informatie veilig te beheren.
apiVersion v1
kind Secret
metadata
name db-credentials
type Opaque
data
username dXNlcg==
password cGFzc3dvcmQ=
7. GitOps voor Automatisering
Gebruik GitOps met tools zoals ArgoCD en Flux. Versie en sla Kubernetes-manifest op in Git-repos en laat clusters automatisch synchroniseren met hen.
8. Testen op Schaal
Simuleer hoogwaardige workloads met tools zoals K6 en Locust. Verifieer configuratie, resource-toewijzingen en schaalbaarheid in testomgevingen.
9. Opslag op Schaal Verwerken
Dynamische Persistent Volume Provisioning
Opslag voor applicaties wordt dynamisch toegewezen met automatisering.
apiVersion storage.k8s.io/v1
kind StorageClass
metadata
name fast-storage
provisioner kubernetes.io/aws-ebs
parameters
type gp2
fsType ext4
10. Optimalisatie van CI/CD Pipelines voor Kubernetes
Bouw en Push een Docker Image
Vereenvoudig het maken en publiceren van containerimages met CI/CD-tools zoals Jenkins, GitHub Actions en GitLab CI.
Conclusie
Om Kubernetes te schalen, moet men een combinatie van efficiënt gebruik van middelen, automatisering, zichtbaarheid en sterke beveiligingsprocessen hebben. Door volledig gebruik te maken van de mogelijkheden van Kubernetes en deze te combineren met aanvullende tools, kunnen uw workloads van hoge prestaties, veilig en veerkrachtig zijn op elke schaal.
Source:
https://dzone.com/articles/best-practices-managing-kubernetes-at-scale