Percona Operator for MySQL API Documentation¶
Percona Operator for MySQL based on Percona XtraDB Cluster provides an aggregation-layer extension for the Kubernetes API . Please refer to the official Kubernetes API documentation on the API access and usage details. The following subsections describe the Percona XtraDB Cluster API provided by the Operator.
Prerequisites¶
-
Create the namespace name you will use, if not exist:
$ kubectl create namespace my-namespace-name
Trying to create an already-existing namespace will show you a self-explanatory error message. Also, you can use the
defalut
namespace.Note
In this document
default
namespace is used in all examples. Substitutedefault
with your namespace name if you use a different one. -
Prepare
# set correct API address KUBE_CLUSTER=$(kubectl config view --minify -o jsonpath='{.clusters[0].name}') API_SERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$KUBE_CLUSTER\")].cluster.server}" | sed -e 's#https://##') # create service account and get token kubectl apply --server-side -f deploy/crd.yaml -f deploy/rbac.yaml -n default KUBE_TOKEN=$(kubectl get secret $(kubectl get serviceaccount percona-xtradb-cluster-operator -o jsonpath='{.secrets[0].name}' -n default) -o jsonpath='{.data.token}' -n default | base64 --decode )
Create new Percona XtraDB Cluster¶
Description:
The command to create a new Percona XtraDB Cluster with all its resources
Kubectl Command:
$ kubectl apply -f percona-xtradb-cluster-operator/deploy/cr.yaml
URL:
https://$API_SERVER/apis/pxc.percona.com/v{{ apiversion }}/namespaces/default/perconaxtradbclusters
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPOST "https://$API_SERVER/apis/pxc.percona.com/v{{ apiversion }}/namespaces/default/perconaxtradbclusters" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer $KUBE_TOKEN" \
-d "@cluster.json"
Request Body (cluster.json):
Example
{
"apiVersion":"pxc.percona.com/v1-5-0",
"kind":"PerconaXtraDBCluster",
"metadata":{
"name":"cluster1",
"finalizers":[
"delete-pxc-pods-in-order"
]
},
"spec":{
"secretsName":"my-cluster-secrets",
"vaultSecretName":"keyring-secret-vault",
"sslSecretName":"my-cluster-ssl",
"sslInternalSecretName":"my-cluster-ssl-internal",
"allowUnsafeConfigurations":true,
"pxc":{
"size":3,
"image":"percona/percona-xtradb-cluster:8.0.19-10.1",
"resources":{
"requests":null
},
"affinity":{
"antiAffinityTopologyKey":"none"
},
"podDisruptionBudget":{
"maxUnavailable":1
},
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
},
"gracePeriod":600
},
"proxysql":{
"enabled":true,
"size":3,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-proxysql",
"resources":{
"requests":null
},
"affinity":{
"antiAffinityTopologyKey":"none"
},
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"2Gi"
}
}
}
},
"podDisruptionBudget":{
"maxUnavailable":1
},
"gracePeriod":30
},
"pmm":{
"enabled":false,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pmm",
"serverHost":"monitoring-service",
"serverUser":"pmm"
},
"backup":{
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup",
"serviceAccountName":"percona-xtradb-cluster-operator",
"storages":{
"s3-us-west":{
"type":"s3",
"s3":{
"bucket":"S3-BACKUP-BUCKET-NAME-HERE",
"credentialsSecret":"my-cluster-name-backup-s3",
"region":"us-west-2"
}
},
"fs-pvc":{
"type":"filesystem",
"volume":{
"persistentVolumeClaim":{
"accessModes":[
"ReadWriteOnce"
],
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
}
},
"schedule":[
{
"name":"sat-night-backup",
"schedule":"0 0 * * 6",
"keep":3,
"storageName":"s3-us-west"
},
{
"name":"daily-backup",
"schedule":"0 0 * * *",
"keep":5,
"storageName":"fs-pvc"
}
]
}
}
}
Inputs:
Metadata:
Name (String, min-length: 1) :
contains name of cluster
Finalizers (list of string, Default: [ “delete-pxc-pods-in-order” ])
contains steps to do when deleting the cluster
Spec:
secretsName (String, min-length: 1) :
contains name of secret to create for the cluster
vaultSecretName (String, min-length: 1) :
contains name of vault secret to create for the cluster
sslInternalSecretName (String, min-length: 1) :
contains name of ssl secret to create for the cluster
allowUnsafeConfigurations (Boolean, Default: false) :
allow unsafe configurations to run
pxc:
Size (Int , min-value: 1, default, 3) :
number of Percona XtraDB Cluster nodes to create
Image (String, min-length: 1) :
contains image name to use for Percona XtraDB Cluster nodes
volumeSpec : storage (SizeString, default: “6Gi”) :
contains the size for the storage volume of Percona XtraDB Cluster nodes
gracePeriod (Int, default: 600, min-value: 0 ) :
contains the time to wait for Percona XtraDB Cluster node to shutdown in milliseconds
proxysql:
- Enabled (Boolean, default: true) :
enabled or disables proxysql
pmm:
serverHost (String, min-length: 1) :
serivce name for monitoring
serverUser (String, min-length: 1) :
name of pmm user
image (String, min-length: 1) :
name of pmm image
backup:
Storages (Object) :
contains the storage destinations to save the backups in
schedule:
name (String, min-length: 1) :
name of backup job
schedule (String, Cron format:
"\* \* \* \* \*"
) :contains cron schedule format for when to run cron jobs
keep (Int, min-value = 1) :
number of backups to keep
storageName (String, min-length: 1) :
name of storage object to use
Response:
Example
{
"apiVersion":"pxc.percona.com/v1-5-0",
"kind":"PerconaXtraDBCluster",
"metadata":{
"creationTimestamp":"2020-05-27T22:23:58Z",
"finalizers":[
"delete-pxc-pods-in-order"
],
"generation":1,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1-5-0",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:finalizers":{
}
},
"f:spec":{
".":{
},
"f:allowUnsafeConfigurations":{
},
"f:backup":{
".":{
},
"f:image":{
},
"f:schedule":{
},
"f:serviceAccountName":{
},
"f:storages":{
".":{
},
"f:fs-pvc":{
".":{
},
"f:type":{
},
"f:volume":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:accessModes":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:s3-us-west":{
".":{
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
},
"f:region":{
}
},
"f:type":{
}
}
}
},
"f:pmm":{
".":{
},
"f:enabled":{
},
"f:image":{
},
"f:serverHost":{
},
"f:serverUser":{
}
},
"f:proxysql":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:enabled":{
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
".":{
},
"f:requests":{
}
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:pxc":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
".":{
},
"f:requests":{
}
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:secretsName":{
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-05-27T22:23:58Z"
}
],
"name":"cluster1",
"namespace":"default",
"resourceVersion":"8694",
"selfLink":"/apis/pxc.percona.com/v1-5-0/namespaces/default/perconaxtradbclusters/cluster1",
"uid":"e9115e2a-49df-4ebf-9dab-fa5a550208d3"
},
"spec":{
"allowUnsafeConfigurations":false,
"backup":{
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup",
"schedule":[
{
"keep":3,
"name":"sat-night-backup",
"schedule":"0 0 * * 6",
"storageName":"s3-us-west"
},
{
"keep":5,
"name":"daily-backup",
"schedule":"0 0 * * *",
"storageName":"fs-pvc"
}
],
"serviceAccountName":"percona-xtradb-cluster-operator",
"storages":{
"fs-pvc":{
"type":"filesystem",
"volume":{
"persistentVolumeClaim":{
"accessModes":[
"ReadWriteOnce"
],
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"s3-us-west":{
"s3":{
"bucket":"S3-BACKUP-BUCKET-NAME-HERE",
"credentialsSecret":"my-cluster-name-backup-s3",
"region":"us-west-2"
},
"type":"s3"
}
}
},
"pmm":{
"enabled":false,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pmm",
"serverHost":"monitoring-service",
"serverUser":"pmm"
},
"proxysql":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"enabled":true,
"gracePeriod":30,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-proxysql",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"2Gi"
}
}
}
}
},
"pxc":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"gracePeriod":600,
"image":"percona/percona-xtradb-cluster:8.0.19-10.1",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"secretsName":"my-cluster-secrets",
"sslInternalSecretName":"my-cluster-ssl-internal",
"sslSecretName":"my-cluster-ssl",
"vaultSecretName":"keyring-secret-vault"
}
}
List Percona XtraDB Clusters¶
Description:
Lists all Percona XtraDB Clusters that exist in your kubernetes cluster
Kubectl Command:
$ kubectl get pxc
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters?limit=500
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XGET "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters?limit=500" \
-H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" \
-H "Authorization: Bearer $KUBE_TOKEN"
Request Body:
None
Response:
Example
{
"kind":"Table",
"apiVersion":"meta.k8s.io/v1",
"metadata":{
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters",
"resourceVersion":"10528"
},
"columnDefinitions":[
{
"name":"Name",
"type":"string",
"format":"name",
"description":"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names",
"priority":0
},
{
"name":"Endpoint",
"type":"string",
"format":"",
"description":"Custom resource definition column (in JSONPath format): .status.host",
"priority":0
},
{
"name":"Status",
"type":"string",
"format":"",
"description":"Custom resource definition column (in JSONPath format): .status.state",
"priority":0
},
{
"name":"PXC",
"type":"string",
"format":"",
"description":"Ready pxc nodes",
"priority":0
},
{
"name":"proxysql",
"type":"string",
"format":"",
"description":"Ready pxc nodes",
"priority":0
},
{
"name":"Age",
"type":"date",
"format":"",
"description":"Custom resource definition column (in JSONPath format): .metadata.creationTimestamp",
"priority":0
}
],
"rows":[
{
"cells":[
"cluster1",
"cluster1-proxysql.default",
"ready",
"3",
"3",
"8m37s"
],
"object":{
"kind":"PartialObjectMetadata",
"apiVersion":"meta.k8s.io/v1",
"metadata":{
"name":"cluster1",
"namespace":"default",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1",
"uid":"e9115e2a-49df-4ebf-9dab-fa5a550208d3",
"resourceVersion":"10517",
"generation":1,
"creationTimestamp":"2020-05-27T22:23:58Z",
"finalizers":[
"delete-pxc-pods-in-order"
],
"managedFields":[
{
"manager":"kubectl",
"operation":"Update",
"apiVersion":"pxc.percona.com/v1-5-0",
"time":"2020-05-27T22:23:58Z",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:finalizers":{
}
},
"f:spec":{
".":{
},
"f:allowUnsafeConfigurations":{
},
"f:backup":{
".":{
},
"f:image":{
},
"f:schedule":{
},
"f:serviceAccountName":{
},
"f:storages":{
".":{
},
"f:fs-pvc":{
".":{
},
"f:type":{
},
"f:volume":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:accessModes":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:s3-us-west":{
".":{
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
},
"f:region":{
}
},
"f:type":{
}
}
}
},
"f:pmm":{
".":{
},
"f:image":{
},
"f:serverHost":{
},
"f:serverUser":{
}
},
"f:proxysql":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:enabled":{
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:pxc":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:secretsName":{
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
}
}
}
},
{
"manager":"percona-xtradb-cluster-operator",
"operation":"Update",
"apiVersion":"pxc.percona.com/v1",
"time":"2020-05-27T22:32:31Z",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:backup":{
"f:storages":{
"f:fs-pvc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
}
}
},
"f:s3-us-west":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
}
}
}
},
"f:pmm":{
"f:resources":{
}
},
"f:proxysql":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
},
"f:pxc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
}
},
"f:status":{
".":{
},
"f:conditions":{
},
"f:host":{
},
"f:observedGeneration":{
},
"f:proxysql":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:pxc":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:state":{
}
}
}
}
]
}
}
}
]
}
Get status of Percona XtraDB Cluster¶
Description:
Gets all information about the specified Percona XtraDB Cluster
Kubectl Command:
$ kubectl get pxc/cluster1 -o json
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XGET "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1" \
-H "Accept: application/json" \
-H "Authorization: Bearer $KUBE_TOKEN"
Request Body:
None
Response:
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBCluster",
"metadata":{
"annotations":{
"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"pxc.percona.com/v1\",\"kind\":\"PerconaXtraDBCluster\",\"metadata\":{\"annotations\":{},\"creationTimestamp\":\"2020-05-27T22:23:58Z\",\"finalizers\":[\"delete-pxc-pods-in-order\"],\"generation\":1,\"managedFields\":[{\"apiVersion\":\"pxc.percona.com/v1-5-0\",\"fieldsType\":\"FieldsV1\",\"fieldsV1\":{\"f:metadata\":{\"f:finalizers\":{}},\"f:spec\":{\".\":{},\"f:allowUnsafeConfigurations\":{},\"f:backup\":{\".\":{},\"f:image\":{},\"f:schedule\":{},\"f:serviceAccountName\":{},\"f:storages\":{\".\":{},\"f:fs-pvc\":{\".\":{},\"f:type\":{},\"f:volume\":{\".\":{},\"f:persistentVolumeClaim\":{\".\":{},\"f:accessModes\":{},\"f:resources\":{\".\":{},\"f:requests\":{\".\":{},\"f:storage\":{}}}}}},\"f:s3-us-west\":{\".\":{},\"f:s3\":{\".\":{},\"f:bucket\":{},\"f:credentialsSecret\":{},\"f:region\":{}},\"f:type\":{}}}},\"f:pmm\":{\".\":{},\"f:image\":{},\"f:serverHost\":{},\"f:serverUser\":{}},\"f:proxysql\":{\".\":{},\"f:affinity\":{\".\":{},\"f:antiAffinityTopologyKey\":{}},\"f:enabled\":{},\"f:gracePeriod\":{},\"f:image\":{},\"f:podDisruptionBudget\":{\".\":{},\"f:maxUnavailable\":{}},\"f:resources\":{},\"f:size\":{},\"f:volumeSpec\":{\".\":{},\"f:persistentVolumeClaim\":{\".\":{},\"f:resources\":{\".\":{},\"f:requests\":{\".\":{},\"f:storage\":{}}}}}},\"f:pxc\":{\".\":{},\"f:affinity\":{\".\":{},\"f:antiAffinityTopologyKey\":{}},\"f:gracePeriod\":{},\"f:image\":{},\"f:podDisruptionBudget\":{\".\":{},\"f:maxUnavailable\":{}},\"f:resources\":{},\"f:size\":{},\"f:volumeSpec\":{\".\":{},\"f:persistentVolumeClaim\":{\".\":{},\"f:resources\":{\".\":{},\"f:requests\":{\".\":{},\"f:storage\":{}}}}}},\"f:secretsName\":{},\"f:sslInternalSecretName\":{},\"f:sslSecretName\":{},\"f:vaultSecretName\":{}}},\"manager\":\"kubectl\",\"operation\":\"Update\",\"time\":\"2020-05-27T22:23:58Z\"},{\"apiVersion\":\"pxc.percona.com/v1\",\"fieldsType\":\"FieldsV1\",\"fieldsV1\":{\"f:spec\":{\"f:backup\":{\"f:storages\":{\"f:fs-pvc\":{\"f:podSecurityContext\":{\".\":{},\"f:fsGroup\":{},\"f:supplementalGroups\":{}},\"f:s3\":{\".\":{},\"f:bucket\":{},\"f:credentialsSecret\":{}}},\"f:s3-us-west\":{\"f:podSecurityContext\":{\".\":{},\"f:fsGroup\":{},\"f:supplementalGroups\":{}}}}},\"f:pmm\":{\"f:resources\":{}},\"f:proxysql\":{\"f:podSecurityContext\":{\".\":{},\"f:fsGroup\":{},\"f:supplementalGroups\":{}},\"f:sslInternalSecretName\":{},\"f:sslSecretName\":{},\"f:volumeSpec\":{\"f:persistentVolumeClaim\":{\"f:accessModes\":{}}}},\"f:pxc\":{\"f:podSecurityContext\":{\".\":{},\"f:fsGroup\":{},\"f:supplementalGroups\":{}},\"f:sslInternalSecretName\":{},\"f:sslSecretName\":{},\"f:vaultSecretName\":{},\"f:volumeSpec\":{\"f:persistentVolumeClaim\":{\"f:accessModes\":{}}}}},\"f:status\":{\".\":{},\"f:conditions\":{},\"f:host\":{},\"f:observedGeneration\":{},\"f:proxysql\":{\".\":{},\"f:ready\":{},\"f:size\":{},\"f:status\":{}},\"f:pxc\":{\".\":{},\"f:ready\":{},\"f:size\":{},\"f:status\":{}},\"f:state\":{}}},\"manager\":\"percona-xtradb-cluster-operator\",\"operation\":\"Update\",\"time\":\"2020-05-27T23:06:47Z\"}],\"name\":\"cluster1\",\"namespace\":\"default\",\"resourceVersion\":\"15878\",\"selfLink\":\"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1\",\"uid\":\"e9115e2a-49df-4ebf-9dab-fa5a550208d3\"},\"spec\":{\"allowUnsafeConfigurations\":true,\"backup\":{\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-debug-backup\",\"schedule\":[{\"keep\":3,\"name\":\"sat-night-backup\",\"schedule\":\"0 0 * * 6\",\"storageName\":\"s3-us-west\"},{\"keep\":5,\"name\":\"daily-backup\",\"schedule\":\"0 0 * * *\",\"storageName\":\"fs-pvc\"}],\"serviceAccountName\":\"percona-xtradb-cluster-operator\",\"storages\":{\"fs-pvc\":{\"type\":\"filesystem\",\"volume\":{\"persistentVolumeClaim\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"s3-us-west\":{\"s3\":{\"bucket\":\"S3-BACKUP-BUCKET-NAME-HERE\",\"credentialsSecret\":\"my-cluster-name-backup-s3\",\"region\":\"us-west-2\"},\"type\":\"s3\"}}},\"pmm\":{\"enabled\":false,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pmm\",\"serverHost\":\"monitoring-service\",\"serverUser\":\"pmm\"},\"proxysql\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"enabled\":true,\"gracePeriod\":30,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-proxysql\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":5,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"2Gi\"}}}}},\"pxc\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"gracePeriod\":600,\"image\":\"percona/percona-xtradb-cluster:8.0.19-10.1\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":5,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"secretsName\":\"my-cluster-secrets\",\"sslInternalSecretName\":\"my-cluster-ssl-internal\",\"sslSecretName\":\"my-cluster-ssl\",\"vaultSecretName\":\"keyring-secret-vault\"},\"status\":{\"conditions\":[{\"lastTransitionTime\":\"2020-05-27T22:23:58Z\",\"status\":\"True\",\"type\":\"Initializing\"},{\"lastTransitionTime\":\"2020-05-27T22:25:43Z\",\"status\":\"True\",\"type\":\"Ready\"}],\"host\":\"cluster1-proxysql.default\",\"observedGeneration\":1,\"proxysql\":{\"ready\":3,\"size\":5,\"status\":\"ready\"},\"pxc\":{\"ready\":3,\"size\":5,\"status\":\"ready\"},\"state\":\"ready\"}}\n"
},
"creationTimestamp":"2020-05-27T22:23:58Z",
"finalizers":[
"delete-pxc-pods-in-order"
],
"generation":6,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1-5-0",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:finalizers":{
}
},
"f:spec":{
".":{
},
"f:allowUnsafeConfigurations":{
},
"f:backup":{
".":{
},
"f:schedule":{
},
"f:serviceAccountName":{
},
"f:storages":{
".":{
},
"f:fs-pvc":{
".":{
},
"f:type":{
},
"f:volume":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:accessModes":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:s3-us-west":{
".":{
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
},
"f:region":{
}
},
"f:type":{
}
}
}
},
"f:pmm":{
".":{
},
"f:image":{
},
"f:serverHost":{
},
"f:serverUser":{
}
},
"f:proxysql":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:enabled":{
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:pxc":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:gracePeriod":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:secretsName":{
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-05-27T22:23:58Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:annotations":{
".":{
},
"f:kubectl.kubernetes.io/last-applied-configuration":{
}
}
},
"f:spec":{
"f:backup":{
"f:image":{
}
},
"f:proxysql":{
"f:size":{
}
},
"f:pxc":{
"f:image":{
},
"f:size":{
}
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-05-27T23:38:49Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:backup":{
"f:storages":{
"f:fs-pvc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
}
}
},
"f:s3-us-west":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
}
}
}
},
"f:pmm":{
"f:resources":{
}
},
"f:proxysql":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
},
"f:pxc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
}
},
"f:status":{
".":{
},
"f:conditions":{
},
"f:host":{
},
"f:message":{
},
"f:observedGeneration":{
},
"f:proxysql":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:pxc":{
".":{
},
"f:message":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:state":{
}
}
},
"manager":"percona-xtradb-cluster-operator",
"operation":"Update",
"time":"2020-05-28T10:42:00Z"
}
],
"name":"cluster1",
"namespace":"default",
"resourceVersion":"35660",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1",
"uid":"e9115e2a-49df-4ebf-9dab-fa5a550208d3"
},
"spec":{
"allowUnsafeConfigurations":true,
"backup":{
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-debug-backup",
"schedule":[
{
"keep":3,
"name":"sat-night-backup",
"schedule":"0 0 * * 6",
"storageName":"s3-us-west"
},
{
"keep":5,
"name":"daily-backup",
"schedule":"0 0 * * *",
"storageName":"fs-pvc"
}
],
"serviceAccountName":"percona-xtradb-cluster-operator",
"storages":{
"fs-pvc":{
"type":"filesystem",
"volume":{
"persistentVolumeClaim":{
"accessModes":[
"ReadWriteOnce"
],
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"s3-us-west":{
"s3":{
"bucket":"S3-BACKUP-BUCKET-NAME-HERE",
"credentialsSecret":"my-cluster-name-backup-s3",
"region":"us-west-2"
},
"type":"s3"
}
}
},
"pmm":{
"enabled":false,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pmm",
"serverHost":"monitoring-service",
"serverUser":"pmm"
},
"proxysql":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"enabled":true,
"gracePeriod":30,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-proxysql",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"2Gi"
}
}
}
}
},
"pxc":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"gracePeriod":600,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-debug",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"secretsName":"my-cluster-secrets",
"sslInternalSecretName":"my-cluster-ssl-internal",
"sslSecretName":"my-cluster-ssl",
"vaultSecretName":"keyring-secret-vault"
},
"status":{
"conditions":[
{
"lastTransitionTime":"2020-05-27T22:25:43Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-27T23:06:48Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-27T23:08:58Z",
"message":"ProxySQL upgrade error: context deadline exceeded",
"reason":"ErrorReconcile",
"status":"True",
"type":"Error"
},
{
"lastTransitionTime":"2020-05-27T23:08:59Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-27T23:29:59Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-27T23:30:04Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-27T23:35:27Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-27T23:35:42Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-27T23:47:00Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-27T23:47:05Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-28T09:58:25Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-28T09:58:31Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-28T10:03:54Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-28T10:04:14Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-28T10:15:28Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-28T10:15:38Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-28T10:26:56Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-28T10:27:01Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-05-28T10:38:28Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-05-28T10:38:33Z",
"status":"True",
"type":"Initializing"
}
],
"host":"cluster1-proxysql.default",
"message":[
"PXC: pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-1_default(5b9b16e6-d0f8-4c97-a2d0-294feb9d014b); pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-2_default(b8ebedd7-42f0-440b-aa5e-509d28926a5e); pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-4_default(2dce12f2-9ebc-419c-a92a-9cec68912004); "
],
"observedGeneration":6,
"proxysql":{
"ready":3,
"size":3,
"status":"ready"
},
"pxc":{
"message":"pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-1_default(5b9b16e6-d0f8-4c97-a2d0-294feb9d014b); pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-2_default(b8ebedd7-42f0-440b-aa5e-509d28926a5e); pxc: back-off 5m0s restarting failed container=pxc pod=cluster1-pxc-4_default(2dce12f2-9ebc-419c-a92a-9cec68912004); ",
"ready":2,
"size":3,
"status":"initializing"
},
"state":"initializing"
}
}
Scale up/down Percona XtraDB Cluster¶
Description:
Increase or decrease the size of the Percona XtraDB Cluster nodes to fit the
current high availability needs
Kubectl Command:
$ kubectl patch pxc cluster1 --type=merge --patch '{
"spec": {"pxc":{ "size": "5" }
}}'
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPATCH "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1" \
-H "Authorization: Bearer $KUBE_TOKEN" \
-H "Content-Type: application/merge-patch+json"
-H "Accept: application/json" \
-d '{
"spec": {"pxc":{ "size": "5" }
}}'
Request Body:
Example
{
"spec": {"pxc":{ "size": "5" }
}}
Input:
spec:
pxc
- size (Int or String, Defaults: 3):
Specifiy the size of the Percona XtraDB Cluster to scale up or down to
Response:
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBCluster",
"metadata":{
"annotations":{
"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"pxc.percona.com/v1-5-0\",\"kind\":\"PerconaXtraDBCluster\",\"metadata\":{\"annotations\":{},\"finalizers\":[\"delete-pxc-pods-in-order\"],\"name\":\"cluster1\",\"namespace\":\"default\"},\"spec\":{\"allowUnsafeConfigurations\":true,\"backup\":{\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup\",\"schedule\":[{\"keep\":3,\"name\":\"sat-night-backup\",\"schedule\":\"0 0 * * 6\",\"storageName\":\"s3-us-west\"},{\"keep\":5,\"name\":\"daily-backup\",\"schedule\":\"0 0 * * *\",\"storageName\":\"fs-pvc\"}],\"serviceAccountName\":\"percona-xtradb-cluster-operator\",\"storages\":{\"fs-pvc\":{\"type\":\"filesystem\",\"volume\":{\"persistentVolumeClaim\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"s3-us-west\":{\"s3\":{\"bucket\":\"S3-BACKUP-BUCKET-NAME-HERE\",\"credentialsSecret\":\"my-cluster-name-backup-s3\",\"region\":\"us-west-2\"},\"type\":\"s3\"}}},\"pmm\":{\"enabled\":false,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pmm\",\"serverHost\":\"monitoring-service\",\"serverUser\":\"pmm\"},\"proxysql\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"enabled\":true,\"gracePeriod\":30,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-proxysql\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":3,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"2Gi\"}}}}},\"pxc\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"gracePeriod\":600,\"image\":\"percona/percona-xtradb-cluster:8.0.19-10.1\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":3,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"secretsName\":\"my-cluster-secrets\",\"sslInternalSecretName\":\"my-cluster-ssl-internal\",\"sslSecretName\":\"my-cluster-ssl\",\"updateStrategy\":\"RollingUpdate\",\"vaultSecretName\":\"keyring-secret-vault\"}}\n"
},
"creationTimestamp":"2020-06-01T16:50:05Z",
"finalizers":[
"delete-pxc-pods-in-order"
],
"generation":4,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1-5-0",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:annotations":{
".":{
},
"f:kubectl.kubernetes.io/last-applied-configuration":{
}
},
"f:finalizers":{
}
},
"f:spec":{
".":{
},
"f:allowUnsafeConfigurations":{
},
"f:backup":{
".":{
},
"f:image":{
},
"f:schedule":{
},
"f:serviceAccountName":{
},
"f:storages":{
".":{
},
"f:fs-pvc":{
".":{
},
"f:type":{
},
"f:volume":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:accessModes":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:s3-us-west":{
".":{
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
},
"f:region":{
}
},
"f:type":{
}
}
}
},
"f:pmm":{
".":{
},
"f:image":{
},
"f:serverHost":{
},
"f:serverUser":{
}
},
"f:proxysql":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:enabled":{
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:pxc":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:gracePeriod":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:secretsName":{
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:updateStrategy":{
},
"f:vaultSecretName":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-06-01T16:52:30Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:backup":{
"f:storages":{
"f:fs-pvc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
}
}
},
"f:s3-us-west":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
}
}
}
},
"f:pmm":{
"f:resources":{
}
},
"f:proxysql":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
},
"f:pxc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
}
},
"f:status":{
".":{
},
"f:conditions":{
},
"f:host":{
},
"f:observedGeneration":{
},
"f:proxysql":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:pxc":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:state":{
}
}
},
"manager":"percona-xtradb-cluster-operator",
"operation":"Update",
"time":"2020-06-03T15:32:11Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:pxc":{
"f:image":{
},
"f:size":{
}
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-06-03T15:32:14Z"
}
],
"name":"cluster1",
"namespace":"default",
"resourceVersion":"129605",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1",
"uid":"15e5e7d6-10b2-46cf-85d0-d3fdea3412ca"
},
"spec":{
"allowUnsafeConfigurations":true,
"backup":{
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup",
"schedule":[
{
"keep":3,
"name":"sat-night-backup",
"schedule":"0 0 * * 6",
"storageName":"s3-us-west"
},
{
"keep":5,
"name":"daily-backup",
"schedule":"0 0 * * *",
"storageName":"fs-pvc"
}
],
"serviceAccountName":"percona-xtradb-cluster-operator",
"storages":{
"fs-pvc":{
"type":"filesystem",
"volume":{
"persistentVolumeClaim":{
"accessModes":[
"ReadWriteOnce"
],
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"s3-us-west":{
"s3":{
"bucket":"S3-BACKUP-BUCKET-NAME-HERE",
"credentialsSecret":"my-cluster-name-backup-s3",
"region":"us-west-2"
},
"type":"s3"
}
}
},
"pmm":{
"enabled":false,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pmm",
"serverHost":"monitoring-service",
"serverUser":"pmm"
},
"proxysql":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"enabled":true,
"gracePeriod":30,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-proxysql",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"2Gi"
}
}
}
}
},
"pxc":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"gracePeriod":600,
"image":"percona/percona-xtradb-cluster:5.7.30-31.43",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":"5",
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"secretsName":"my-cluster-secrets",
"sslInternalSecretName":"my-cluster-ssl-internal",
"sslSecretName":"my-cluster-ssl",
"updateStrategy":"RollingUpdate",
"vaultSecretName":"keyring-secret-vault"
},
"status":{
"conditions":[
{
"lastTransitionTime":"2020-06-01T16:50:37Z",
"message":"create newStatefulSetNode: StatefulSet.apps \"cluster1-pxc\" is invalid: spec.updateStrategy: Invalid value: apps.StatefulSetUpdateStrategy{Type:\"SmartUpdate\", RollingUpdate:(*apps.RollingUpdateStatefulSetStrategy)(nil)}: must be 'RollingUpdate' or 'OnDelete'",
"reason":"ErrorReconcile",
"status":"True",
"type":"Error"
},
{
"lastTransitionTime":"2020-06-01T16:52:31Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-06-01T16:55:59Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-06-01T17:19:15Z",
"status":"True",
"type":"Initializing"
}
],
"host":"cluster1-proxysql.default",
"observedGeneration":3,
"proxysql":{
"ready":3,
"size":3,
"status":"ready"
},
"pxc":{
"ready":1,
"size":3,
"status":"initializing"
},
"state":"initializing"
}
}
Update Percona XtraDB Cluster image¶
Description:
Change the image of Percona XtraDB Cluster containers inside the cluster
Kubectl Command:
$ kubectl patch pxc cluster1 --type=merge --patch '{
"spec": {"pxc":{ "image": "percona/percona-xtradb-cluster:5.7.30-31.43" }
}}'
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPATCH "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1" \
-H "Authorization: Bearer $KUBE_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/merge-patch+json"
-d '{
"spec": {"pxc":{ "image": "percona/percona-xtradb-cluster:5.7.30-31.43" }
}}'
Request Body:
Example
{
"spec": {"pxc":{ "image": "percona/percona-xtradb-cluster:5.7.30-31.43" }
}}
Input:
spec:
pxc:
- image (String, min-length: 1) :
name of the image to update for Percona XtraDB Cluster
Response:
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBCluster",
"metadata":{
"annotations":{
"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"pxc.percona.com/v1-5-0\",\"kind\":\"PerconaXtraDBCluster\",\"metadata\":{\"annotations\":{},\"finalizers\":[\"delete-pxc-pods-in-order\"],\"name\":\"cluster1\",\"namespace\":\"default\"},\"spec\":{\"allowUnsafeConfigurations\":true,\"backup\":{\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup\",\"schedule\":[{\"keep\":3,\"name\":\"sat-night-backup\",\"schedule\":\"0 0 * * 6\",\"storageName\":\"s3-us-west\"},{\"keep\":5,\"name\":\"daily-backup\",\"schedule\":\"0 0 * * *\",\"storageName\":\"fs-pvc\"}],\"serviceAccountName\":\"percona-xtradb-cluster-operator\",\"storages\":{\"fs-pvc\":{\"type\":\"filesystem\",\"volume\":{\"persistentVolumeClaim\":{\"accessModes\":[\"ReadWriteOnce\"],\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"s3-us-west\":{\"s3\":{\"bucket\":\"S3-BACKUP-BUCKET-NAME-HERE\",\"credentialsSecret\":\"my-cluster-name-backup-s3\",\"region\":\"us-west-2\"},\"type\":\"s3\"}}},\"pmm\":{\"enabled\":false,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-pmm\",\"serverHost\":\"monitoring-service\",\"serverUser\":\"pmm\"},\"proxysql\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"enabled\":true,\"gracePeriod\":30,\"image\":\"percona/percona-xtradb-cluster-operator:1.5.0-proxysql\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":3,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"2Gi\"}}}}},\"pxc\":{\"affinity\":{\"antiAffinityTopologyKey\":\"none\"},\"gracePeriod\":600,\"image\":\"percona/percona-xtradb-cluster:8.0.19-10.1\",\"podDisruptionBudget\":{\"maxUnavailable\":1},\"resources\":{\"requests\":null},\"size\":3,\"volumeSpec\":{\"persistentVolumeClaim\":{\"resources\":{\"requests\":{\"storage\":\"6Gi\"}}}}},\"secretsName\":\"my-cluster-secrets\",\"sslInternalSecretName\":\"my-cluster-ssl-internal\",\"sslSecretName\":\"my-cluster-ssl\",\"updateStrategy\":\"RollingUpdate\",\"vaultSecretName\":\"keyring-secret-vault\"}}\n"
},
"creationTimestamp":"2020-06-01T16:50:05Z",
"finalizers":[
"delete-pxc-pods-in-order"
],
"generation":3,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1-5-0",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:metadata":{
"f:annotations":{
".":{
},
"f:kubectl.kubernetes.io/last-applied-configuration":{
}
},
"f:finalizers":{
}
},
"f:spec":{
".":{
},
"f:allowUnsafeConfigurations":{
},
"f:backup":{
".":{
},
"f:image":{
},
"f:schedule":{
},
"f:serviceAccountName":{
},
"f:storages":{
".":{
},
"f:fs-pvc":{
".":{
},
"f:type":{
},
"f:volume":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:accessModes":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:s3-us-west":{
".":{
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
},
"f:region":{
}
},
"f:type":{
}
}
}
},
"f:pmm":{
".":{
},
"f:image":{
},
"f:serverHost":{
},
"f:serverUser":{
}
},
"f:proxysql":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:enabled":{
},
"f:gracePeriod":{
},
"f:image":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:pxc":{
".":{
},
"f:affinity":{
".":{
},
"f:antiAffinityTopologyKey":{
}
},
"f:gracePeriod":{
},
"f:podDisruptionBudget":{
".":{
},
"f:maxUnavailable":{
}
},
"f:resources":{
},
"f:size":{
},
"f:volumeSpec":{
".":{
},
"f:persistentVolumeClaim":{
".":{
},
"f:resources":{
".":{
},
"f:requests":{
".":{
},
"f:storage":{
}
}
}
}
}
},
"f:secretsName":{
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:updateStrategy":{
},
"f:vaultSecretName":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-06-01T16:52:30Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:pxc":{
"f:image":{
}
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-06-01T17:18:58Z"
},
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:backup":{
"f:storages":{
"f:fs-pvc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:s3":{
".":{
},
"f:bucket":{
},
"f:credentialsSecret":{
}
}
},
"f:s3-us-west":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
}
}
}
},
"f:pmm":{
"f:resources":{
}
},
"f:proxysql":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
},
"f:pxc":{
"f:podSecurityContext":{
".":{
},
"f:fsGroup":{
},
"f:supplementalGroups":{
}
},
"f:sslInternalSecretName":{
},
"f:sslSecretName":{
},
"f:vaultSecretName":{
},
"f:volumeSpec":{
"f:persistentVolumeClaim":{
"f:accessModes":{
}
}
}
}
},
"f:status":{
".":{
},
"f:conditions":{
},
"f:host":{
},
"f:message":{
},
"f:observedGeneration":{
},
"f:proxysql":{
".":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:pxc":{
".":{
},
"f:message":{
},
"f:ready":{
},
"f:size":{
},
"f:status":{
}
},
"f:state":{
}
}
},
"manager":"percona-xtradb-cluster-operator",
"operation":"Update",
"time":"2020-06-01T17:21:36Z"
}
],
"name":"cluster1",
"namespace":"default",
"resourceVersion":"41149",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusters/cluster1",
"uid":"15e5e7d6-10b2-46cf-85d0-d3fdea3412ca"
},
"spec":{
"allowUnsafeConfigurations":true,
"backup":{
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pxc8.0-backup",
"schedule":[
{
"keep":3,
"name":"sat-night-backup",
"schedule":"0 0 * * 6",
"storageName":"s3-us-west"
},
{
"keep":5,
"name":"daily-backup",
"schedule":"0 0 * * *",
"storageName":"fs-pvc"
}
],
"serviceAccountName":"percona-xtradb-cluster-operator",
"storages":{
"fs-pvc":{
"type":"filesystem",
"volume":{
"persistentVolumeClaim":{
"accessModes":[
"ReadWriteOnce"
],
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"s3-us-west":{
"s3":{
"bucket":"S3-BACKUP-BUCKET-NAME-HERE",
"credentialsSecret":"my-cluster-name-backup-s3",
"region":"us-west-2"
},
"type":"s3"
}
}
},
"pmm":{
"enabled":false,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-pmm",
"serverHost":"monitoring-service",
"serverUser":"pmm"
},
"proxysql":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"enabled":true,
"gracePeriod":30,
"image":"percona/percona-xtradb-cluster-operator:1.5.0-proxysql",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"2Gi"
}
}
}
}
},
"pxc":{
"affinity":{
"antiAffinityTopologyKey":"none"
},
"gracePeriod":600,
"image":"percona/percona-xtradb-cluster:5.7.30-31.43",
"podDisruptionBudget":{
"maxUnavailable":1
},
"resources":{
"requests":null
},
"size":3,
"volumeSpec":{
"persistentVolumeClaim":{
"resources":{
"requests":{
"storage":"6Gi"
}
}
}
}
},
"secretsName":"my-cluster-secrets",
"sslInternalSecretName":"my-cluster-ssl-internal",
"sslSecretName":"my-cluster-ssl",
"updateStrategy":"RollingUpdate",
"vaultSecretName":"keyring-secret-vault"
},
"status":{
"conditions":[
{
"lastTransitionTime":"2020-06-01T16:50:37Z",
"message":"create newStatefulSetNode: StatefulSet.apps \"cluster1-pxc\" is invalid: spec.updateStrategy: Invalid value: apps.StatefulSetUpdateStrategy{Type:\"SmartUpdate\", RollingUpdate:(*apps.RollingUpdateStatefulSetStrategy)(nil)}: must be 'RollingUpdate' or 'OnDelete'",
"reason":"ErrorReconcile",
"status":"True",
"type":"Error"
},
{
"lastTransitionTime":"2020-06-01T16:52:31Z",
"status":"True",
"type":"Initializing"
},
{
"lastTransitionTime":"2020-06-01T16:55:59Z",
"status":"True",
"type":"Ready"
},
{
"lastTransitionTime":"2020-06-01T17:19:15Z",
"status":"True",
"type":"Initializing"
}
],
"host":"cluster1-proxysql.default",
"message":[
"PXC: pxc: back-off 40s restarting failed container=pxc pod=cluster1-pxc-2_default(87cdf1a8-0fb3-4bc0-b50d-f66a0a73c087); "
],
"observedGeneration":3,
"proxysql":{
"ready":3,
"size":3,
"status":"ready"
},
"pxc":{
"message":"pxc: back-off 40s restarting failed container=pxc pod=cluster1-pxc-2_default(87cdf1a8-0fb3-4bc0-b50d-f66a0a73c087); ",
"ready":2,
"size":3,
"status":"initializing"
},
"state":"initializing"
}
}
Pass custom my.cnf during the creation of Percona XtraDB Cluster¶
Description:
Create a custom config map containing the contents of the file my.cnf to be
passed on to the Percona XtraDB Cluster containers when they are created
Kubectl Command:
$ kubectl create configmap cluster1-pxc3 --from-file=my.cnf
my.cnf (Contains mysql configuration):
[mysqld]
max_connections=250
URL:
https://$API_SERVER/api/v1/namespaces/default/configmaps
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPOST "https://$API_SERVER/api/v1/namespaces/default/configmaps" \
-H "Accept: application/json" \
-H "Authorization: Bearer $KUBE_TOKEN" \
-d '{"apiVersion":"v1","data":{"my.cnf":"[mysqld]\nmax_connections=250\n"},"kind":"ConfigMap","metadata":{"creationTimestamp":null,"name":"cluster1-pxc3"}}' \
-H "Content-Type: application/json"
Request Body:
Example
{
"apiVersion":"v1",
"data":{
"my.cnf":"[mysqld]\nmax_connections=250\n"
},
"kind":"ConfigMap",
"metadata":{
"creationTimestamp":null,
"name":"cluster1-pxc3"
}
}
Input:
data (Object {filename : contents(String, min-length:0)}):
contains filenames to create in config map and its contents
metadata: name(String, min-length: 1) :
contains name of the configmap
kind (String):
type of object to create
Response:
Example
{
"kind":"ConfigMap",
"apiVersion":"v1",
"metadata":{
"name":"cluster1-pxc3",
"namespace":"default",
"selfLink":"/api/v1/namespaces/default/configmaps/cluster1-pxc3",
"uid":"d92c7196-f399-4e20-abc7-b5de62c0691b",
"resourceVersion":"85258",
"creationTimestamp":"2020-05-28T14:19:41Z",
"managedFields":[
{
"manager":"kubectl",
"operation":"Update",
"apiVersion":"v1",
"time":"2020-05-28T14:19:41Z",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:data":{
".":{
},
"f:my.cnf":{
}
}
}
}
]
},
"data":{
"my.cnf":""
}
}
Backup Percona XtraDB Cluster¶
Description:
Takes a backup of the Percona XtraDB Cluster containers data to be able to
recover from disasters or make a roll-back later
Kubectl Command:
$ kubectl apply -f percona-xtradb-cluster-operator/deploy/backup/backup.yaml
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterbackups
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPOST "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterbackups" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "@backup.json" -H "Authorization: Bearer $KUBE_TOKEN"
Request Body (backup.json):
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBClusterBackup",
"metadata":{
"name":"backup1"
},
"spec":{
"pxcCluster":"cluster1",
"storageName":"fs-pvc"
}
}
Input:
- metadata:
name(String, min-length:1) :
name of backup to create
- spec:
1. pxcCluster(String, min-length:1) : `name of Percona XtraDB Cluster` 2. storageName(String, min-length:1) : `name of storage claim to use`
Response:
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBClusterBackup",
"metadata":{
"creationTimestamp":"2020-05-27T23:56:33Z",
"generation":1,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
".":{
},
"f:pxcCluster":{
},
"f:storageName":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-05-27T23:56:33Z"
}
],
"name":"backup1",
"namespace":"default",
"resourceVersion":"26024",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterbackups/backup1",
"uid":"95a354b1-e25b-40c3-8be4-388acca055fe"
},
"spec":{
"pxcCluster":"cluster1",
"storageName":"fs-pvc"
}
}
Restore Percona XtraDB Cluster¶
Description:
Restores Percona XtraDB Cluster data to an earlier version to recover from a
problem or to make a roll-back
Kubectl Command:
$ kubectl apply -f percona-xtradb-cluster-operator/deploy/backup/restore.yaml
URL:
https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterrestores
Authentication:
Authorization: Bearer $KUBE_TOKEN
cURL Request:
$ curl -k -v -XPOST "https://$API_SERVER/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterrestores" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "@restore.json" \
-H "Authorization: Bearer $KUBE_TOKEN"
Request Body (restore.json):
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBClusterRestore",
"metadata":{
"name":"restore1"
},
"spec":{
"pxcCluster":"cluster1",
"backupName":"backup1"
}
}
Input:
- metadata:
name(String, min-length:1):
name of restore to create
- spec:
1. pxcCluster(String, min-length:1) : `name of Percona XtraDB Cluster` 2. backupName(String, min-length:1) : `name of backup to restore from`
Response:
Example
{
"apiVersion":"pxc.percona.com/v1",
"kind":"PerconaXtraDBClusterRestore",
"metadata":{
"creationTimestamp":"2020-05-27T23:59:41Z",
"generation":1,
"managedFields":[
{
"apiVersion":"pxc.percona.com/v1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
".":{
},
"f:backupName":{
},
"f:pxcCluster":{
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2020-05-27T23:59:41Z"
}
],
"name":"restore1",
"namespace":"default",
"resourceVersion":"26682",
"selfLink":"/apis/pxc.percona.com/v1/namespaces/default/perconaxtradbclusterrestores/restore1",
"uid":"770c3471-be17-46fb-b0a6-e706685ab2fc"
},
"spec":{
"backupName":"backup1",
"pxcCluster":"cluster1"
}
}