Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 56 additions & 54 deletions docs/kubernetes/deploy_radondb-mysql_on_kubernetes.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ Contents
* [步骤 1 : 添加仓库](#步骤-1--添加仓库)
* [步骤 2 : 部署](#步骤-2--部署)
* [部署校验](#部署校验)
* [连接 RadonDB MySQL](#连接-radondb-mysql)
* [客户端与 RadonDB MySQL 在同一 NameSpace 中](#客户端与-radondb-mysql-在同一-namespace-中)
* [客户端与 RadonDB MySQL 不在同一 NameSpace 中](#客户端与-radondb-mysql-不在同一-namespace-中)
* [访问 RadonDB MySQL](#访问-radondb-mysql)
* [配置](#配置)
* [持久化](#持久化)
* [自定义 MYSQL 配置](#自定义-mysql-配置)
Expand All @@ -40,29 +38,32 @@ RadonDB MySQL 是基于 MySQL 的开源、高可用、云原生集群解决方
执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。

```bash
git clone https://github.com/radondb/radondb-mysql-kubernetes.git
$ git clone https://github.com/radondb/radondb-mysql-kubernetes.git
```

> **说明**
>
> Chart 代表 [Helm](https://helm.sh/zh/docs/intro/using_helm/) 包,包含在 Kubernetes 集群内部运行应用程序、工具或服务所需的所有资源定义。

#### 步骤 2:部署

在 radondb-mysql-kubernetes 目录路径下,选择如下方式,部署 release 实例。

> **说明**
>
> release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令方式部署,需指定 release 名称。

以下命令指定 release 名为 `demo`,将创建一个名为 `demo-radondb-mysql` 的有状态副本集。

* **默认部署方式**

```bash
<For Helm v2>
cd charts/helm
helm install . demo
# For Helm v2
$ cd charts/helm
$ helm install . demo

<For Helm v3>
cd charts/helm
helm install demo .
# For Helm v3
$ cd charts/helm
$ helm install demo .
```

* **指定参数部署方式**
Expand All @@ -72,8 +73,8 @@ git clone https://github.com/radondb/radondb-mysql-kubernetes.git
以下示例以创建一个用户名为 `my-user` ,密码为 `my-password` 的标准数据库用户,可访问名为 `my-database` 的数据库。

```bash
cd charts/helm
helm install demo \
$ cd charts/helm
$ helm install demo \
--set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database .
```

Expand All @@ -82,8 +83,8 @@ git clone https://github.com/radondb/radondb-mysql-kubernetes.git
执行如下命令,可通过 value.yaml 配置文件,在安装时配置指定参数。更多安装过程中可配置的参数,请参考 [配置](#配置) 。

```bash
cd charts/helm
helm install demo -f values.yaml .
$ cd charts/helm
$ helm install demo -f values.yaml .
```

### 通过 repo 部署
Expand Down Expand Up @@ -154,65 +155,66 @@ demo-radondb-mysql 3/3 25h
部署指令执行完成后,查看 RadonDB MySQL 有状态副本集,pod 状态及服务。可查看到相关信息,则 RadonDB MySQL 部署成功。

```bash
kubectl get statefulset,pod,svc
$ kubectl get statefulset,pod,svc
```

## 连接 RadonDB MySQL
## 访问 RadonDB MySQL

您需要准备一个用于连接 RadonDB MySQL 的客户端。
> **注意**
>
> 准备可用于连接 MySQL 的客户端。
>
> 使用外网客户端连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。

### 客户端与 RadonDB MySQL 在同一 NameSpace 中
- 当客户端的与数据库部署在不同 Kubernetes 集群,请参考 [Kubernetes 访问集群中的应用程序](https://kubernetes.io/zh/docs/tasks/access-application-cluster/),配置端口转发、负载均衡等连接方式。

当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 ip 和端口
- 在 Kubernetes 集群内,支持选择使用 `service_name` 或者 `cluster_IP` 方式访问 RadonDB MySQL

- 连接主节点(读写节点)。

```bash
mysql -h <leader service 名称> -u <用户名> -p
```
> **说明**
>
> RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点(读写),follower 服务始终指向从节点(只读)。

- 连接从节点(只读节点)。
```bash
mysql -h <follower service 名称> -u <用户名> -p
```
以下为客户端与数据库在同一 Kubernetes 集群内,访问 RadonDB MySQL 的方式。

### 客户端与 RadonDB MySQL 不在同一 NameSpace 中
### `service_name` 方式

当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,需先分别获取连接所需的节点地址、节点端口、服务名称。
* 连接 leader 服务(RadonDB MySQL 主节点)

1. 查询 pod 列表和服务列表,分别获取 pod 名称和服务名称。
```shell
$ mysql -h <leader_service_name>.<namespace> -u <user_name> -p
```

```bash
kubectl get pod,svc
```
用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下:

2. 开启服务网络访问。
```shell
$ mysql -h sample-leader.default -u radondb_usr -p
```

执行如下命令,打开服务配置文件,将 spec 下 type 参数设置为 `NodePort`。
* 连接 follower 服务(RadonDB MySQL 从节点)

```bash
kubectl edit svc <服务名称>
```
```shell
$ mysql -h <follower_service_name>.<namespace> -u <user_name> -p
```

3. 分别获取 pod 所在的节点地址和节点端口。
用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下:

```bash
kubectl describe pod <pod名称>
```
```shell
$ mysql -h sample-follower.default -u radondb_usr -p
```

```bash
kubectl describe svc <服务名称>
```
### `clusterIP` 方式

4. 连接节点
RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`,高可用只读 IP 指向 follower 服务的 `clusterIP`

```bash
mysql -p <节点地址> -u <用户名> -P <节点端口> -p
```
```shell
$ mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
```

> **说明**
>
> 使用外网主机连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。
以下示例用户名为 `radondb_usr`, leader 服务的 clusterIP 为 `10.10.128.136` ,连接示例如下:

```shell
$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
```

## 配置

Expand Down
98 changes: 44 additions & 54 deletions docs/kubernetes/deploy_radondb-mysql_operator_on_k8s.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@ Contents
* [简介](#简介)
* [部署准备](#部署准备)
* [部署步骤](#部署步骤)
* [步骤 1:克隆代码](#步骤-1-克隆代码)
* [步骤 1:添加 Helm 仓库](#步骤-1-添加-helm-仓库)
* [步骤 2:部署 Operator](#步骤-2-部署-operator)
* [步骤 3:部署 RadonDB MySQL 集群](#步骤-3-部署-radondb-mysql-集群)
* [部署校验](#部署校验)
* [校验 RadonDB MySQL Operator](#校验-radondb-mysql-operator)
* [校验 RadonDB MySQL 集群](#校验-radondb-mysql-集群)
* [连接 RadonDB MySQL](#连接-radondb-mysql)
* [同 NameSpace 访问](#同-namespace-访问)
* [跨 NameSpace 访问](#跨-namespace-访问)
* [访问 RadonDB MySQL](#访问-radondb-mysql)
* [卸载](#卸载)
* [卸载 Operator](#卸载-Operator)
* [卸载 RadonDB MySQL](#卸载-RadonDB-MySQL)
Expand All @@ -40,27 +38,26 @@ RadonDB MySQL 支持在 Kubernetes 上安装部署和管理,自动执行与运

## 部署步骤

### 步骤 1: 添加 helm 仓库
### 步骤 1: 添加 Helm 仓库

```
helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/
$ helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/
```

校验仓库,可查看到名为 `radondb/mysql-operator` 的 chart。
```
helm search repo
$ helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
radondb/mysql-operator 0.1.1 latest Open Source,High Availability Cluster,based on MySQL
```

### 步骤 2: 部署 Operator



以下指定 release 名为 `demo` , 创建一个名为 `demo-mysql-operator` 的 [Deployment](#7-deployments)。

```
helm install demo radondb/mysql-operator
$ helm install demo radondb/mysql-operator
```

> 说明:在这一步骤中默认将同时创建集群所需的 [CRD](#8-CRD)。
Expand All @@ -70,7 +67,7 @@ helm install demo radondb/mysql-operator
执行以下指令,以默认参数为 CRD `mysqlclusters.mysql.radondb.com` 创建一个实例,即创建 RadonDB MySQL 集群。您可以参照[配置](#配置)自定义集群部署参数。

```kubectl
kubectl apply -f https://raw.githubusercontent.com/radondb/radondb-mysql-kubernetes/main/config/samples/mysql_v1alpha1_mysqlcluster.yaml
$ kubectl apply -f https://raw.githubusercontent.com/radondb/radondb-mysql-kubernetes/main/config/samples/mysql_v1alpha1_mysqlcluster.yaml
```

## 部署校验
Expand All @@ -80,7 +77,7 @@ kubectl apply -f https://raw.githubusercontent.com/radondb/radondb-mysql-kuberne
查看 `demo` 的 Deployment 和对应监控服务,回显如下信息则部署成功。

```shell
kubectl get deployment,svc
$ kubectl get deployment,svc
NAME READY UP-TO-DATE AVAILABLE AGE
demo-mysql-operator 1/1 1 1 7h50m

Expand All @@ -94,7 +91,7 @@ service/mysql-operator-metrics ClusterIP 10.96.142.22 <none> 8443/
执行如下命令,将查看到如下 CRD。

```shell
kubectl get crd | grep mysql.radondb.com
$ kubectl get crd | grep mysql.radondb.com
backups.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlclusters.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z
Expand All @@ -103,7 +100,7 @@ mysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z
以默认部署为例,执行如下命令将查看到名为 `sample-mysql` 的三节点 RadonDB MySQL 集群及用于访问节点的服务。

```shell
kubectl get statefulset,svc
$ kubectl get statefulset,svc
NAME READY AGE
sample-mysql 3/3 7h33m

Expand All @@ -113,68 +110,61 @@ service/sample-leader ClusterIP 10.96.111.214 <none> 3306/
service/sample-mysql ClusterIP None <none> 3306/TCP 7h37m
```

## 连接 RadonDB MySQL
## 访问 RadonDB MySQL

您需要准备一个用于连接 MySQL 的客户端。
> **注意**
>
> 准备可用于连接 MySQL 的客户端。

### 同 NameSpace 访问
- 当客户端的与数据库部署在不同 Kubernetes 集群,请参考 [Kubernetes 访问集群中的应用程序](https://kubernetes.io/zh/docs/tasks/access-application-cluster/),配置端口转发、负载均衡等连接方式。

当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 IP 和端口。
- 在 Kubernetes 集群内,支持使用 `service_name` 或者 `clusterIP` 方式,访问 RadonDB MySQL。

> **说明**
>
> RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点(读写),follower 服务始终指向从节点(只读)。

* 连接主节点(读写节点)
以下为客户端与数据库在同一 Kubernetes 集群内,访问 RadonDB MySQL 的方式

```shell
$ mysql -h <leader service 名称> -u <用户名> -p
```
### `service_name` 方式

用户名为 `radondb_usr`,release 名为 `sample` ,连接主节点示例如下:
* 连接 leader 服务(RadonDB MySQL 主节点)

```shell
$ mysql -h sample-leader -u radondb_usr -p
$ mysql -h <leader_service_name>.<namespace> -u <user_name> -p
```

* 连接从节点(只读节点)。
用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下:

```shell
$ mysql -h <follower service 名称> -u <用户名> -p
$ mysql -h sample-leader.default -u radondb_usr -p
```

用户名为 `radondb_usr`,release 名为 `sample` ,连接从节点示例如下:

```shell
$ mysql -h sample-follower -u radondb_usr -p
```

### 跨 NameSpace 访问

当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,可以通过 podIP 或服务 ClusterIP 来连接对应节点。

1. 查询 pod 列表和服务列表,分别获取需要连接的节点所在的 pod 名称或对应的服务名称。
* 连接 follower 服务(RadonDB MySQL 从节点)

```shell
$ kubectl get pod,svc
$ mysql -h <follower_service_name>.<namespace> -u <user_name> -p
```

2. 查看 pod/服务的详细信息,获取对应的 IP。
用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下:

```shell
$ kubectl describe pod <pod 名称>
$ kubectl describe svc <服务名称>
$ mysql -h sample-follower.default -u radondb_usr -p
```

> 注意:pod 重启后 pod IP 会更新,需重新获取 pod IP,建议使用服务的 ClusterIP 来连接节点。
### `clusterIP` 方式

3. 连接节点
RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`,高可用只读 IP 指向 follower 服务的 `clusterIP`

```shell
$ mysql -h <pod IP/服务 ClusterIP> -u <用户名> -p
```
```shell
$ mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
```

用户名为 `radondb_usr`,Cluster IP 为 `10.10.128.136` ,连接示例如下:
以下示例用户名为 `radondb_usr`, leader 服务的 clusterIP 为 `10.10.128.136` ,连接示例如下:

```shell
$ mysql -h 10.10.128.136 -u radondb_usr -p
```
```shell
$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
```

## 卸载

Expand All @@ -183,23 +173,23 @@ service/sample-mysql ClusterIP None <none> 3306/
卸载当前命名空间下 release 名为 `demo` 的 RadonDB MySQL Operator。

```shell
helm delete demo
$ helm delete demo
```

### 卸载 RadonDB MySQL

卸载 release 名为 `sample` RadonDB MySQL 集群。

```shell
kubectl delete mysqlclusters.mysql.radondb.com sample
$ kubectl delete mysqlclusters.mysql.radondb.com sample
```

### 卸载自定义资源

```shell
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com
$ kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
$ kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
$ kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com
```

## 配置
Expand Down