Middle+
Kaip įgyvendinama apkrovos paskirstymas Kubernetes?
sobes.tech AI
Atsakymas iš AI
Kubernetes apkrova apkrovos paskirstymas įgyvendinamas keliuose lygiuose:
-
Paslauga (Kube-proxy lygyje):
- Kiekvienas Pod gauna unikalų IP adresą.
- Kube-proxy, veikiantis kiekviename mazge, stebi paslaugos ir EndpointSlice pokyčius.
- Nustato taisykles srautui peradresuoti (iptables, ipvs) į klasterio IP adresą.
- Srautas, pasiekiantis klasterio IP adresą, paskirstomas tarp šios paslaugos Podų pagal pasirinktą algoritmą (numatyta Round Robin).
- Yra du Kube-proxy veikimo režimai: iptables (standartinis, Linux netfilter pagrindu) ir ipvs (efektyvesnis dideliems klasteriams, Virtual Server API pagrindu).
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app # Pasirinkti Podus su žyme app: my-app ports: - protocol: TCP port: 80 # Paslaugos prievadas targetPort: 8080 # Podų prievadas -
Ingress (L7 lygyje):
- Veikia kaip vieninga įėjimo taškas išorinei HTTP/S srautui paskirstyti.
- Reikalingas Ingress kontroleris (pvz., Nginx Ingress Controller) taisyklių įgyvendinimui.
- Nukreipia srautą į konkretų paslaugą klasteryje pagal URL kelią, hosto vardą ir kitus L7 taisykles.
- Leidžia įgyvendinti įvairias paskirstymo strategijas, SSL terminaciją, virtualų hostinimą pagal vardą.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service # Nukreipia srautą į šį paslaugą port: number: 80 -
LoadBalancer Service (Cloud teikėjo lygyje):
- Sukūrus
LoadBalancertipą paslaugą, Kubernetes sąveikauja su debesų teikėjo API (AWS, GCP, Azure ir kt.). - Teikėjas sukuria išorinį apkrovos paskirstytoją, kuris nukreipia srautą į klasterio mazgus.
- Tada Kube-proxy nukreipia srautą į Podus klasteryje.
- Šis paslaugos tipas užtikrina išorinį prieigą ir paskirstymą L4 (TCP/UDP) arba L7 (HTTP/S) lygiu, priklausomai nuo teikėjo.
apiVersion: v1 kind: Service metadata: name: my-external-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer # Sukuria išorinį apkrovos paskirstytoją - Sukūrus
-
Individualūs apkrovos paskirstytojai (pvz., HAProxy, Nginx kaip Pod):
- Gali būti įdiegti kaip Deployment ir Service (ClusterIP arba NodePort) viduje klasterio.
- Nustato išorinį srautą į šį Service.
- Apkrovos paskirstytojas savarankiškai paskirsto srautą tarp kitų Podų.
Taip Kubernetes siūlo daugiasluoksį požiūrį į apkrovos paskirstymą, derindamas įmontuotus mechanizmus (Service, Kube-proxy) su išoriniais sprendimais (Ingress, Cloud Provider Load Balancers) ir galimybe įdiegti savo apkrovos paskirstytojus.