Questa pagina spiega come scalare dinamicamente gli ambienti GKE Agent Sandbox utilizzando Horizontal Pod Autoscaler (HPA) e i buffer di capacità di riserva su un cluster GKE Standard.
Per impostazione predefinita, i pool in caldo di Agent Sandbox mantengono un numero statico di repliche pre-provisioning pronte per ridurre al minimo la latenza di avvio dei pod. In questo modo, puoi evitare scenari con traffico variabile, in cui il mantenimento di un numero elevato di repliche statiche può comportare costi di calcolo elevati.
Puoi bilanciare la preparazione della capacità e il risparmio sui costi utilizzando la scalabilità dinamica. Questo
approccio regola le dimensioni di SandboxWarmPool in base alla domanda e utilizza
buffer di capacità di riserva (VM sospese) per eseguire il provisioning proattivo dell'infrastruttura
per una scalabilità rapida senza il costo totale del provisioning eccessivo dei nodi attivi.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Un cluster GKE Standard che esegue la versione 1.36.0-gke.2208000 o successive.
Crea un cluster
Per creare un cluster GKE Standard con le configurazioni richieste per i buffer di capacità di riserva e la sandbox dell'agente, esegui questo comando:
gcloud container clusters create CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster-version=VERSION \
--enable-autoscaling \
--enable-autoprovisioning \
--max-cpu=MAX_CPU \
--max-memory=MAX_MEMORY \
--enable-agent-sandbox \
--enable-image-streaming \
--workload-pool=PROJECT_ID.svc.id.goog \
--monitoring=SYSTEM
Sostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.VERSION: la versione di GKE, che deve essere1.36.0-gke.2208000o successiva.CONTROL_PLANE_LOCATION: la località di Compute Engine per il nuovo cluster. Scegli una regione per i cluster regionali (ad esempious-central1) o una zona per i cluster zonali (ad esempious-central1-a).MAX_CPU: limiti massimi di CPU per il provisioning automatico, ad esempio4000.MAX_MEMORY: limiti massimi di memoria per il provisioning automatico in GB, ad esempio12000.PROJECT_ID: il tuo ID progetto Google Cloud .
Configurare i componenti di Agent Sandbox
Devi definire un SandboxTemplate e un SandboxWarmPool per gestire i tuoi
workload in sandbox.
Salva il seguente manifest come
sandboxtemplate.yaml:apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxTemplate metadata: name: agent-template namespace: NAMESPACE spec: podTemplate: metadata: labels: app: agent-sandbox-workload spec: restartPolicy: Never containers: - name: python-agent image: python:3.11-slim command: ["/bin/sh", "-c"] args: ["echo 'Hello from the Sandbox!' && sleep 3600"] resources: requests: cpu: "1000m" memory: "100Mi"Sostituisci
NAMESPACEcon il tuo spazio dei nomi, ad esempioagent-sandbox-demo.Applica il manifest:
kubectl apply -f sandboxtemplate.yamlSalva il seguente manifest come
sandboxwarmpool.yaml. In questo modo viene creato un pool statico iniziale di repliche.apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxWarmPool metadata: name: agent-warmpool namespace: NAMESPACE spec: replicas: 10 sandboxTemplateRef: name: agent-templateApplica il manifest:
kubectl apply -f sandboxwarmpool.yaml
Configurazione della raccolta di metriche
Il controller Agent Sandbox espone una metrica del contatore per il numero di sandbox
rivendicate: agent_sandbox_claim_creation_total. Puoi configurare una risorsa PodMonitoring
per raccogliere questa metrica e inviarla a Google Cloud Managed Service per Prometheus.
Salva il seguente manifest come
podmonitoring.yaml:apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: agent-sandbox-controller-monitoring namespace: agent-sandbox-system # Namespace where the controller is running spec: selector: matchLabels: app: agent-sandbox-controller endpoints: - port: 8080 # Port where metrics are exposed path: /metrics interval: 15sApplica il manifest:
kubectl apply -f podmonitoring.yaml
Attivare l'adattatore delle metriche personalizzate
Per consentire a HPA di leggere le metriche da Google Cloud Managed Service per Prometheus, devi eseguire il deployment di
custom-metrics-stackdriver-adapter.
Abilita i binding IAM richiesti. Esegui questi comandi:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin --user="$(gcloud config get-value account)"
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Sostituisci PROJECT_NUMBER con il numero del tuo progetto Google Cloud .
Configurare le autorizzazioni RBAC per SandboxWarmPool
Il controller del buffer di capacità deve disporre dell'autorizzazione di lettura della risorsa secondaria di scalabilità della risorsa personalizzata SandboxWarmPool.
Salva il seguente manifest come
capacity-buffer-rbac.yaml:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: sandbox-warmpool-scale-reader rules: - apiGroups: ["extensions.agents.x-k8s.io"] resources: ["sandboxwarmpools/scale"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: ca-sandbox-warmpool-scale-reader subjects: - kind: User name: "system:cluster-autoscaler" namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: sandbox-warmpool-scale-readerApplica il manifest:
kubectl apply -f capacity-buffer-rbac.yaml
Configura buffer di capacità
Configura un CapacityBuffer per mantenere un buffer dell'infrastruttura proporzionale alle dimensioni di SandboxWarmPool. Per saperne di più, consulta Configura i buffer di capacità.
Salva il seguente manifest come
capacitybuffer.yaml. Questo esempio mantiene un buffer equivalente al 200% delle repliche diSandboxWarmPoolutilizzando la capacità di standby (VM sospese).apiVersion: autoscaling.x-k8s.io/v1beta1 kind: CapacityBuffer metadata: name: agent-warmpool-buffer namespace: NAMESPACE spec: percentage: 200 scalableRef: apiGroup: extensions.agents.x-k8s.io kind: SandboxWarmPool name: agent-warmpool provisioningStrategy: "buffer.gke.io/standby-capacity"Applica il manifest:
kubectl apply -f capacitybuffer.yaml
Configura Horizontal Pod Autoscaler
Collega SandboxWarmPool all'HPA per scalare dinamicamente le repliche in base alla metrica personalizzata.
Salva il seguente manifest come
hpa.yaml:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: agent-warmpool-hpa namespace: NAMESPACE spec: scaleTargetRef: apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxWarmPool name: agent-warmpool minReplicas: 10 maxReplicas: 100 metrics: - type: External external: metric: name: "prometheus.googleapis.com|agent_sandbox_claim_creation_total|counter" selector: matchLabels: metric.labels.warmpool_name: "agent-warmpool" target: type: Value value: 0.2Applica il manifest:
kubectl apply -f hpa.yaml
Monitorare gli eventi di scalabilità
Puoi monitorare gli eventi HPA e del buffer di capacità per verificare lo scaling dinamico.
Monitorare gli eventi HPA
Per monitorare gli eventi HPA, esegui questo comando:
kubectl get events -n NAMESPACE --watch \
--field-selector involvedObject.kind=HorizontalPodAutoscaler
L'output di esempio quando si verifica lo scaling è simile al seguente:
SuccessfulRescale New size: 20; reason: external metric prometheus.googleapis.com|agent_sandbox_claim_creation_total|counter above target
Monitorare gli eventi CapacityBuffer
Per monitorare gli eventi del buffer di capacità, esegui questo comando:
kubectl get events -n NAMESPACE --watch \
--field-selector involvedObject.kind=CapacityBuffer
L'output di esempio che mostra la ripresa o lo scale up della VM sospesa è simile al seguente:
TriggeredScaleUp capacity buffer 20 fake pods triggered scale-up
Passaggi successivi
- Scopri di più sulla sandbox dell'agente.
- Scopri di più sui buffer di capacità.