diff --git a/docs/en-us/deploy_backup_restore_nfs.md b/docs/en-us/deploy_backup_restore_nfs.md index 8e5ab29e..a6dd6f04 100644 --- a/docs/en-us/deploy_backup_restore_nfs.md +++ b/docs/en-us/deploy_backup_restore_nfs.md @@ -33,7 +33,7 @@ kubectl get svc nfs-server --template={{.spec.clusterIP}} ```yaml # config/samples/mysql_v1alpha1_backup.yaml -NFSServerAddress: "10.96.253.82" +nfsServerAddress: "10.96.253.82" ``` ### 2. Create a backup diff --git a/docs/en-us/setup-rw-svc.md b/docs/en-us/setup-rw-svc.md deleted file mode 100644 index c7c54cc4..00000000 --- a/docs/en-us/setup-rw-svc.md +++ /dev/null @@ -1,91 +0,0 @@ -Contents -================= - - * [setup service for client to read/write](#setup-service-for-client-to-readwrite) - * [1. Get the pod about leader](#1-get-the-pod-about-leader) - * [2. Label role to the pod of the leader](#2-label-role-to-the-pod-of-the-leader) - * [3. Edit the demo.yaml](#3-edit-the-demoyaml) - * [4. Apply the service](#4-apply-the-service) - * [5. Check the service](#5-check-the-service) - -# setup service for client to read/write - -## 1. Get the pod about leader - -``` -# kubectl exec -ti $pod -c xenon xenoncli raft status | jq .leader | cut -d . -f 1 | tail -c +2 -demo-krypton-1 -``` -the leader is the result: `demo-krypton-1` - -## 2. Label role to the pod of the leader -``` -# kubectl label pods $leader role=master -``` -## 3. Edit the demo.yaml -``` -# kubectl get svc $svc -oyaml > demo.yaml -``` -$svc is demo-krypton, to edit it, for example - -``` -apiVersion: v1 -kind: Service -metadata: - labels: - app: demo-krypton - name: demo-svc - namespace: default -spec: - ports: - - name: mysql - port: 3306 - protocol: TCP - targetPort: mysql - - name: metrics - port: 9104 - protocol: TCP - targetPort: metrics - selector: - app: demo-krypton - role: master - sessionAffinity: None - type: ClusterIP -``` - -## 4. Apply the service - -```# kubectl apply -f demo.yaml``` - -## 5. Check the service - -``` -# kubectl get svc -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -demo-krypton NodePort 10.96.139.75 3306:30347/TCP,9104:32430/TCP 26h -demo-svc ClusterIP 10.96.101.64 3306/TCP,9104/TCP 23h -``` - -``` -# mysql -h10.96.101.64 -P 3306 -uxxx -pxxxx -mysql: [Warning] Using a password on the command line interface can be insecure. -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 19068 -Server version: 5.7.33-36-log Percona Server (GPL), Release '36', Revision '7e403c5' - -Copyright (c) 2000, 2021, Oracle and/or its affiliates. - -Oracle is a registered trademark of Oracle Corporation and/or its -affiliates. Other names may be trademarks of their respective -owners. - -Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. - -mysql> show variables like "read_only"; -+---------------+-------+ -| Variable_name | Value | -+---------------+-------+ -| read_only | OFF | -+---------------+-------+ -1 row in set (0.02 sec) -``` diff --git a/docs/zh-cn/DebugMode.md b/docs/zh-cn/DebugMode.md new file mode 100644 index 00000000..51581fe2 --- /dev/null +++ b/docs/zh-cn/DebugMode.md @@ -0,0 +1,23 @@ +Contents +============= + * [Debug模式](#debug模式) + * [移除debug模式](#移除debug模式) + + +# Debug 模式 + +在运维阶段, 如果你想避免restart-on-fail循环的 mysql 容器,你应该使用 Debug 模式。只要创建一个空文件 `/var/lib/mysql/sleep-forever` 即可. + +示例: + +```bash +kubectl exec -it sample-mysql-0 -c mysql -- sh -c 'touch /var/lib/mysql/sleep-forever' +``` +该命令会让 Pod `sample-mysql-0` 的 mysql 容器在 mysqld 已经crash的情况下, 永远不会重启. + +# 移除 Debug 模式 + +```bash +kubectl exec -it sample-mysql-0 -c mysql -- sh -c 'rm /var/lib/mysql/sleep-forever' +``` +该命令会让 Pod `sample-mysql-0` 的 mysql 恢复正常情况, 即 mysqld 退出后, mysql 容器会重启. \ No newline at end of file diff --git a/docs/zh-cn/build_images_and_apply.md b/docs/zh-cn/build_images_and_apply.md new file mode 100644 index 00000000..fbbed9af --- /dev/null +++ b/docs/zh-cn/build_images_and_apply.md @@ -0,0 +1,46 @@ +## 如何创建自己的镜像 + * [Operator](#operator) + * [Sidecar](#sidecar) + +### Operator + +1. 创建自己的镜像并上传到docker hub上. + +``` +docker build -t {your repo}/mysql-operator:{your tag} . && docker push {your repo}/mysql-operator:{your tag} +``` + +2. 添加 radondb mysql 的 helm 库. + +``` +helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/ +``` + +3. 使用自己的镜像来安装/更新 operator. + +``` +helm upgrade demo radondb/mysql-operator --install --set manager.image={your repo}/mysql-operator --set manager.tag={your tag} +``` + +### Sidecar + +1. 创建自己的 sidecar 镜像并 push 到 docker hub 中. + +``` +docker build -f Dockerfile.sidecar -t {your repo}/mysql-sidecar:{your tag} . && docker push {your repo}/mysql-sidecar:{your tag} +``` + +2. 创建sample cluster. + +``` +kubectl apply -f https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/mysql_v1alpha1_mysqlcluster.yaml +``` + +3. 从已有的 cluster 中应用自己的镜像. + +``` +kubectl patch mysql sample -p '{"spec": {"podPolicy": {"sidecarImage": "{your repo}/mysql-sidecar:{your tag}"}}}' --type=merge +``` + +> 本例中集群名称为 `sample`, 您可以修改为您自己的集群名称. + diff --git a/docs/zh-cn/charts.md b/docs/zh-cn/charts.md deleted file mode 100644 index 6d08884f..00000000 --- a/docs/zh-cn/charts.md +++ /dev/null @@ -1,183 +0,0 @@ -Contents -================= - - * [RadonDB MySQL Charts](#radondb-mysql-charts) - * [简介](#简介) - * [先决条件](#先决条件) - * [安装 Chart](#安装-chart) - * [卸载](#卸载) - * [配置](#配置) - * [持久化](#持久化) - * [自定义 MYSQL 配置](#自定义-mysql-配置) - -# RadonDB MySQL Charts - -## 简介 - -RadonDB MySQL chart 使用 [Helm](https://helm.sh) 包管理器在 [Kubernetes](http://kubernetes.io) 集群上部署一主多从 [MySQL](https://MySQL.org) 集群。 - -## 先决条件 - -- Kubernetes 1.10+ 并开启 Beta APIs。 -- 底层设施支持 PV provisioner。 -- Helm 2.11+ 或 Helm 3.0-beta3+。 - -## 安装 Chart - -指定 release 名为 `my-release`: - -```bash -## For Helm v2 -$ cd charts -$ helm install . --name my-release - -## For Helm v3 -$ cd charts -$ helm install --name my-release . -``` - -以上指令使用默认配置在 Kubernets 中部署 MySQL 集群,[配置](#配置)中列出了可在安装过程中配置的参数。 - -## 卸载 - -卸载 `my-release` 部署: - -```bash -$ helm delete my-release -``` - -删除持久化存储卷: - -``` -kubectl delete pvc data-my-release-radondb-mysql-0 -kubectl delete pvc data-my-release-radondb-mysql-1 -kubectl delete pvc data-my-release-radondb-mysql-2 -``` - -以上指令会删除所有与该 Chart 关联的 Kubernets 组件,并彻底删除该 release。 - -## 配置 - -下表列出了 RadonDB MySQL chart 的配置参数及对应的默认值。 - -| 参数 | 描述 | 默认值 | -| -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| `imagePullPolicy` | 镜像拉取策略 | `IfNotPresent` | -| `fullnameOverride` | 自定义全名覆盖 | | -| `nameOverride` | 自定义名称覆盖 | | -| `replicaCount` | Pod 数目 | `3` | -| `busybox.image` | `busybox` 镜像库地址 | `busybox` | -| `busybox.tag` | `busybox` 镜像标签 | `1.32` | -| `mysql.image` | `mysql` 镜像库地址 | `radondb/percona` | -| `mysql.tag` | `mysql` 镜像标签 | `5.7.34` | -| `mysql.allowEmptyRootPassword` | 如果为 `true`,允许 root 账号密码为空 | `true` | -| `mysql.mysqlRootPassword` | `root` 用户密码 | | -| `mysql.mysqlReplicationPassword` | `qc_repl` 用户密码 | `Repl_123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlUser` | 新建用户的用户名 | `qingcloud` | -| `mysql.mysqlPassword` | 新建用户的密码 | `Qing@123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlDatabase` | 将要创建的数据库名 | `qingcloud` | -| `mysql.initTokudb` | 安装 tokudb 引擎 | `false` | -| `mysql.args` | 要传递到 mysql 容器的其他参数 | `[]` | -| `mysql.configFiles.node.cnf` | Mysql 配置文件 | 详见 `values.yaml` | -| `mysql.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `mysql.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `mysql.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `mysql.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `mysql.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `mysql.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `mysql.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `mysql.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `mysql.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `mysql.resources` | `MySQL` 的资源请求/限制 | 内存: `256Mi`, CPU: `100m` | -| `xenon.image` | `xenon` 镜像库地址 | `radondb/xenon` | -| `xenon.tag` | `xenon` 镜像标签 | `1.1.5-alpha` | -| `xenon.args` | 要传递到 xenon 容器的其他参数 | `[]` | -| `xenon.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `xenon.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `xenon.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `xenon.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `xenon.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `xenon.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `xenon.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `xenon.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `xenon.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `xenon.resources` | `xenon` 的资源请求/限制 | 内存: `128Mi`, CPU: `50m` | -| `metrics.enabled` | 以 side-car 模式开启 Prometheus Exporter | `true` | -| `metrics.image` | Exporter 镜像地址 | `prom/mysqld-exporter` | -| `metrics.tag` | Exporter 标签 | `v0.12.1` | -| `metrics.annotations` | Exporter 注释 | `{}` | -| `metrics.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 15 | -| `metrics.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `metrics.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 5 | -| `metrics.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `metrics.serviceMonitor.enabled` | 若设置为 `true`, 将为 Prometheus operator 创建 ServiceMonitor | `true` | -| `metrics.serviceMonitor.namespace` | 创建 ServiceMonitor 时,可指定命名空间 | `nil` | -| `metrics.serviceMonitor.interval` | 数据采集间隔,若未指定,将使用 Prometheus 默认设置 | 10s | -| `metrics.serviceMonitor.scrapeTimeout` | 数据采集超时时间,若未指定,将使用 Prometheus 默认设置 | `nil` | -| `metrics.serviceMonitor.selector` | 默认为 kube-prometheus | `{ prometheus: kube-prometheus }` | -| `slowLogTail` | 若设置为 `true`,将启动一个容器用来查看 mysql-slow.log | `true` | -| `resources` | 资源 请求/限制 | 内存: `32Mi`, CPU: `10m` | -| `service.annotations` | Kubernetes 服务注释 | {} | -| `service.type` | Kubernetes 服务类型 | NodePort | -| `service.loadBalancerIP` | 服务负载均衡器 IP | `""` | -| `service.nodePort` | 服务节点端口 | `""` | -| `service.clusterIP` | 服务集群 IP | `""` | -| `service.port` | 服务端口 | `3306` | -| `rbac.create` | 若为 true,将创建和使用 RBAC 资源 | `true` | -| `serviceAccount.create` | 指定是否创建 ServiceAccount | `true` | -| `serviceAccount.name` | ServiceAccount 的名称 | | -| `persistence.enabled` | 创建一个卷存储数据 | true | -| `persistence.size` | PVC 容量 | 10Gi | -| `persistence.storageClass` | PVC 类型 | nil | -| `persistence.accessMode` | 访问模式 | ReadWriteOnce | -| `persistence.annotations` | PV 注解 | {} | -| `priorityClassName` | 设置 Pod 的 priorityClassName | `{}` | -| `schedulerName` | Kubernetes scheduler 名称(不包括默认) | `nil` | -| `statefulsetAnnotations` | StatefulSet 注释 | `{}` | -| `podAnnotations` | Pod 注释 map | `{}` | -| `podLabels` | Pod 标签 map | `{}` | - -在 `helm install` 时使用 `--set key=value[,key=value]` 指定参数配置,例如, - -```bash -$ cd charts -$ helm install my-release \ - --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database . -``` - -以上指令创建了一个用户名为 `my-user` ,密码为 `my-password` 的标准数据库用户,可访问名为 `my-database` 的数据库。 -当然,也可以通过 YAML 文件在安装时配置指定参数,例如, - -```bash -$ cd charts -$ helm install my-release -f values.yaml . -``` - -## 持久化 - -[MySQL](https://hub.docker.com/repository/docker/radondb/percona) 镜像在容器路径 `/var/lib/mysql` 中存储 MYSQL 数据和配置。 - -默认情况下,会创建一个 PersistentVolumeClaim 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 `values.yaml` 禁用持久化,改用 emptyDir。 - -> *"当 Pod 分配给节点时,将首先创建一个 emptyDir 卷,只要该 Pod 在该节点上运行,该卷便存在。 当 Pod 从节点中删除时,emptyDir 中的数据将被永久删除."* - -**注意**:PersistentVolumeClaim 中可以使用不同特性的 PersistentVolume,其 IO 性能会影响数据库的初始化性能。所以当使用 PersistentVolumeClaim 启用持久化存储时,可能需要调整 livenessProbe.initialDelaySeconds 的值。数据库初始化的默认限制是60秒 (livenessProbe.initialDelaySeconds + livenessProbe.periodSeconds * livenessProbe.failureThreshold)。如果初始化时间超过限制,kubelet将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。 - -## 自定义 MYSQL 配置 - -在 `mysql.configFiles` 中添加/更改 MySQL 配置。 - -```yaml - configFiles: - node.cnf: | - [mysqld] - default_storage_engine=InnoDB - max_connections=65535 - - # custom mysql configuration. - expire_logs_days=7 -``` diff --git a/docs/zh-cn/deploy_backup_restore_nfs.md b/docs/zh-cn/deploy_backup_restore_nfs.md new file mode 100644 index 00000000..8df1b363 --- /dev/null +++ b/docs/zh-cn/deploy_backup_restore_nfs.md @@ -0,0 +1,77 @@ +# NFS 备份快速手册 + +## 安装 NFS server 与资源 + +### 方法一: 使用 helm 安装 + +```shell +helm install demo charts/mysql-operator --set nfsBackup.installServer=true --set nfsBackup.volume.createLocalPV=true +``` +或者手动创建PVC, 再使用 +```shell +helm install demo charts/mysql-operator --set nfsBackup.installServer=true --set nfsBackup.volume.specifiedPVC=XXXX +``` +> 其中 XXX 为 pvc 名称 + +用该方法, 可以在安装operator的时候, 也将 NFS server 的 Pod 和 Service 安装到集群中. + +### 方法二: 使用 kubectl 安装 + +```shell +kubectl apply -f config/samples/nfs_pv.yaml + kubectl apply -f config/samples/nfs_server.yaml +``` + +## 获取 `nfsServerAddress`. + +例如 +```shell + +kubectl get svc nfs-server --template={{.spec.clusterIP}} +10.96.253.82 +``` +获取到ClusterIp, 即可以使用该地址进行 NFS backup. 这里 IP 为 `10.96.253.82` + +## 创建 NFS backup + +### 1. 配置 NFS server 的地址 + +```yaml +# config/samples/mysql_v1alpha1_backup.yaml +nfsServerAddress: "10.96.253.82" +``` + +### 2. 创建一个backup + + +```shell +kubectl apply -f config/samples/mysql_v1alpha1_backup.yaml +``` +> 注意: backup cr 与 mysqlcluster cr 必须在同一个 namespace 中. + +### 3. 验证备份 + +可以发现备份形如 `_` 的备份文件夹. 如下命令可以查看备份文件夹: + +``` +kubectl exec -it -- ls /exports +index.html initbackup sample_2022419101946 +``` + + ## 从已有的 NFS backup 恢复集群 + +配置 `mysql_v1alpha1_cluster.yaml`, 将 `nfsServerAddress` 设置为 NFS server 的地址. + + ```yaml + ... + restoreFrom: "sample_2022419101946" + nfsServerAddress: 10.96.253.82 + ``` + + > 注意: restoreFrom 是备份的路径名称. 可以从 nfs server 加载的路径中看到. + + 然后从 NFS 备份副本恢复集群, 如下: + + ``` +kubectl apply -f config/samples/mysql_v1alpha1_cluster.yaml + ``` \ No newline at end of file diff --git a/docs/zh-cn/deploy_backup_restore_s3.md b/docs/zh-cn/deploy_backup_restore_s3.md index 9f4200a8..9f1b48ab 100644 --- a/docs/zh-cn/deploy_backup_restore_s3.md +++ b/docs/zh-cn/deploy_backup_restore_s3.md @@ -1,16 +1,26 @@ -# mysql-operator -## Quickstart for backup +Contents +============= -Install the operator named `test`: + - [前提条件](#前提条件) + - [简介](#简介) + - [配置backup](#配置backup) + - [步骤 1: 添加 secret 文件](#1-添加-secret-文件) + - [步骤 2: 将 secret 配置到 Operator 集群](#2-将-secret-配置到-Operator-集群) + - [启动备份](#启动备份) + - [从备份副本恢复到新集群](#从备份副本恢复到新集群) -```shell -helm install test charts/mysql-operator -``` +## 前提条件 + +* 已部署 [RadonDB MySQL 集群](kubernetes/deploy_radondb-mysql_operator_on_k8s.md)。 + +## 简介 -### configure backup +本文档介绍如何对部署的 RadonDB MySQL Operator 集群进行备份和恢复。 -add the secret file +## 配置backup + +### 1. 添加 secret 文件 ```yaml kind: Secret apiVersion: v1 @@ -25,15 +35,18 @@ data: type: Opaque ``` -s3-xxxx value is encode by base64, you can get like that -```shell -echo -n "hello"|base64 +s3-xxxx 值用 base64 编码,注意不要把换行符编码进去, 可以用如下命令获取base64编码: +``` +echo -n "替换为您的S3-XXX值"|base64 ``` -then, create the secret in k8s. +随后, 用如下命令创建备份secret: + ``` kubectl create -f config/samples/backup_secret.yaml ``` -Please add the backupSecretName in mysql_v1alpha1_mysqlcluster.yaml, name as secret file: +### 2. 将 secret 配置到 Operator 集群 +将备份secret名称添加到mysql_v1alpha1_mysqlcluster.yaml中, 本例中名称为sample-backup-secret: + ```yaml spec: replicas: 3 @@ -56,72 +69,36 @@ spec: ``` | name | function | |------|--------| -|hostName|pod name in cluser| -|clusterName|cluster name| +|hostName| 集群中Pod的名称 | +|clusterName| 数据库集群名称 | -### start cluster -```shell -kubectl apply -f config/samples/mysql_v1alpha1_mysqlcluster.yaml -``` -### start backup -After run cluster success +## 启动备份 +启动集群后,才可以进行备份操作 ```shell kubectl apply -f config/samples/mysql_v1alpha1_backup.yaml ``` - -## Uninstall - -Uninstall the cluster named `sample`: - -```shell -kubectl delete mysqlclusters.mysql.radondb.com sample -``` - -Uninstall the operator name `test`: - -```shell -helm uninstall test -kubectl delete -f config/samples/mysql_v1alpha1_backup.yaml +执行成功后, 可以通过如下命令查看备份状况 ``` - -Uninstall the crd: - -```shell -kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com +kubectl get backups.mysql.radondb.com +NAME BACKUPNAME BACKUPDATE TYPE +backup-sample sample_2022526155115 2022-05-26T15:51:15 S3 ``` +## 从备份副本恢复到新集群 +检查您的 s3 bucket, 得到您需要的备份文件夹如 `sample_2022526155115`. +添加 RestoreFrom 字段到 mysql_v1alpha1_backup.yaml 中, 如下: -## restore cluster from backup copy -check your s3 bucket, get the directory where your backup to, such as `backup_2021720827`. -add it to RestoreFrom in yaml file ```yaml ... spec: replicas: 3 mysqlVersion: "5.7" backupSecretName: sample-backup-secret - restoreFrom: "backup_2021720827" + restoreFrom: "sample_2022526155115" ... ``` -Then you use: +随后, 启动集群, 将会从备份文件夹中恢复数据库.: ```shell kubectl apply -f config/samples/mysql_v1alpha1_mysqlcluster.yaml ``` -could restore a cluster from the `backup_2021720827 ` copy in the S3 bucket. - - - ## build your own image - such as : - ``` - docker build -f Dockerfile.sidecar -t acekingke/sidecar:0.1 . && docker push acekingke/sidecar:0.1 - docker build -t acekingke/controller:0.1 . && docker push acekingke/controller:0.1 - ``` - you can replace acekingke/sidecar:0.1 with your own tag - - ## deploy your own manager -```shell -make manifests -make install -make deploy IMG=acekingke/controller:0.1 KUSTOMIZE=~/radondb-mysql-kubernetes/bin/kustomize -``` diff --git a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md b/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md index d7cd48ba..8ec07632 100644 --- a/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md +++ b/docs/zh-cn/deploy_radondb-mysql_operator_on_k8s_offline.md @@ -1,4 +1,5 @@ Contents +============= - [在 Kubernetes 上离线部署 RadonDB MySQL 集群](#在-kubernetes-上离线部署-radondb-mysql-集群) - [简介](#简介) @@ -36,16 +37,16 @@ RadonDB MySQL 支持在 Kubernetes 上安装部署和管理,自动执行与运 ### 步骤 1: 准备部署资源 -```shell -## 下载离线部署资源 -wget https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/radondb-mysql-resources.tar.gz +#### 下载离线部署资源 +从docker hub 下载镜像`radondb/mysql-operator, radondb/mysql57-sidecar, radondb/mysql80-sidercar,percona/percona-server:5.7.34, percona/percona-server:8.0.25`, 放入到各个worker节点 + -## 解压 -tar -xvzf radondb-mysql-resources.tar.gz +#### 导入镜像(需要在每个运行数据库的 worker 上执行) -## 导入镜像(需要在每个运行数据库的 worker 上执行) -ls radondb-mysql-resources/images/*.tar|awk '{print $NF}'|sed -r 's#(.*)#sudo docker load -i \1#' |bash ``` +docker load -i XXXX +``` +将XXXX 替换为以上下载的镜像文件名 ### 步骤 2: 部署 Operator @@ -57,7 +58,7 @@ helm install demo radondb-mysql-resources/operator-chart . > **说明** > -> 在这一步骤中默认将同时创建集群所需的 [CRD](https://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/)。 +> 在这一步骤中默认将同时创建集群所需的 CRD 从[relese](https://github.com/radondb/radondb-mysql-kubernetes/releases) 找对应版本. ### 步骤 3: 部署 RadonDB MySQL 集群 diff --git a/docs/zh-cn/rebuild.md b/docs/zh-cn/rebuild.md index 3a813615..d7ed8ea6 100644 --- a/docs/zh-cn/rebuild.md +++ b/docs/zh-cn/rebuild.md @@ -1,14 +1,14 @@ -# Why need rebuild ? -RadonDB cluster is semisynchronous replication mysql cluster. Because MySQL Semisynchronous Replication, It has a chance that the slave has more data than master, So when the xenon check it, It will lable the pod INVALID. When it happend, You -need rebuild the INVALID pod. +# 为什么需要 rebuild ? -# How to use ? -Before you want to rebuild the pod, you need to manually check the security and consistency of the cluster. +RadonDB 集群是一种半同步的MySQL复制集群, 由于半同步复制存在机会使得slave的数据更新量比master多, 因此当xenon检查到INVALID pod时, 需要重新构建INVALID pod. + +# 如何使用 ? +在执行 rebuild 之前, 请手动检查集群数据是否一致, 并且确认 rebuild 动作是安全的 ```shell ./hack/rebuild.sh PODNAME ``` -**for example** +**例子** ```shell ./hack/rebuild.sh sample-mysql-2 ``` \ No newline at end of file diff --git a/docs/zh-cn/setup-rw-svc.md b/docs/zh-cn/setup-rw-svc.md deleted file mode 100644 index c7c54cc4..00000000 --- a/docs/zh-cn/setup-rw-svc.md +++ /dev/null @@ -1,91 +0,0 @@ -Contents -================= - - * [setup service for client to read/write](#setup-service-for-client-to-readwrite) - * [1. Get the pod about leader](#1-get-the-pod-about-leader) - * [2. Label role to the pod of the leader](#2-label-role-to-the-pod-of-the-leader) - * [3. Edit the demo.yaml](#3-edit-the-demoyaml) - * [4. Apply the service](#4-apply-the-service) - * [5. Check the service](#5-check-the-service) - -# setup service for client to read/write - -## 1. Get the pod about leader - -``` -# kubectl exec -ti $pod -c xenon xenoncli raft status | jq .leader | cut -d . -f 1 | tail -c +2 -demo-krypton-1 -``` -the leader is the result: `demo-krypton-1` - -## 2. Label role to the pod of the leader -``` -# kubectl label pods $leader role=master -``` -## 3. Edit the demo.yaml -``` -# kubectl get svc $svc -oyaml > demo.yaml -``` -$svc is demo-krypton, to edit it, for example - -``` -apiVersion: v1 -kind: Service -metadata: - labels: - app: demo-krypton - name: demo-svc - namespace: default -spec: - ports: - - name: mysql - port: 3306 - protocol: TCP - targetPort: mysql - - name: metrics - port: 9104 - protocol: TCP - targetPort: metrics - selector: - app: demo-krypton - role: master - sessionAffinity: None - type: ClusterIP -``` - -## 4. Apply the service - -```# kubectl apply -f demo.yaml``` - -## 5. Check the service - -``` -# kubectl get svc -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -demo-krypton NodePort 10.96.139.75 3306:30347/TCP,9104:32430/TCP 26h -demo-svc ClusterIP 10.96.101.64 3306/TCP,9104/TCP 23h -``` - -``` -# mysql -h10.96.101.64 -P 3306 -uxxx -pxxxx -mysql: [Warning] Using a password on the command line interface can be insecure. -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 19068 -Server version: 5.7.33-36-log Percona Server (GPL), Release '36', Revision '7e403c5' - -Copyright (c) 2000, 2021, Oracle and/or its affiliates. - -Oracle is a registered trademark of Oracle Corporation and/or its -affiliates. Other names may be trademarks of their respective -owners. - -Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. - -mysql> show variables like "read_only"; -+---------------+-------+ -| Variable_name | Value | -+---------------+-------+ -| read_only | OFF | -+---------------+-------+ -1 row in set (0.02 sec) -``` diff --git a/docs/zh-cn/version1.0/_images/application.png b/docs/zh-cn/version1.0/_images/application.png deleted file mode 100644 index 7109dde7..00000000 Binary files a/docs/zh-cn/version1.0/_images/application.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/appstore.png b/docs/zh-cn/version1.0/_images/appstore.png deleted file mode 100644 index f9ed9571..00000000 Binary files a/docs/zh-cn/version1.0/_images/appstore.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/appstore_radondb_mysql.png b/docs/zh-cn/version1.0/_images/appstore_radondb_mysql.png deleted file mode 100644 index d95b61a4..00000000 Binary files a/docs/zh-cn/version1.0/_images/appstore_radondb_mysql.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/config_vnet.png b/docs/zh-cn/version1.0/_images/config_vnet.png deleted file mode 100644 index e2be155a..00000000 Binary files a/docs/zh-cn/version1.0/_images/config_vnet.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/deploy_confirm.png b/docs/zh-cn/version1.0/_images/deploy_confirm.png deleted file mode 100644 index 545227a1..00000000 Binary files a/docs/zh-cn/version1.0/_images/deploy_confirm.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/deploy_radondb_mysql.png b/docs/zh-cn/version1.0/_images/deploy_radondb_mysql.png deleted file mode 100644 index 27e1040b..00000000 Binary files a/docs/zh-cn/version1.0/_images/deploy_radondb_mysql.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/deploy_success.png b/docs/zh-cn/version1.0/_images/deploy_success.png deleted file mode 100644 index 7eba8c75..00000000 Binary files a/docs/zh-cn/version1.0/_images/deploy_success.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/loadbalancer.png b/docs/zh-cn/version1.0/_images/loadbalancer.png deleted file mode 100644 index 3dd4598a..00000000 Binary files a/docs/zh-cn/version1.0/_images/loadbalancer.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/loadbalancer_port.png b/docs/zh-cn/version1.0/_images/loadbalancer_port.png deleted file mode 100644 index 3688b4fc..00000000 Binary files a/docs/zh-cn/version1.0/_images/loadbalancer_port.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/node_port.png b/docs/zh-cn/version1.0/_images/node_port.png deleted file mode 100644 index ec824ded..00000000 Binary files a/docs/zh-cn/version1.0/_images/node_port.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/nodeport.png b/docs/zh-cn/version1.0/_images/nodeport.png deleted file mode 100644 index 65343248..00000000 Binary files a/docs/zh-cn/version1.0/_images/nodeport.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/running.png b/docs/zh-cn/version1.0/_images/running.png deleted file mode 100644 index c3af24f6..00000000 Binary files a/docs/zh-cn/version1.0/_images/running.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/_images/service.png b/docs/zh-cn/version1.0/_images/service.png deleted file mode 100644 index 2727bf9f..00000000 Binary files a/docs/zh-cn/version1.0/_images/service.png and /dev/null differ diff --git a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubernetes.md b/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubernetes.md deleted file mode 100644 index 20748fe7..00000000 --- a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubernetes.md +++ /dev/null @@ -1,331 +0,0 @@ -Contents -================= - - * [在 Kubernetes 上部署 RadonDB MySQL 集群](#在-kubernetes-上部署-radondb-mysql-集群) - * [简介](#简介) - * [部署准备](#部署准备) - * [部署步骤](#部署步骤) - * [通过 Git 部署](#通过-git-部署) - * [步骤 1:克隆 RadonDB MySQL Chart](#步骤-1克隆-radondb-mysql-chart) - * [步骤 2:部署](#步骤-2部署) - * [通过 repo 部署](#通过-repo-部署) - * [步骤 1 : 添加仓库](#步骤-1--添加仓库) - * [步骤 2 : 部署](#步骤-2--部署) - * [部署校验](#部署校验) - * [访问 RadonDB MySQL](#访问-radondb-mysql) - * [配置](#配置) - * [持久化](#持久化) - * [自定义 MYSQL 配置](#自定义-mysql-配置) - -# 在 Kubernetes 上部署 RadonDB MySQL 集群 - -## 简介 - -RadonDB MySQL 是基于 MySQL 的开源、高可用、云原生集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。 - -本教程演示如何使用命令行在 Kubernetes 上部署 RadonDB MySQL。 - -## 部署准备 - -- 已成功部署 Kubernetes 集群。 - -## 部署步骤 - -### 通过 Git 部署 - -#### 步骤 1:克隆 RadonDB MySQL Chart - -执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。 - -```bash -$ 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 v3 - $ cd charts/helm - $ helm install demo . - ``` - -* **指定参数部署方式** - - 在 `helm install` 时使用 `--set key=value[,key=value]` ,可指定参数部署。 - - 以下示例以创建一个用户名为 `my-user` ,密码为 `my-password` 的标准数据库用户,可访问名为 `my-database` 的数据库。 - - ```bash - $ cd charts/helm - $ helm install demo \ - --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database . - ``` - -* **配置 yaml 参数方式** - - 执行如下命令,可通过 value.yaml 配置文件,在安装时配置指定参数。更多安装过程中可配置的参数,请参考 [配置](#配置) 。 - - ```bash - $ cd charts/helm - $ helm install demo -f values.yaml . - ``` - -### 通过 repo 部署 - -#### 步骤 1 : 添加仓库 - -添加并更新 helm 仓库。 - -```bash -$ helm repo add test https://charts.kubesphere.io/test -$ helm repo update -``` - -#### 步骤 2 : 部署 - -以下命令指定 release 名为 `demo`,将创建一个名为 `demo-radondb-mysql` 的有状态副本集。 - -```bash -$ helm install demo test/radondb-mysql -NAME: demo -LAST DEPLOYED: Wed Apr 28 08:08:15 2021 -NAMESPACE: default -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through: - - .demo-radondb-mysql - -To connect to your database: - -1. Get mysql user `radondb`s password: - - kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo - -2. Run an Ubuntu pod that you can use as a client: - - kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il - -3. Install the mysql client: - - apt-get update && apt-get install mysql-client -y - -4. To connect to leader service in the Ubuntu pod: - - mysql -h demo-radondb-mysql-leader -u radondb -p - -5. To connect to follower service (read-only) in the Ubuntu pod: - - mysql -h demo-radondb-mysql-follower -u radondb -p -``` - -分别执行如下指令,查看到 `release` 名为 `demo` 的有状态副本集 `demo-radondb-mysql`,则 RadonDB MySQL 部署成功。 - -```bash -$ helm list -NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION -demo default 1 2021-04-28 08:08:15.828384203 +0000 UTC deployed radondb-mysql-1.0.0 5.7.34 - -$ kubectl get statefulset -NAME READY AGE -demo-radondb-mysql 3/3 25h -``` - -### 部署校验 - -部署指令执行完成后,查看 RadonDB MySQL 有状态副本集,pod 状态及服务。可查看到相关信息,则 RadonDB MySQL 部署成功。 - -```bash -$ kubectl get statefulset,pod,svc -``` - -## 访问 RadonDB MySQL - -> **注意** -> -> 准备可用于连接 MySQL 的客户端。 -> -> 使用外网客户端连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。 - -- 当客户端的与数据库部署在不同 Kubernetes 集群,请参考 [Kubernetes 访问集群中的应用程序](https://kubernetes.io/zh/docs/tasks/access-application-cluster/),配置端口转发、负载均衡等连接方式。 - -- 在 Kubernetes 集群内,支持选择使用 `service_name` 或者 `cluster_IP` 方式访问 RadonDB MySQL。 - - > **说明** - > - > RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点(读写),follower 服务始终指向从节点(只读)。 - -以下为客户端与数据库在同一 Kubernetes 集群内,访问 RadonDB MySQL 的方式。 - -### `service_name` 方式 - -* 连接 leader 服务(RadonDB MySQL 主节点) - - ```shell - $ mysql -h . -u -p - ``` - - 用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下: - - ```shell - $ mysql -h sample-leader.default -u radondb_usr -p - ``` - -* 连接 follower 服务(RadonDB MySQL 从节点) - - ```shell - $ mysql -h . -u -p - ``` - - 用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下: - - ```shell - $ mysql -h sample-follower.default -u radondb_usr -p - ``` - -### `clusterIP` 方式 - -RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`,高可用只读 IP 指向 follower 服务的 `clusterIP`。 - -```shell -$ mysql -h -P -u -p -``` - -以下示例用户名为 `radondb_usr`, leader 服务的 clusterIP 为 `10.10.128.136` ,连接示例如下: - -```shell -$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p -``` - -## 配置 - -下表列出了 RadonDB MySQL Chart 的配置参数及对应的默认值。 - -| 参数 | 描述 | 默认值 | -| -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| `imagePullPolicy` | 镜像拉取策略 | `IfNotPresent` | -| `fullnameOverride` | 自定义全名覆盖 | | -| `nameOverride` | 自定义名称覆盖 | | -| `replicaCount` | Pod 数目 | `3` | -| `busybox.image` | `busybox` 镜像库地址 | `busybox` | -| `busybox.tag` | `busybox` 镜像标签 | `1.32` | -| `mysql.image` | `mysql` 镜像库地址 | `radondb/percona` | -| `mysql.tag` | `mysql` 镜像标签 | `5.7.34` | -| `mysql.allowEmptyRootPassword` | 如果为 `true`,允许 root 账号密码为空 | `true` | -| `mysql.mysqlRootPassword` | `root` 用户密码 | | -| `mysql.mysqlReplicationPassword` | `radondb_repl` 用户密码 | `Repl_123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlUser` | 新建用户的用户名 | `radondb` | -| `mysql.mysqlPassword` | 新建用户的密码 | `RadonDB@123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlDatabase` | 将要创建的数据库名 | `radondb` | -| `mysql.initTokudb` | 安装 tokudb 引擎 | `false` | -| `mysql.args` | 要传递到 mysql 容器的其他参数 | `[]` | -| `mysql.configFiles.node.cnf` | Mysql 配置文件 | 详见 `values.yaml` | -| `mysql.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `mysql.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `mysql.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `mysql.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `mysql.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `mysql.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `mysql.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `mysql.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `mysql.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `mysql.resources` | `MySQL` 的资源请求/限制 | 内存: `256Mi`, CPU: `100m` | -| `xenon.image` | `xenon` 镜像库地址 | `radondb/xenon` | -| `xenon.tag` | `xenon` 镜像标签 | `1.1.5-alpha` | -| `xenon.args` | 要传递到 xenon 容器的其他参数 | `[]` | -| `xenon.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `xenon.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `xenon.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `xenon.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `xenon.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `xenon.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `xenon.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `xenon.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `xenon.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `xenon.resources` | `xenon` 的资源请求/限制 | 内存: `128Mi`, CPU: `50m` | -| `metrics.enabled` | 以 side-car 模式开启 Prometheus Exporter | `true` | -| `metrics.image` | Exporter 镜像地址 | `prom/mysqld-exporter` | -| `metrics.tag` | Exporter 标签 | `v0.12.1` | -| `metrics.annotations` | Exporter 注释 | `{}` | -| `metrics.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 15 | -| `metrics.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `metrics.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 5 | -| `metrics.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `metrics.serviceMonitor.enabled` | 若设置为 `true`, 将为 Prometheus operator 创建 ServiceMonitor | `true` | -| `metrics.serviceMonitor.namespace` | 创建 ServiceMonitor 时,可指定命名空间 | `nil` | -| `metrics.serviceMonitor.interval` | 数据采集间隔,若未指定,将使用 Prometheus 默认设置 | 10s | -| `metrics.serviceMonitor.scrapeTimeout` | 数据采集超时时间,若未指定,将使用 Prometheus 默认设置 | `nil` | -| `metrics.serviceMonitor.selector` | 默认为 kube-prometheus | `{ prometheus: kube-prometheus }` | -| `slowLogTail` | 若设置为 `true`,将启动一个容器用来查看 mysql-slow.log | `true` | -| `resources` | 资源 请求/限制 | 内存: `32Mi`, CPU: `10m` | -| `service.annotations` | Kubernetes 服务注释 | {} | -| `service.type` | Kubernetes 服务类型 | NodePort | -| `service.loadBalancerIP` | 服务负载均衡器 IP | `""` | -| `service.nodePort` | 服务节点端口 | `""` | -| `service.clusterIP` | 服务集群 IP | `""` | -| `service.port` | 服务端口 | `3306` | -| `rbac.create` | 若为 true,将创建和使用 RBAC 资源 | `true` | -| `serviceAccount.create` | 指定是否创建 ServiceAccount | `true` | -| `serviceAccount.name` | ServiceAccount 的名称 | | -| `persistence.enabled` | 创建一个卷存储数据 | true | -| `persistence.size` | PVC 容量 | 10Gi | -| `persistence.storageClass` | PVC 类型 | nil | -| `persistence.accessMode` | 访问模式 | ReadWriteOnce | -| `persistence.annotations` | PV 注解 | {} | -| `priorityClassName` | 设置 Pod 的 priorityClassName | `{}` | -| `schedulerName` | Kubernetes scheduler 名称(不包括默认) | `nil` | -| `statefulsetAnnotations` | StatefulSet 注释 | `{}` | -| `podAnnotations` | Pod 注释 map | `{}` | -| `podLabels` | Pod 标签 map | `{}` | - -## 持久化 - -[MySQL](https://hub.docker.com/repository/docker/radondb/percona) 镜像在容器路径 `/var/lib/mysql` 中存储 MYSQL 数据和配置。 - -默认情况下,会创建一个 PersistentVolumeClaim 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 `values.yaml` 禁用持久化,改用 emptyDir。 - -> *"当 Pod 分配给节点时,将首先创建一个 emptyDir 卷,只要该 Pod 在该节点上运行,该卷便存在。 当 Pod 从节点中删除时,emptyDir 中的数据将被永久删除."* - -> **注意** -> -> PersistentVolumeClaim 中可以使用不同特性的 PersistentVolume,其 IO 性能会影响数据库的初始化性能。所以当使用 PersistentVolumeClaim 启用持久化存储时,可能需要调整 `livenessProbe.initialDelaySeconds` 的值。 -> -> 数据库初始化的默认限制是60秒 (l`ivenessProbe.initialDelaySeconds` + `livenessProbe.periodSeconds` * `livenessProbe.failureThreshold`)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。 - -## 自定义 MYSQL 配置 - -在 `mysql.configFiles` 中添加/更改 MySQL 配置。 - -```yaml - configFiles: - node.cnf: | - [mysqld] - default_storage_engine=InnoDB - max_connections=65535 - - # custom mysql configuration. - expire_logs_days=7 -``` diff --git a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere.md b/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere.md deleted file mode 100644 index 024d1f63..00000000 --- a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere.md +++ /dev/null @@ -1,300 +0,0 @@ -Contents -================= - - * [在 KubeSphere 上通过 Git 部署 RadonDB MySQL 集群](#在-kubesphere-上通过-git-部署-radondb-mysql-集群) - * [简介](#简介) - * [部署准备](#部署准备) - * [安装 KubeSphere](#安装-kubesphere) - * [创建 KubeSphere 多租户系统](#创建-kubesphere-多租户系统) - * [连接 KubeSphere 客户端节点](#连接-kubesphere-客户端节点) - * [部署步骤](#部署步骤) - * [步骤 1:克隆 RadonDB MySQL Chart](#步骤-1克隆-radondb-mysql-chart) - * [步骤 2:部署](#步骤-2部署) - * [步骤 3:部署校验](#步骤-3部署校验) - * [访问 RadonDB MySQL](#访问-radondb-mysql) - * [开启服务网络访问](#开启服务网络访问) - * [连接节点](#连接节点) - * [配置](#配置) - * [持久化](#持久化) - * [自定义 MYSQL 配置](#自定义-mysql-配置) - -# 在 KubeSphere 上通过 Git 部署 RadonDB MySQL 集群 - -## 简介 - -RadonDB MySQL 是基于 MySQL 的开源、高可用、云原生集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。 - -本教程演示如何在 KubeSphere 上通过 Git 部署 RadonDB MySQL 集群。 - -您还可以通过如下方式在 KubeSphere 上部署 RadonDB MySQL 集群: - -- [在 KubeSphere 上通过 Helm Repo 部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere_repo.md) -- [在 KubeSphere 上通过 应用商店 部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere_appstore.md) - -## 部署准备 - -### 安装 KubeSphere - -可选择如下安装方式: - -- [在青云 AppCenter](https://appcenter.qingcloud.com/apps/app-cmgbd5k2) 上安装 KubeSphere。 - -- [在 Kubernetes 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-kubernetes/)。 - -- [在 Linux 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-linux/)。 - -### 创建 KubeSphere 多租户系统 - -参考 KubeSphere 官方文档:[创建企业空间、项目、帐户和角色](https://kubesphere.io/zh/docs/quick-start/create-workspace-and-project/)。 - -### 连接 KubeSphere 客户端节点 - -通过[青云管理控制台](https://console.qingcloud.com/) 直接连接客户端节点。 - -- 默认 root 用户密码为 KubeSphere 集群 ID。 - -- 通过第三方 SSH 工具连接客户端节点,需要在配置参数中填写 KubeSphere 的 `用户 SSH 公钥` 参数。 - -## 部署步骤 - -### 步骤 1:克隆 RadonDB MySQL Chart - -在 KubeSphere 客户端节点执行如下命令,将 RadonDB MySQL Chart 克隆到 KubeSphere 客户端节点中。 - - ```bash - 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 目录路径下,选择如下方式,部署 RadonDB MySQL 实例。 - -> release 是运行在 Kubernetes 集群中的 Chart 的实例。 - -* **默认部署方式** - - 以下命令指定 release 名为 `demo`,将创建一个名为 `demo-radondb-mysql` 的有状态副本集。 - - ```bash - - cd charts/helm - helm install . demo - - - cd charts/helm - helm install demo . - ``` - -* **指定参数部署方式** - - 在 `helm install` 时使用 `--set key=value[,key=value]` ,可指定参数部署。 - - 以下示例将创建一个用户名为 `my-user` ,密码为 `my-password` 的标准数据库用户,可访问名为 `my-database` 的数据库。 - - ```bash - cd charts/helm - helm install demo \ - --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database . - ``` - - > 更多安装过程中可配置的参数,请参考 [配置](#配置) 。 - -* **配置 yaml 参数方式** - - 执行如下命令,可通过 value.yaml 配置文件,在安装时配置指定参数。 - - ```bash - cd charts/helm - helm install demo -f values.yaml . - ``` - -### 步骤 3:部署校验 - -在**项目管理**管理中心,选择 **应用负载 > 工作负载**,并选择**有状态副本集**页签,可查看到名为 `demo-radondb-mysql` 的副本集,则 RadonDB MySQL 集群已成功部署。 - -![控制台部署成功](_images/deploy_success.png) - -## 访问 RadonDB MySQL - -您需准备一个用于连接 RadonDB MySQL 的客户端。 - -> **注意** -> -> 建议通过使用在同一 VPC 下主机或 VPN 服务来访问 RadonDB MySQL。不要通过端口转发的方式将服务暴露到公网,避免对数据库服务造成重大影响! - -### 开启服务网络访问 - -1. 在 **项目管理** 界面中,选择 **应用负载** > **服务**,查看当前项目中的服务列表。 - - ![服务](_images/service.png) - - -2. 进入需要开启外网访问的服务中,选择 **更多操作** > **编辑外网访问**。 - - ![编辑外网访问](_images/config_vnet.png) - - - **NodePort 方式** - - 选择 NodePort。 - - ![nodeport](_images/nodeport.png) - - 点击确定自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群IP/节点IP和此端口访问服务。 - - ![节点端口](_images/node_port.png) - - - **Loadbalancer 方式** - - 选择 LoadBalancer。 - - ![负载均衡](_images/loadbalancer.png) - - Loadbalancer 方式的负载均衡器由第三方提供,以使用[青云负载均衡](https://docsv3.qingcloud.com/network/loadbalancer/)为示例。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids` 参数中填写可用的 EIP ID,系统会自动为 EIP 创建负载均衡器和对应的监听器。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-type` 参数中填写负载均衡器承载能力类型,详细参数说明请参考 [CreateLoadBalancer](https://docsv3.qingcloud.com/development_docs/api/command_list/lb/create_loadbalancer/)。 - - 点击**确定**自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群 IP /节点 IP 和此端口访问服务。 - - ![负载均衡端口](_images/loadbalancer_port.png) - -### 连接节点 - -使用如下命令连接节点。 - - ```bash - mysql -h <访问 IP> -u <用户名> -P <访问端口> -p - ``` - -当客户端与 RadonDB MySQL 集群在同一个项目中时,可使用 leader/follower service 名称代替具体的 ip 和端口。 - -- 连接主节点(读写节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -- 连接从节点(只读节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -> 使用外网主机连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。 - -## 配置 - -下表列出了 RadonDB MySQL Chart 的配置参数及对应的默认值。 - -| 参数 | 描述 | 默认值 | -| -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| `imagePullPolicy` | 镜像拉取策略 | `IfNotPresent` | -| `fullnameOverride` | 自定义全名覆盖 | | -| `nameOverride` | 自定义名称覆盖 | | -| `replicaCount` | Pod 数目 | `3` | -| `busybox.image` | `busybox` 镜像库地址 | `busybox` | -| `busybox.tag` | `busybox` 镜像标签 | `1.32` | -| `mysql.image` | `mysql` 镜像库地址 | `radondb/percona` | -| `mysql.tag` | `mysql` 镜像标签 | `5.7.34` | -| `mysql.allowEmptyRootPassword` | 如果为 `true`,允许 root 账号密码为空 | `true` | -| `mysql.mysqlRootPassword` | `root` 用户密码 | | -| `mysql.mysqlReplicationPassword` | `radondb_repl` 用户密码 | `Repl_123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlUser` | 新建用户的用户名 | `radondb` | -| `mysql.mysqlPassword` | 新建用户的密码 | `RadonDB@123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlDatabase` | 将要创建的数据库名 | `radondb` | -| `mysql.initTokudb` | 安装 tokudb 引擎 | `false` | -| `mysql.args` | 要传递到 mysql 容器的其他参数 | `[]` | -| `mysql.configFiles.node.cnf` | Mysql 配置文件 | 详见 `values.yaml` | -| `mysql.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `mysql.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `mysql.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `mysql.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `mysql.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `mysql.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `mysql.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `mysql.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `mysql.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `mysql.resources` | `MySQL` 的资源请求/限制 | 内存: `256Mi`, CPU: `100m` | -| `xenon.image` | `xenon` 镜像库地址 | `radondb/xenon` | -| `xenon.tag` | `xenon` 镜像标签 | `1.1.5-alpha` | -| `xenon.args` | 要传递到 xenon 容器的其他参数 | `[]` | -| `xenon.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `xenon.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `xenon.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `xenon.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `xenon.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `xenon.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `xenon.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `xenon.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `xenon.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `xenon.resources` | `xenon` 的资源请求/限制 | 内存: `128Mi`, CPU: `50m` | -| `metrics.enabled` | 以 side-car 模式开启 Prometheus Exporter | `true` | -| `metrics.image` | Exporter 镜像地址 | `prom/mysqld-exporter` | -| `metrics.tag` | Exporter 标签 | `v0.12.1` | -| `metrics.annotations` | Exporter 注释 | `{}` | -| `metrics.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 15 | -| `metrics.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `metrics.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 5 | -| `metrics.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `metrics.serviceMonitor.enabled` | 若设置为 `true`, 将为 Prometheus operator 创建 ServiceMonitor | `true` | -| `metrics.serviceMonitor.namespace` | 创建 ServiceMonitor 时,可指定命名空间 | `nil` | -| `metrics.serviceMonitor.interval` | 数据采集间隔,若未指定,将使用 Prometheus 默认设置 | 10s | -| `metrics.serviceMonitor.scrapeTimeout` | 数据采集超时时间,若未指定,将使用 Prometheus 默认设置 | `nil` | -| `metrics.serviceMonitor.selector` | 默认为 kube-prometheus | `{ prometheus: kube-prometheus }` | -| `slowLogTail` | 若设置为 `true`,将启动一个容器用来查看 mysql-slow.log | `true` | -| `resources` | 资源 请求/限制 | 内存: `32Mi`, CPU: `10m` | -| `service.annotations` | Kubernetes 服务注释 | {} | -| `service.type` | Kubernetes 服务类型 | NodePort | -| `service.loadBalancerIP` | 服务负载均衡器 IP | `""` | -| `service.nodePort` | 服务节点端口 | `""` | -| `service.clusterIP` | 服务集群 IP | `""` | -| `service.port` | 服务端口 | `3306` | -| `rbac.create` | 若为 true,将创建和使用 RBAC 资源 | `true` | -| `serviceAccount.create` | 指定是否创建 ServiceAccount | `true` | -| `serviceAccount.name` | ServiceAccount 的名称 | | -| `persistence.enabled` | 创建一个卷存储数据 | true | -| `persistence.size` | PVC 容量 | 10Gi | -| `persistence.storageClass` | PVC 类型 | nil | -| `persistence.accessMode` | 访问模式 | ReadWriteOnce | -| `persistence.annotations` | PV 注解 | {} | -| `priorityClassName` | 设置 Pod 的 priorityClassName | `{}` | -| `schedulerName` | Kubernetes scheduler 名称(不包括默认) | `nil` | -| `statefulsetAnnotations` | StatefulSet 注释 | `{}` | -| `podAnnotations` | Pod 注释 map | `{}` | -| `podLabels` | Pod 标签 map | `{}` | - -## 持久化 - -[MySQL](https://hub.docker.com/repository/docker/radondb/percona) 镜像在容器路径 `/var/lib/mysql` 中存储 MYSQL 数据和配置。 - -默认情况下,会创建一个 PersistentVolumeClaim 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 `values.yaml` 禁用持久化,改用 emptyDir。 - -*"当 Pod 分配给节点时,将首先创建一个 emptyDir 卷,只要该 Pod 在该节点上运行,该卷便存在。 当 Pod 从节点中删除时,emptyDir 中的数据将被永久删除."* - -> **注意** -> -> PersistentVolumeClaim 中可以使用不同特性的 PersistentVolume,其 IO 性能会影响数据库的初始化性能。所以当使用 PersistentVolumeClaim 启用持久化存储时,可能需要调整 `livenessProbe.initialDelaySeconds` 的值。 -> -> 数据库初始化的默认限制是60秒 (l`ivenessProbe.initialDelaySeconds` + `livenessProbe.periodSeconds` * `livenessProbe.failureThreshold`)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。 - -## 自定义 MYSQL 配置 - -在 `mysql.configFiles` 中添加/更改 MySQL 配置。 - -```yaml - configFiles: - node.cnf: | - [mysqld] - default_storage_engine=InnoDB - max_connections=65535 - - # custom mysql configuration. - expire_logs_days=7 -``` diff --git a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_appstore.md b/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_appstore.md deleted file mode 100644 index e3c32585..00000000 --- a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_appstore.md +++ /dev/null @@ -1,253 +0,0 @@ -Contents -================= - - * [在 KubeSphere 上通过应用商店部署 RadonDB MySQL 集群](#在-kubesphere-上通过应用商店部署-radondb-mysql-集群) - * [简介](#简介) - * [部署准备](#部署准备) - * [安装 KubeSphere](#安装-kubesphere) - * [创建 KubeSphere 多租户系统](#创建-kubesphere-多租户系统) - * [部署步骤](#部署步骤) - * [访问 RadonDB MySQL](#访问-radondb-mysql) - * [开启服务网络访问](#开启服务网络访问) - * [连接节点](#连接节点) - * [配置](#配置) - * [持久化](#持久化) - * [自定义 MYSQL 配置](#自定义-mysql-配置) - -# 在 KubeSphere 上通过应用商店部署 RadonDB MySQL 集群 - -## 简介 - -RadonDB MySQL 是基于 MySQL 的开源、高可用、云原生集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。 - -本教程演示如何在 KubeSphere 上通过应用商店部署 RadonDB MySQL 集群。 - -您还可以通过如下方式在 KubeSphere 上部署 RadonDB MySQL 集群: - -- [在 KubeSphere 上通过 Helm Repo 部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere_repo.md) -- [在 KubeSphere 上通过 Git 部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere.md) - -## 部署准备 - -### 安装 KubeSphere - -可选择如下安装方式: - -- [在青云 AppCenter](https://appcenter.qingcloud.com/apps/app-cmgbd5k2) 上安装 KubeSphere。 - -- [在 Kubernetes 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-kubernetes/)。 - -- [在 Linux 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-linux/)。 - -### 创建 KubeSphere 多租户系统 - -参考 KubeSphere 官方文档:[创建企业空间、项目、帐户和角色](https://kubesphere.io/zh/docs/quick-start/create-workspace-and-project/)。 - -> KubeSphere 需更新到 3.1.X 及以上版本。 - -### 部署步骤 - -1. 打开 KubeSphere 控制台,在 `demo-project` 项目的**概览**页面,点击左上角的**应用商店**。 - - ![应用商店](_images/appstore.png) - -2. 找到 RadonDB MySQL,点击**应用信息**页面上的**部署**。 - - ![应用商店中的 RadonDB MySQL](_images/appstore_radondb_mysql.png) - - ![部署 RadonDB MySQL](_images/deploy_radondb_mysql..png) - -3. 设置名称并选择应用版本。请确保将 RadonDB MySQL 部署在 `demo-project` 中,点击**下一步**。 - - ![确认部署](_images/deploy_confirm.png) - -4. 在**应用配置**页面,可参考[配置](#配置)定义 RadonDB MySQL 配置参数。操作完成后,点击**部署**。 - - ![应用配置界面](_images/application.png) - -5. 稍等片刻待 RadonDB MySQL 启动并运行。 - - ![RadonDB MySQL 运行中](_images/running.png) - -## 访问 RadonDB MySQL - -您需准备一个用于连接 RadonDB MySQL 的客户端。 - -> **注意** -> -> 建议通过使用在同一 VPC 下主机或青云 VPN 服务来访问 RadonDB MySQL。不要通过端口转发的方式将服务暴露到公网,避免对数据库服务造成重大影响! - -### 开启服务网络访问 - -1. 在 **项目管理** 界面中,选择 **应用负载** > **服务**,查看当前项目中的服务列表。 - - ![服务](_images/service.png) - - -2. 进入需要开启外网访问的服务中,选择 **更多操作** > **编辑外网访问**。 - - ![编辑外网访问](_images/config_vnet.png) - - - **NodePort 方式** - - 选择 NodePort。 - - ![nodeport](_images/nodeport.png) - - 点击确定自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群IP/节点IP和此端口访问服务。 - - ![节点端口](_images/node_port.png) - - - **Loadbalancer 方式** - - 选择 LoadBalancer。 - - ![负载均衡](_images/loadbalancer.png) - - Loadbalancer 方式的负载均衡器由第三方提供,以使用[青云负载均衡](https://docsv3.qingcloud.com/network/loadbalancer/)为示例。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids` 参数中填写可用的 EIP ID,系统会自动为 EIP 创建负载均衡器和对应的监听器。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-type` 参数中填写负载均衡器承载能力类型,详细参数说明请参考 [CreateLoadBalancer](https://docsv3.qingcloud.com/development_docs/api/command_list/lb/create_loadbalancer/)。 - - 点击**确定**自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群 IP /节点 IP 和此端口访问服务。 - - ![负载均衡端口](_images/loadbalancer_port.png) - -### 连接节点 - -使用如下命令连接节点。 - - ```bash - mysql -h <访问 IP> -u <用户名> -P <访问端口> -p - ``` - -当客户端与 RadonDB MySQL 集群在同一个项目中时,可使用 leader/follower service 名称代替具体的 ip 和端口。 - -- 连接主节点(读写节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -- 连接从节点(只读节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -> 使用外网主机连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。 - -## 配置 - -下表列出了 RadonDB MySQL Chart 的配置参数及对应的默认值。 - -| 参数 | 描述 | 默认值 | -| -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| `imagePullPolicy` | 镜像拉取策略 | `IfNotPresent` | -| `fullnameOverride` | 自定义全名覆盖 | | -| `nameOverride` | 自定义名称覆盖 | | -| `replicaCount` | Pod 数目 | `3` | -| `busybox.image` | `busybox` 镜像库地址 | `busybox` | -| `busybox.tag` | `busybox` 镜像标签 | `1.32` | -| `mysql.image` | `mysql` 镜像库地址 | `radondb/percona` | -| `mysql.tag` | `mysql` 镜像标签 | `5.7.34` | -| `mysql.allowEmptyRootPassword` | 如果为 `true`,允许 root 账号密码为空 | `true` | -| `mysql.mysqlRootPassword` | `root` 用户密码 | | -| `mysql.mysqlReplicationPassword` | `radondb_repl` 用户密码 | `Repl_123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlUser` | 新建用户的用户名 | `radondb` | -| `mysql.mysqlPassword` | 新建用户的密码 | `RadonDB@123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlDatabase` | 将要创建的数据库名 | `radondb` | -| `mysql.initTokudb` | 安装 tokudb 引擎 | `false` | -| `mysql.args` | 要传递到 mysql 容器的其他参数 | `[]` | -| `mysql.configFiles.node.cnf` | Mysql 配置文件 | 详见 `values.yaml` | -| `mysql.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `mysql.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `mysql.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `mysql.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `mysql.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `mysql.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `mysql.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `mysql.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `mysql.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `mysql.resources` | `MySQL` 的资源请求/限制 | 内存: `256Mi`, CPU: `100m` | -| `xenon.image` | `xenon` 镜像库地址 | `radondb/xenon` | -| `xenon.tag` | `xenon` 镜像标签 | `1.1.5-alpha` | -| `xenon.args` | 要传递到 xenon 容器的其他参数 | `[]` | -| `xenon.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `xenon.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `xenon.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `xenon.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `xenon.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `xenon.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `xenon.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `xenon.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `xenon.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `xenon.resources` | `xenon` 的资源请求/限制 | 内存: `128Mi`, CPU: `50m` | -| `metrics.enabled` | 以 side-car 模式开启 Prometheus Exporter | `true` | -| `metrics.image` | Exporter 镜像地址 | `prom/mysqld-exporter` | -| `metrics.tag` | Exporter 标签 | `v0.12.1` | -| `metrics.annotations` | Exporter 注释 | `{}` | -| `metrics.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 15 | -| `metrics.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `metrics.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 5 | -| `metrics.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `metrics.serviceMonitor.enabled` | 若设置为 `true`, 将为 Prometheus operator 创建 ServiceMonitor | `true` | -| `metrics.serviceMonitor.namespace` | 创建 ServiceMonitor 时,可指定命名空间 | `nil` | -| `metrics.serviceMonitor.interval` | 数据采集间隔,若未指定,将使用 Prometheus 默认设置 | 10s | -| `metrics.serviceMonitor.scrapeTimeout` | 数据采集超时时间,若未指定,将使用 Prometheus 默认设置 | `nil` | -| `metrics.serviceMonitor.selector` | 默认为 kube-prometheus | `{ prometheus: kube-prometheus }` | -| `slowLogTail` | 若设置为 `true`,将启动一个容器用来查看 mysql-slow.log | `true` | -| `resources` | 资源 请求/限制 | 内存: `32Mi`, CPU: `10m` | -| `service.annotations` | Kubernetes 服务注释 | {} | -| `service.type` | Kubernetes 服务类型 | NodePort | -| `service.loadBalancerIP` | 服务负载均衡器 IP | `""` | -| `service.nodePort` | 服务节点端口 | `""` | -| `service.clusterIP` | 服务集群 IP | `""` | -| `service.port` | 服务端口 | `3306` | -| `rbac.create` | 若为 true,将创建和使用 RBAC 资源 | `true` | -| `serviceAccount.create` | 指定是否创建 ServiceAccount | `true` | -| `serviceAccount.name` | ServiceAccount 的名称 | | -| `persistence.enabled` | 创建一个卷存储数据 | true | -| `persistence.size` | PVC 容量 | 10Gi | -| `persistence.storageClass` | PVC 类型 | nil | -| `persistence.accessMode` | 访问模式 | ReadWriteOnce | -| `persistence.annotations` | PV 注解 | {} | -| `priorityClassName` | 设置 Pod 的 priorityClassName | `{}` | -| `schedulerName` | Kubernetes scheduler 名称(不包括默认) | `nil` | -| `statefulsetAnnotations` | StatefulSet 注释 | `{}` | -| `podAnnotations` | Pod 注释 map | `{}` | -| `podLabels` | Pod 标签 map | `{}` | - -## 持久化 - -[MySQL](https://hub.docker.com/repository/docker/radondb/percona) 镜像在容器路径 `/var/lib/mysql` 中存储 MYSQL 数据和配置。 - -默认情况下,会创建一个 PersistentVolumeClaim 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 `values.yaml` 禁用持久化,改用 emptyDir。 - -*"当 Pod 分配给节点时,将首先创建一个 emptyDir 卷,只要该 Pod 在该节点上运行,该卷便存在。 当 Pod 从节点中删除时,emptyDir 中的数据将被永久删除."* - -> **注意** -> -> PersistentVolumeClaim 中可以使用不同特性的 PersistentVolume,其 IO 性能会影响数据库的初始化性能。所以当使用 PersistentVolumeClaim 启用持久化存储时,可能需要调整 `livenessProbe.initialDelaySeconds` 的值。 -> -> 数据库初始化的默认限制是60秒 (l`ivenessProbe.initialDelaySeconds` + `livenessProbe.periodSeconds` * `livenessProbe.failureThreshold`)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。 - -## 自定义 MYSQL 配置 - -在 `mysql.configFiles` 中添加/更改 MySQL 配置。 - -```yaml - configFiles: - node.cnf: | - [mysqld] - default_storage_engine=InnoDB - max_connections=65535 - - # custom mysql configuration. - expire_logs_days=7 -``` diff --git a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_repo.md b/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_repo.md deleted file mode 100644 index ae41ab26..00000000 --- a/docs/zh-cn/version1.0/deploy_radondb-mysql_on_kubesphere_repo.md +++ /dev/null @@ -1,304 +0,0 @@ -Contents -================= - - * [在 KubeSphere 上通过 Helm Repo 部署 RadonDB MySQL 集群](#在-kubesphere-上通过-helm-repo-部署-radondb-mysql-集群) - * [简介](#简介) - * [部署准备](#部署准备) - * [安装 KubeSphere](#安装-kubesphere) - * [创建 KubeSphere 多租户系统](#创建-kubesphere-多租户系统) - * [连接 KubeSphere 客户端节点](#连接-kubesphere-客户端节点) - * [部署步骤](#部署步骤) - * [步骤 1 : 添加仓库](#步骤-1--添加仓库) - * [步骤 2 : 部署](#步骤-2--部署) - * [部署校验](#部署校验) - * [访问 RadonDB MySQL](#访问-radondb-mysql) - * [开启服务网络访问](#开启服务网络访问) - * [连接节点](#连接节点) - * [配置](#配置) - * [持久化](#持久化) - * [自定义 MYSQL 配置](#自定义-mysql-配置) - -# 在 KubeSphere 上通过 Helm Repo 部署 RadonDB MySQL 集群 - -## 简介 - -RadonDB MySQL 是基于 MySQL 的开源、高可用、云原生集群解决方案。通过使用 Raft 协议,RadonDB MySQL 可以快速进行故障转移,且不会丢失任何事务。 - -本教程演示如何在 KubeSphere 上通过 Helm Repo 部署 RadonDB MySQL 集群。 - -您还可以通过如下方式在 KubeSphere 上部署 RadonDB MySQL 集群: - -- [在 KubeSphere 上通过应用商店部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere_appstore.md) -- [在 KubeSphere 上通过 Git 部署 RadonDB MySQL 集群](deploy_radondb-mysql_on_kubesphere.md) - -## 部署准备 - -### 安装 KubeSphere - -可选择如下安装方式: - -- [在青云 AppCenter](https://appcenter.qingcloud.com/apps/app-cmgbd5k2) 上安装 KubeSphere。 - -- [在 Kubernetes 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-kubernetes/)。 - -- [在 Linux 上安装 KubeSphere](https://kubesphere.io/zh/docs/installing-on-linux/)。 - -### 创建 KubeSphere 多租户系统 - -参考 KubeSphere 官方文档:[创建企业空间、项目、帐户和角色](https://kubesphere.io/zh/docs/quick-start/create-workspace-and-project/)。 - -### 连接 KubeSphere 客户端节点 - -通过[青云管理控制台](https://console.qingcloud.com/) 直接连接客户端节点。 - -- 默认 root 用户密码为 KubeSphere 集群 ID。 - -- 通过第三方 SSH 工具连接客户端节点,需要在配置参数中填写 KubeSphere 的 `用户 SSH 公钥` 参数。 - -### 部署步骤 - -#### 步骤 1 : 添加仓库 - -添加并更新 helm 仓库。 - -```bash -$ helm repo add test https://charts.kubesphere.io/test -$ helm repo update -``` - -#### 步骤 2 : 部署 - -以下命令指定 release 名为 `demo`,将创建一个名为 `demo-radondb-mysql` 的有状态副本集。 - -```bash -$ helm install demo test/radondb-mysql -NAME: demo -LAST DEPLOYED: Wed Apr 28 08:08:15 2021 -NAMESPACE: default -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through: - - .demo-radondb-mysql - -To connect to your database: - -1. Get mysql user `radondb`s password: - - kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo - -2. Run an Ubuntu pod that you can use as a client: - - kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il - -3. Install the mysql client: - - apt-get update && apt-get install mysql-client -y - -4. To connect to leader service in the Ubuntu pod: - - mysql -h demo-radondb-mysql-leader -u radondb -p - -5. To connect to follower service (read-only) in the Ubuntu pod: - - mysql -h demo-radondb-mysql-follower -u radondb -p -``` - -### 部署校验 - -分别执行如下指令,查看到 `release` 名为 `demo` 的有状态副本集 `demo-radondb-mysql`,则 RadonDB MySQL 部署成功。 - -```bash -$ helm list -NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION -demo default 1 2021-04-28 08:08:15.828384203 +0000 UTC deployed radondb-mysql-1.0.0 5.7.34 - -$ kubectl get statefulset -NAME READY AGE -demo-radondb-mysql 3/3 25h -``` - -## 访问 RadonDB MySQL - -您需准备一个用于连接 RadonDB MySQL 的客户端。 - -> **注意** -> -> 建议通过使用在同一 VPC 下主机或 VPN 服务来访问 RadonDB MySQL。不要通过端口转发的方式将服务暴露到公网,避免对数据库服务造成重大影响! - -### 开启服务网络访问 - -1. 在 **项目管理** 界面中,选择 **应用负载** > **服务**,查看当前项目中的服务列表。 - - ![服务](_images/service.png) - - -2. 进入需要开启外网访问的服务中,选择 **更多操作** > **编辑外网访问**。 - - ![编辑外网访问](_images/config_vnet.png) - - - **NodePort方式** - - 选择 NodePort。 - - ![nodeport](_images/nodeport.png) - - 点击确定自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群IP/节点IP和此端口访问服务。 - - ![节点端口](_images/node_port.png) - - - **Loadbalancer方式** - - 选择 LoadBalancer。 - - ![负载均衡](_images/loadbalancer.png) - - Loadbalancer 方式的负载均衡器由第三方提供,以使用[青云负载均衡](https://docsv3.qingcloud.com/network/loadbalancer/)为示例。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids` 参数中填写可用的 EIP ID,系统会自动为 EIP 创建负载均衡器和对应的监听器。 - - 在 `service.beta.kubernetes.io/qingcloud-load-balancer-type` 参数中填写负载均衡器承载能力类型,详细参数说明请参考 [CreateLoadBalancer](https://docsv3.qingcloud.com/development_docs/api/command_list/lb/create_loadbalancer/)。 - - 点击**确定**自动生成转发端口,在 KubeSphere 集群同一网络内可通过集群 IP /节点 IP 和此端口访问服务。 - - ![负载均衡端口](_images/loadbalancer_port.png) - -### 连接节点 - -使用如下命令连接节点。 - - ```bash - mysql -h <访问 IP> -u <用户名> -P <访问端口> -p - ``` - -当客户端与 RadonDB MySQL 集群在同一个项目中时,可使用 leader/follower service 名称代替具体的 ip 和端口。 - -- 连接主节点(读写节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -- 连接从节点(只读节点)。 - - ```bash - mysql -h -u <用户名> -p - ``` - -> 使用外网主机连接可能会出现 `SSL connection error`,需要加上 `--ssl-mode=DISABLE` 参数,关闭 SSL。 - -## 配置 - -下表列出了 RadonDB MySQL Chart 的配置参数及对应的默认值。 - -| 参数 | 描述 | 默认值 | -| -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| `imagePullPolicy` | 镜像拉取策略 | `IfNotPresent` | -| `fullnameOverride` | 自定义全名覆盖 | | -| `nameOverride` | 自定义名称覆盖 | | -| `replicaCount` | Pod 数目 | `3` | -| `busybox.image` | `busybox` 镜像库地址 | `busybox` | -| `busybox.tag` | `busybox` 镜像标签 | `1.32` | -| `mysql.image` | `mysql` 镜像库地址 | `radondb/percona` | -| `mysql.tag` | `mysql` 镜像标签 | `5.7.34` | -| `mysql.allowEmptyRootPassword` | 如果为 `true`,允许 root 账号密码为空 | `true` | -| `mysql.mysqlRootPassword` | `root` 用户密码 | | -| `mysql.mysqlReplicationPassword` | `radondb_repl` 用户密码 | `Repl_123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlUser` | 新建用户的用户名 | `radondb` | -| `mysql.mysqlPassword` | 新建用户的密码 | `RadonDB@123`, 如果没有设置则随机12个字符 | -| `mysql.mysqlDatabase` | 将要创建的数据库名 | `radondb` | -| `mysql.initTokudb` | 安装 tokudb 引擎 | `false` | -| `mysql.args` | 要传递到 mysql 容器的其他参数 | `[]` | -| `mysql.configFiles.node.cnf` | Mysql 配置文件 | 详见 `values.yaml` | -| `mysql.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `mysql.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `mysql.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `mysql.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `mysql.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `mysql.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `mysql.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `mysql.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `mysql.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `mysql.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `mysql.resources` | `MySQL` 的资源请求/限制 | 内存: `256Mi`, CPU: `100m` | -| `xenon.image` | `xenon` 镜像库地址 | `radondb/xenon` | -| `xenon.tag` | `xenon` 镜像标签 | `1.1.5-alpha` | -| `xenon.args` | 要传递到 xenon 容器的其他参数 | `[]` | -| `xenon.extraEnvVars` | 其他作为字符串传递给 `tpl` 函数的环境变量 | | -| `xenon.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 30 | -| `xenon.livenessProbe.periodSeconds` | 存活检查的间隔时间 | 10 | -| `xenon.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `xenon.livenessProbe.successThreshold` | 存活探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.livenessProbe.failureThreshold` | 存活探测失败的重试次数,重试一定次数后将认为容器不健康 | 3 | -| `xenon.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 10 | -| `xenon.readinessProbe.periodSeconds` | 就绪检查的间隔时间 | 10 | -| `xenon.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `xenon.readinessProbe.successThreshold` | 就绪探针检测失败后认为成功的最小连接成功次数 | 1 | -| `xenon.readinessProbe.failureThreshold` | 就绪探测失败的重试次数,重试一定次数后将认为容器未就绪 | 3 | -| `xenon.resources` | `xenon` 的资源请求/限制 | 内存: `128Mi`, CPU: `50m` | -| `metrics.enabled` | 以 side-car 模式开启 Prometheus Exporter | `true` | -| `metrics.image` | Exporter 镜像地址 | `prom/mysqld-exporter` | -| `metrics.tag` | Exporter 标签 | `v0.12.1` | -| `metrics.annotations` | Exporter 注释 | `{}` | -| `metrics.livenessProbe.initialDelaySeconds` | Pod 启动后首次进行存活检查的等待时间 | 15 | -| `metrics.livenessProbe.timeoutSeconds` | 存活探针执行检测请求后,等待响应的超时时间 | 5 | -| `metrics.readinessProbe.initialDelaySeconds` | Pod 启动后首次进行就绪检查的等待时间 | 5 | -| `metrics.readinessProbe.timeoutSeconds` | 就绪探针执行检测请求后,等待响应的超时时间 | 1 | -| `metrics.serviceMonitor.enabled` | 若设置为 `true`, 将为 Prometheus operator 创建 ServiceMonitor | `true` | -| `metrics.serviceMonitor.namespace` | 创建 ServiceMonitor 时,可指定命名空间 | `nil` | -| `metrics.serviceMonitor.interval` | 数据采集间隔,若未指定,将使用 Prometheus 默认设置 | 10s | -| `metrics.serviceMonitor.scrapeTimeout` | 数据采集超时时间,若未指定,将使用 Prometheus 默认设置 | `nil` | -| `metrics.serviceMonitor.selector` | 默认为 kube-prometheus | `{ prometheus: kube-prometheus }` | -| `slowLogTail` | 若设置为 `true`,将启动一个容器用来查看 mysql-slow.log | `true` | -| `resources` | 资源 请求/限制 | 内存: `32Mi`, CPU: `10m` | -| `service.annotations` | Kubernetes 服务注释 | {} | -| `service.type` | Kubernetes 服务类型 | NodePort | -| `service.loadBalancerIP` | 服务负载均衡器 IP | `""` | -| `service.nodePort` | 服务节点端口 | `""` | -| `service.clusterIP` | 服务集群 IP | `""` | -| `service.port` | 服务端口 | `3306` | -| `rbac.create` | 若为 true,将创建和使用 RBAC 资源 | `true` | -| `serviceAccount.create` | 指定是否创建 ServiceAccount | `true` | -| `serviceAccount.name` | ServiceAccount 的名称 | | -| `persistence.enabled` | 创建一个卷存储数据 | true | -| `persistence.size` | PVC 容量 | 10Gi | -| `persistence.storageClass` | PVC 类型 | nil | -| `persistence.accessMode` | 访问模式 | ReadWriteOnce | -| `persistence.annotations` | PV 注解 | {} | -| `priorityClassName` | 设置 Pod 的 priorityClassName | `{}` | -| `schedulerName` | Kubernetes scheduler 名称(不包括默认) | `nil` | -| `statefulsetAnnotations` | StatefulSet 注释 | `{}` | -| `podAnnotations` | Pod 注释 map | `{}` | -| `podLabels` | Pod 标签 map | `{}` | - -## 持久化 - -[MySQL](https://hub.docker.com/repository/docker/radondb/percona) 镜像在容器路径 `/var/lib/mysql` 中存储 MYSQL 数据和配置。 - -默认情况下,会创建一个 PersistentVolumeClaim 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 `values.yaml` 禁用持久化,改用 emptyDir。 - -*"当 Pod 分配给节点时,将首先创建一个 emptyDir 卷,只要该 Pod 在该节点上运行,该卷便存在。 当 Pod 从节点中删除时,emptyDir 中的数据将被永久删除."* - -> **注意** -> -> PersistentVolumeClaim 中可以使用不同特性的 PersistentVolume,其 IO 性能会影响数据库的初始化性能。所以当使用 PersistentVolumeClaim 启用持久化存储时,可能需要调整 `livenessProbe.initialDelaySeconds` 的值。 -> -> 数据库初始化的默认限制是60秒 (l`ivenessProbe.initialDelaySeconds` + `livenessProbe.periodSeconds` * `livenessProbe.failureThreshold`)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。 - -## 自定义 MYSQL 配置 - -在 `mysql.configFiles` 中添加/更改 MySQL 配置。 - -```yaml - configFiles: - node.cnf: | - [mysqld] - default_storage_engine=InnoDB - max_connections=65535 - - # custom mysql configuration. - expire_logs_days=7 -```