DBCluster einen LoadBalancer-Dienst konfigurieren. Dieses Dokument richtet sich an Datenbankadministratoren und Kubernetes-Operatoren, die AlloyDB Omni-Bereitstellungen in Kubernetes verwalten und das Load-Balancer-Verhalten anpassen müssen.
Wenn Sie in Ihrem DBCluster-Manifest externen eingehenden Traffic aktivieren, erstellt der AlloyDB Omni Kubernetes-Operator ein Kubernetes-Service-Objekt vom Typ LoadBalancer. Verschiedene Kubernetes-Plattformen verwenden benutzerdefinierte Annotationen, um Load-Balancer-Eigenschaften wie die Zuweisung interner oder externer IP-Adressen zu steuern.
Mit AlloyDB Omni können Sie diese Annotationen im Feld spec.primarySpec.dbLoadBalancerOptions.annotations Ihres DBCluster-Manifests angeben. Wenn Sie den Datenbankcluster erstellen oder aktualisieren und spec.allowExternalIncomingTraffic auf true gesetzt ist, wendet der AlloyDB Omni-Operator diese Annotationen auf das Feld metadata.annotations des LoadBalancer-Objekts Service an.
Load Balancer mit der Datenbankspezifikation konfigurieren
Sie können benutzerdefinierte Load-Balancer-Annotationen konfigurieren, indem Sie das Feld dbLoadBalancerOptions im Abschnitt spec.primarySpec des DBCluster-Manifests festlegen.
Kubernetes
Mit Annotationen werden der Typ und die Attribute des Load-Balancer-Objekts Service in Ihrer Kubernetes-Umgebung definiert. In der Dokumentation zu Ihrer Kubernetes-Plattform oder Load-Balancer-Implementierung finden Sie die unterstützten Annotationsschlüssel und -werte.
Wenn Sie einen Datenbankcluster mit benutzerdefinierten Load-Balancer-Annotationen erstellen und eingehenden Traffic von außerhalb des Kubernetes-Clusters zulassen möchten, wenden Sie das folgende Manifest an:
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
Ersetzen Sie Folgendes:
DB_CLUSTER_NAME: Ein Name für Ihren Datenbankcluster, z. B.my-db-cluster.NAMESPACE: der Kubernetes-Namespace für Ihren Datenbankcluster.ENCODED_PASSWORD: Das Passwort für denpostgres-Administrator, codiert als Base64-String.ANNOTATION_KEYundANNOTATION_VALUE: Ein Load-Balancer-Annotationsschlüssel und ein Stringwert, die von Ihrer Kubernetes-Umgebung unterstützt werden. Setzen Sie den Wert in doppelte Anführungszeichen, auch bei booleschen oder numerischen Werten wie"true". Sie können unterannotationsein oder mehrere Schlüssel/Wert-Paare angeben.
In diesem Manifest:
ANNOTATION_KEY: "ANNOTATION_VALUE": Gibt eine benutzerdefinierte Annotation an, die der AlloyDB Omni-Operator dem Load-Balancer-Service-Objekt für Ihren Datenbankcluster hinzufügt.allowExternalIncomingTraffic: true: Legt das FeldallowExternalIncomingTrafficauftruefest, um eingehenden Traffic von außerhalb des Kubernetes-Clusters zuzulassen.
Details zum Datenbankcluster und zur Konnektivität abrufen
Kubernetes
Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Datenbankcluster-Ressource den Status Ready hat:
kubectl get dbclusters.alloydbomni.dbadmin.goog -n NAMESPACE -wErsetzen Sie NAMESPACE durch den Kubernetes-Namespace für Ihren Datenbankcluster.
Die Ausgabe sieht etwa so aus:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE
DB_CLUSTER_NAME 10.95.0.84 Ready DBClusterReady
Führen Sie den folgenden Befehl aus, um zu prüfen, ob die benutzerdefinierte Annotation und der zugewiesene externe Endpunkt im Load-Balancer-Objekt Service vorhanden sind:
kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yamlErsetzen Sie Folgendes:
LOAD_BALANCER_SERVICE_NAME: der Name des vom Operator verwaltetenLoadBalancer-Service-Objekts. Für den primären Lese-/Schreibendpunkt benennt der AlloyDB Omni-Operator diesenServiceal-DB_CLUSTER_NAME-rw-elb(Sie könnenService-Objekte auch mitkubectl get svc -n NAMESPACEauflisten).NAMESPACE: der Name des Kubernetes-Namespace für Ihr Load-Balancer-Service-Objekt.
Die Ausgabe sieht etwa so aus:
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.84Die Ausgabe enthält die folgenden Felder:
metadata.annotations: Enthält die AnnotationANNOTATION_KEY: "ANNOTATION_VALUE", die Sie in IhremDBCluster-Manifest konfiguriert haben.status.loadBalancer.ingress: Zeigt den externen Endpunkt an, der dem Load-Balancer-ObjektServicezugewiesen ist. Je nach Kubernetes-Umgebung füllt der Load-Balancer-Controller entwederip(entspricht demPRIMARYENDPOINT-Wert Ihres Datenbankclusters) oderhostname(für DNS-basierte Load-Balancer wie AWS EKS, wobeistatus.primary.endpointsauf demDBClusterden Hostnamen und den Port aufzeichnet).