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 esempiomy-db-cluster.NAMESPACE: lo spazio dei nomi Kubernetes per il cluster di database.ENCODED_PASSWORD: la password per l'utente amministratorepostgres, codificata come stringa Base64.ANNOTATION_KEYeANNOTATION_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 inannotations.
In questo manifest:
ANNOTATION_KEY: "ANNOTATION_VALUE": specifica un'annotazione personalizzata che l'operatore AlloyDB Omni aggiunge all'oggettoServicedel bilanciatore del carico per il cluster di database.allowExternalIncomingTraffic: true: imposta il campoallowExternalIncomingTrafficsutrueper 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 -wSostituisci 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 yamlSostituisci quanto segue:
LOAD_BALANCER_SERVICE_NAME: il nome dell'oggettoLoadBalancerServicegestito dall'operatore. Per l'endpoint di lettura/scrittura principale, l'operatore AlloyDB Omni assegna il nomeServiceal-DB_CLUSTER_NAME-rw-elb(puoi anche elencare gli oggettiServiceeseguendokubectl get svc -n NAMESPACE).NAMESPACE: il nome dello spazio dei nomi Kubernetes per l'oggetto del bilanciatore del caricoService.
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.84L'output include i seguenti campi:
metadata.annotations: contiene l'annotazioneANNOTATION_KEY: "ANNOTATION_VALUE"che hai configurato nel manifestDBCluster.status.loadBalancer.ingress: mostra l'endpoint esterno assegnato all'oggettoServicedel bilanciatore del carico. A seconda dell'ambiente Kubernetes, il controller del bilanciatore del carico compilaip(che corrisponde al valorePRIMARYENDPOINTdel cluster di database) ohostname(per i bilanciatori del carico basati su DNS come AWS EKS, dovestatus.primary.endpointssuDBClusterregistra il nome host e la porta).