title | linktitle | description | categories | keywords | toc | related | slug | ||||
---|---|---|---|---|---|---|---|---|---|---|---|
MySQL Operator |
MySQL Operator Overview |
The MySQL Kubernetes Operator manages all the necessary resources for deploying and managing a highly available MySQL cluster. |
|
|
true |
true |
getting-started |
Deploying and using the MySQL operator requires for it to have access to a Kubernetes cluster and to have installed kubectl and helm.
To deploy this controller, use the provided helm chart by running:
helm repo add presslabs https://presslabs.github.io/charts
helm install presslabs/mysql-operator --name mysql-operator
For more information about chart values see chart README. This chart will deploy the controller along with an orchestrator cluster.
NOTE: At every deploy a random password is generated for the orchestrator user. When running
helm upgrade
this will change the password on the orchestrator side but not in the clusters and
this will break the communication between orchestrator and MySQL clusters. To solve this either use
helm upgrade --reuse-values
or specify the orchestrator password. We recommend specifying the
orchestrator password.
tl;dr
kubectl apply -f https://raw.githubusercontent.com/presslabs/mysql-operator/master/examples/example-cluster-secret.yaml
kubectl apply -f https://raw.githubusercontent.com/presslabs/mysql-operator/master/examples/example-cluster.yaml
Before creating a cluster, you need a secret that contains the ROOT_PASSWORD key. An example for this secret can be found at examples/example-cluster-secret.yaml.
Create a file named example-cluster-secret.yaml
and copy into it the following YAML code:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
# root password is required to be specified
ROOT_PASSWORD: bm90LXNvLXNlY3VyZQ==
ROOT_PASSWORD
must be base64 encoded.
Now, to create a cluster you need just a simple YAML file that defines it. An example can be found at examples/example-cluster.yaml.
Create a file named example-cluster.yaml
and copy into it the following YAML code:
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
name: my-cluster
spec:
replicas: 2
secretName: my-secret
To deploy the cluster, run:
kubectl apply -f example-cluster-secret.yaml
kubectl apply -f example-cluster.yaml
For more in-depth configuration details, check these examples.
$ kubectl get mysql
NAME AGE
my-cluster 1m
$ kubectl describe mysql my-cluster
...
Status:
Ready Nodes: 2
Conditions:
Last Transition Time: 2018-03-28T10:20:23Z
Message: Cluster is ready.
Reason: statefulset ready
Status: True
Type: Ready
...
Backups are stored on object storage services like S3 or Google Cloud Storage. In order to be able to store a backup, the secret defined under backupBucketSecretName
must have the credentials to store those backups. The backups are uploaded using Rclone. The contents of the secret are used to generate a rclone.conf in docker-entrypoint.sh.
You need to specify the backupURL
for the cluster to an URL like s3://BUCKET_NAME/cluster-name/
, and a secret.
apiVersion: v1
kind: Secret
metadata:
name: my-cluster-backup-secret
type: Opaque
data:
AWS_ACCESS_KEY_ID: #
AWS_SECRET_ACCESS_KEY: #
# Optional, the AWS region to connect
# AWS_REGION: us-east1
# Optional, specify the storage class
# AWS_STORAGE_CLASS: standard
# Optional, canned ACL to use
# AWS_ACL:
# Optional, the S3 provider to use (default: AWS)
# S3_PROVIDER: AWS
# Optional, the S3 endpoint to use (for when you use a different S3_PROVIDER)
# S3_ENDPOINT:
Then run this command:
apiVersion: v1
kind: Secret
metadata:
name: my-cluster-backup-secret
type: Opaque
data:
GCS_SERVICE_ACCOUNT_JSON_KEY: #
GCS_PROJECT_ID: #
Then run this command:
kubectl apply -f example-backup-secret.yaml
GCS_SERVICE_ACCOUNT_JSON_KEY
andGCS_PROJECT_ID
must be base64 encoded.
You need to create a file named example-backup.yaml
and copy into it the following YAML code:
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlBackup
metadata:
name: my-cluster-backup
spec:
clusterName: my-cluster
Run the following command:
kubectl apply -f example-backup.yaml
You need to specify the backupURL
for the corresponding cluster to an URL like
gs://BUCKET_NAME/
and backupSecretName
. Open the file named example-cluster.yaml
and copy it into
the following YAML code:
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
name: my-cluster
spec:
replicas: 2
secretName: my-secret
backupSecretName: my-cluster-backup-secret
backupURL: gs://pl-test-mysql-operator/
Then run the following command:
kubectl apply -f example-cluster.yaml
$ kubectl get mysqlbackup
NAME AGE
my-cluster-backup 1m
my-cluster-auto-backup-20180402-1604 1d
$ kubectl describe backup my-cluster-backup
...
Status:
Completed: true
Conditions:
Last Transition Time: 2018-03-21T16:02:56Z
Message:
Reason:
Status: True
Type: Complete
...
For more information about orchestrator and how to access it go to the orchestrator section.