Kubernetes 的 MySQL Operator 手冊  /  MySQL InnoDB 叢集  /  MySQL InnoDB 叢集服務說明

3.4 MySQL InnoDB 叢集服務說明

為了連線至 InnoDB 叢集,會在 Kubernetes 叢集中建立一個 服務。匯出的連接埠代表 MySQL 協定和 X 協定的讀寫和唯讀連接埠。

$> kubectl describe service mycluster

輸出結果類似如下

Name:              mycluster
Namespace:         default
Labels:            mysql.oracle.com/cluster=mycluster
                   tier=mysql
Annotations:       <none>
Selector:          component=mysqlrouter,mysql.oracle.com/cluster=mycluster,tier=mysql
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.106.33.215
IPs:               10.106.33.215
Port:              mysql  3306/TCP
TargetPort:        6446/TCP
Endpoints:         172.17.0.12:6446
Port:              mysqlx  33060/TCP
TargetPort:        6448/TCP
Endpoints:         172.17.0.12:6448
Port:              mysql-alternate  6446/TCP
TargetPort:        6446/TCP
Endpoints:         172.17.0.12:6446
Port:              mysqlx-alternate  6448/TCP
TargetPort:        6448/TCP
Endpoints:         172.17.0.12:6448
Port:              mysql-ro  6447/TCP
TargetPort:        6447/TCP
Endpoints:         172.17.0.12:6447
Port:              mysqlx-ro  6449/TCP
TargetPort:        6449/TCP
Endpoints:         172.17.0.12:6449
Port:              router-rest  8443/TCP
TargetPort:        8443/TCP
Endpoints:         172.17.0.12:8443
Session Affinity:  None
Events:            <none>

顯示名為 myclustermycluster-instances 服務的替代檢視

$> kubectl get service

輸出結果類似如下

NAMESPACE     NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                  AGE
default       kubernetes            ClusterIP   10.96.0.1        <none>        443/TCP                                                  2d1h
default       mycluster             ClusterIP   10.102.198.226   <none>        3306/TCP,33060/TCP,6446/TCP,6448/TCP,6447/TCP,6449/TCP   2d
default       mycluster-instances   ClusterIP   None             <none>        3306/TCP,33060/TCP,33061/TCP                             2d

從 Kubernetes 叢集內部連線至 InnoDB 叢集所使用的長主機名稱為 {innodbclustername}.{namespace}.svc.cluster.local,它會根據連接埠使用 MySQL Router 路由至目前的主要/複本。可接受的主機名稱形式

{innodbclustername}.{namespace}.svc.cluster.local
{innodbclustername}.{namespace}.svc
{innodbclustername}.{namespace}
{innodbclustername}

使用這些名稱會連至 Kubernetes LoadBalancer(Kubernetes 服務的一部分),它會重新導向至 MySQL Router。然後,MySQL Router 會根據角色(例如 PRIMARY 或 SECONDARY)與個別伺服器通訊。

例如,假設在「default」命名空間中的 InnoDB 叢集名稱為「mycluster」

mycluster.default.svc.cluster.local

僅使用 {innodbclustername} 作為主機名稱會假設工作階段的內容是預設命名空間或已相應設定。或者,您可以使用 clusterIP 而不是主機名稱;以下範例示範如何擷取它

$> kubectl get service/mycluster -o jsonpath='{.spec.clusterIP}'

另請參閱第 5 章,連線至 MySQL InnoDB 叢集