Configura un bilanciatore del carico per AlloyDB Omni su Kubernetes

Seleziona una versione della documentazione:

Per esporre il cluster di database AlloyDB Omni ai client esterni al cluster Kubernetes, puoi configurare un servizio LoadBalancer nel manifest DBCluster. Questo documento è rivolto agli amministratori di database e agli operatori Kubernetes che gestiscono i deployment di AlloyDB Omni su Kubernetes e devono personalizzare il comportamento del bilanciatore del carico.

Quando abiliti il traffico in entrata esterno nel manifest DBCluster, l'operatore AlloyDB Omni Kubernetes crea un oggetto Kubernetes Service di tipo LoadBalancer. Le diverse piattaforme Kubernetes utilizzano annotazioni personalizzate per controllare le proprietà del bilanciatore del carico, ad esempio l'assegnazione di indirizzi IP interni o esterni. AlloyDB Omni ti consente di specificare queste annotazioni nel campo spec.primarySpec.dbLoadBalancerOptions.annotations del manifest DBCluster. Quando crei o aggiorni il cluster di database con spec.allowExternalIncomingTraffic impostato su true, l'operatore AlloyDB Omni applica queste annotazioni al campo metadata.annotations dell'oggetto LoadBalancer Service.

Configura un bilanciatore del carico utilizzando la specifica del database

Puoi configurare annotazioni personalizzate del bilanciatore del carico impostando il campo dbLoadBalancerOptions nella sezione spec.primarySpec del manifest DBCluster.

Kubernetes

Le annotazioni definiscono il tipo e le proprietà dell'oggetto del bilanciatore del carico Service nel tuo ambiente Kubernetes. Controlla la documentazione della tua piattaforma Kubernetes o dell'implementazione del bilanciatore del carico per identificare le chiavi e i valori delle annotazioni supportati.

Per creare un cluster di database con annotazioni del bilanciatore del carico personalizzate e consentire il traffico in entrata dall'esterno del cluster Kubernetes, applica il seguente manifest:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: db-pw-DB_CLUSTER_NAME
  namespace: NAMESPACE
type: Opaque
data:
  DB_CLUSTER_NAME: "ENCODED_PASSWORD"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
  namespace: NAMESPACE
spec:
  databaseVersion: "18.4.0"
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-DB_CLUSTER_NAME
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi
    dbLoadBalancerOptions:
      annotations:
        ANNOTATION_KEY: "ANNOTATION_VALUE"
  allowExternalIncomingTraffic: true
EOF

Sostituisci quanto segue:

  • DB_CLUSTER_NAME: un nome per il cluster di database, ad esempio my-db-cluster.
  • NAMESPACE: lo spazio dei nomi Kubernetes per il cluster di database.
  • ENCODED_PASSWORD: la password per l'utente amministratore postgres, codificata come stringa Base64.
  • ANNOTATION_KEY e ANNOTATION_VALUE: una chiave di annotazione del bilanciatore del carico e un valore di stringa supportati dal tuo ambiente Kubernetes. Racchiudi il valore tra virgolette doppie, anche per i valori booleani o numerici come "true". Puoi specificare una o più coppie chiave-valore in annotations.

In questo manifest:

  • ANNOTATION_KEY: "ANNOTATION_VALUE": specifica un'annotazione personalizzata che l'operatore AlloyDB Omni aggiunge all'oggetto Service del bilanciatore del carico per il cluster di database.
  • allowExternalIncomingTraffic: true: imposta il campo allowExternalIncomingTraffic su true per consentire il traffico in entrata dall'esterno del cluster Kubernetes.

Recupera i dettagli del cluster di database e della connettività

Kubernetes

Per verificare che la risorsa del cluster di database sia nello stato Ready, esegui il seguente comando:

kubectl get dbclusters.alloydbomni.dbadmin.goog -n NAMESPACE -w

Sostituisci NAMESPACE con lo spazio dei nomi Kubernetes del tuo cluster di database.

L'output è simile al seguente:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Per verificare che l'annotazione personalizzata e l'endpoint esterno assegnato esistano nell'oggetto del bilanciatore del carico Service, esegui questo comando:

kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml

Sostituisci quanto segue:

  • LOAD_BALANCER_SERVICE_NAME: il nome dell'oggetto LoadBalancer Service gestito dall'operatore. Per l'endpoint di lettura/scrittura principale, l'operatore AlloyDB Omni assegna il nome Service al-DB_CLUSTER_NAME-rw-elb (puoi anche elencare gli oggetti Service eseguendo kubectl get svc -n NAMESPACE).
  • NAMESPACE: il nome dello spazio dei nomi Kubernetes per l'oggetto del bilanciatore del carico Service.

L'output è simile al seguente:

apiVersion: v1
kind: Service
metadata:
  annotations:
    ANNOTATION_KEY: "ANNOTATION_VALUE"
  creationTimestamp: "2024-02-22T15:26:18Z"
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    alloydbomni.internal.dbadmin.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.goog/dbcluster-ns: NAMESPACE
  name: LOAD_BALANCER_SERVICE_NAME
  namespace: NAMESPACE
  ownerReferences:
  - apiVersion: alloydbomni.dbadmin.goog/v1
    blockOwnerDeletion: true
    controller: true
    kind: DBCluster
    name: DB_CLUSTER_NAME
    uid: 2dd76c9f-7698-4210-be41-6d2259840a85
  resourceVersion: "33628320"
  uid: 1f45362b-6d6f-484d-ad35-11c14e91933e
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 10.60.4.76
  clusterIPs:
  - 10.60.4.76
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: db
    nodePort: 31453
    port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    alloydbomni.internal.dbadmin.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.goog/dbcluster-ns: NAMESPACE
    alloydbomni.internal.dbadmin.goog/task-type: database
    dbs.internal.dbadmin.goog/ha-role: Primary
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.95.0.84

L'output include i seguenti campi:

  • metadata.annotations: contiene l'annotazione ANNOTATION_KEY: "ANNOTATION_VALUE" che hai configurato nel manifest DBCluster.
  • status.loadBalancer.ingress: mostra l'endpoint esterno assegnato all'oggetto Service del bilanciatore del carico. A seconda dell'ambiente Kubernetes, il controller del bilanciatore del carico compila ip (che corrisponde al valore PRIMARYENDPOINT del cluster di database) o hostname (per i bilanciatori del carico basati su DNS come AWS EKS, dove status.primary.endpoints su DBCluster registra il nome host e la porta).

Passaggi successivi