24-May-2022

Announcing KubeDB v2022.05.24

by Md Kamol Hasan

We are pleased to announce the release of KubeDB v2022.05.24. This post lists all the major changes done in this release since the last release. This release offers some major features like MySQL Semi-Synchronous Replication, MongoDB Arbiter, PGBouncer, MariaDB Schema Manager, ProxySQL, Redesigned Redis, Elasticsearch V8, OpenSearch Dashboard, etc. It also contains various improvments and bug fixes. You can find the detailed changelogs here.

MySQL

We have added support for semi-synchronous replication. Now you will be able to provision, take backups, and establish a TLS encrypted connection in a cluster of semi-synchronous replication.

Sample MySQL YAML:

apiVersion: kubedb.com/v1alpha2
kind: MySQL
metadata:
 name: mysql
 namespace: demo
spec:
 version: "8.0.29"
 replicas: 3
 topology:
   mode: SemiSync
   semiSync:
     sourceWaitForReplicaCount: 1
     sourceTimeout: 24h
     errantTransactionRecoveryPolicy: PseudoTransaction
 storageType: Durable
 storage:
   storageClassName: "standard"
   accessModes:
     - ReadWriteOnce
   resources:
     requests:
       storage: 10Gi
 terminationPolicy: WipeOut

What’s New in MYSQL CRO?

In the spec.topology you refer to SemiSync Mode and in the spec.topology.semiSync you can refer to how many replicas, the source will wait for an acknowledgment before committing, how long the source will wait for replicas before going back to asynchronous replication, and the errant transaction recovery policy. We support two recovery policies for errant transactions that is PseudoTranscation and Clone.

spec:
 topology:
   mode: SemiSync
   semiSync:
     sourceWaitForReplicaCount: 1
     sourceTimeout: 24h
     errantTransactionRecoveryPolicy: PseudoTransaction

MySQL 8.0.29: MySQL newer version support is added. You use Stand Alone, Group Replication, Semi-sync, and Read Replica features using KubeDB.

Update Replication User Password: The replication user Password was updated to MYSQL_ROOT_PASSWORD . For the older version if you upgrade to 8.0.29 or any upper version it will be updated.

Improvement and Bug Fixes: Several improvements and bug fixes are done in the operator regarding patch and health checker.

ProxySQL

The KubeDB ProxySQL is now supporting ProxySQL-2.3.2 in the latest release.

Backend Version support: KubeDB ProxySQL allows MySQL-5 and MySQL-8 as backend from the latest release.

Custom configuration: You can now bootstrap KubeDB ProxySQL with your own custom configuration file.

Clustering: From this release, we have added the clustering feature for ProxySQL. You can create a ProxySQL cluster with 3 or more nodes. Also, failover recovery for clusters has been implemented for both partial and complete cluster failure.

TLS Configuration: KubeDB now allows you to establish TLS secured connections for both ProxySQL backend and ProxySQL frontend. Cert-manager can be used for issuing certificates.

Monitoring: All the monitoring essentials are available for KubeDB ProxySQL.

MongoDB

We have added MongoDB Arbiter support on replica-set and sharded databases. Arbiter is a special type of node which does not have a copy of the data set and cannot become a primary. It is a priority-0 member that always contains exactly 1 election vote. Thus it allows replica sets to have an uneven number of voting members without the overhead of an additional member that replicates data. So now you can provision Kubernetes-integrated MongoDB even if your cost constraints prohibit adding another secondary.

Sample MongoDB YAML:

apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
  name: mongodb
  namespace: db
spec:
  allowedSchemas:
    namespaces:
      from: All
  version: "4.4.6"
  replicaSet:
    name: "replicaset"
  replicas: 2
  arbiter:
    podTemplate:
      spec:
        resources:
          requests:
          cpu: "500m"
          memory: "400Mi"

PostgreSQL

IN this release, the Pg-Coordinator container has been improved. Now it exposes Prometheus metrics to monitor the Primary status of the pod. It also comes with various bug fixes.

PGBouncer

In this release, KubeDB-managed PGBouncer is now supporting the latest pgBouncer version 1.17.0. The new release also supports a TLS secured connection for both client and server(PostgreSQL). It also enables support for Prometheus monitoring for pgBouncer. To expand the compatibility with third-party software, we are creating an AppBinding with connection credentials so that any third-party software can communicate seamlessly with the pgBouncer. The KubeDB operator also performs a continuous health check on the PGBouncer to reflect the ready status.

apiVersion: kubedb.com/v1alpha2
kind: PgBouncer
metadata:
  name: pgbouncer-server
  namespace: pg
spec:
  version: "1.17.0"
  replicas: 3
  databases:
  - alias: "tmpdb"
    databaseName: "tmpdb"
    databaseRef:
      name: "postgres-demo"
      namespace: pg
  connectionPool:
    port: 5432
    defaultPoolSize: 20
    poolMode: session
    minPoolSize: 0
    maxClientConnections: 20
    reservePoolSize: 5
    maxDBConnections: 0
    maxUserConnections: 0
    statsPeriodSeconds: 60
    authType: md5
    adminUsers:
    - myuser
    authUser: myuser
  userListSecretRef:
    name: db-user-pass
  terminationPolicy: WipeOut

Redis

We have redesigned the KubeDB Redis operator. We have distributed responsibility across different components so that there is no single point of failure. The primary task of the KubeDB Redis operator is to provision the cluster according to the provided configuration. After the KubeDB Redis operator successfully provisions the cluster, it no longer depends on the operator. The pods of the cluster can rejoin the cluster by themselves in case of node failure or network issues. We also fixed some minor bugs in KubeDB Redis Operator.

MariaDB

For KubeDB MariaDB, better health checking has been added. KubeDB MariaDB CR now supports more accurate status conditions.

Schema Manager

We have added Multi-Tenancy support for MariaDB in this latest release. With schema-manager now you can create a database, initialize a database using a script, restore a snapshot for MariaDB as well. So, KubeDB now supports managing schemas with declarative YAML for MariaDB.

Sample MariaDBDatabase YAML:

apiVersion: schema.kubedb.com/v1alpha1
kind: MariaDBDatabase
metadata:
 name: sample-mariadb-schema
 namespace: demo
spec:
 database:
   serverRef:
     name: mariadb-server
     namespace: dev
   config:
     name: demo
     characterSet: utf8
     encryption: disable
     readOnly: 0
 vaultRef:
   name: vault
   namespace: dev
 accessPolicy:
   subjects:
     - kind: ServiceAccount
       name: "tester"
       namespace: "demo"
   defaultTTL: "10m"
 deletionPolicy: "Delete"

The given YAML will create a MariaDB database schema in the cluster which will eventually end up creating a database demo inside mariadb-server which is a KubeDB MariaDB server. The demo database will be created with characterset utf8 and encryption disabled as it is mentioned in the spec.database.configuration section. The operator will create a user and its credentials using the KubeVault and bind the permission under the subject which is mentioned in the spec.accessPolicy.subjects section. The credential and permission will be valid for 10 minutes. The time duration is mentioned in the spec.accessPolicy.defaultTTL section. After that, the schema will be expired.

Elasticsearch

In this release, We are happy to introduce the support for Elasticsearch V8. Now, you can provision and manage Elasticsearch V8 with KubeDB. New supported ElasticsearchVersion CROs are xpack-8.2.0, kubedb-xpack-8.2.0, and opensearch-1.3.2. The kubedb-xpack-8.2.0 is packed with elasticsearch:8.2.0 with pre-installed plugins: repository-s3, repository-azure, repository-hdfs, and repository-gcs.

Configure Built-In Users: KubeDB Elasticsearch CR now allows users to configure and manage Elasticsearch built-in users. Supported users are elastic , kibana_system, logstash_system, beats system, apm_system, and remote_monitoring_user. Passwords can also be customized via user-provided k8s secrets. Otherwise, the operator will create randomly generated passwords for those supported users. The k8s secrets with the user credentials can be found on the same namespace of the Elasticsearch CRO.

apiVersion: kubedb.com/v1alpha2
kind: Elasticsearch
metadata:
  name: es-cluster
  namespace: demo
spec:
  version: xpack-8.2.0
  enableSSL: true
  replicas: 3
  storage:
    storageClassName: "standard"
    resources:
      requests:
        storage: 1Gi
  internalUsers:
      kibana_system:
        secretName: kibana-system-custom-cred

Dashboard

In this release, we are expanding our support for dashboards. Now KubeDB supports OpenSearch Dashboards with ElasticsearchVersion CRO opensearch-1.1.0, opensearch-1.2.0, and opensearch-1.3.2. It also supports kibana with ElasticsearchVersion CRO xpack-8.2.0, xpack-7.17.3, xpack-7.16.2, xpack-7.13.2, xpack-7.12.0, xpack-7.9.1, and xpack-6.8.22.

What Next?

Please try the latest release and give us your valuable feedback.

  • If you want to install KubeDB, please follow the installation instruction from here.

  • If you want to upgrade KubeDB from a previous version, please follow the upgrade instruction from here.

Support

To speak with us, please leave a message on our website.

To join public discussions with the KubeDB community, join us in the Kubernetes Slack team channel #kubedb. To sign up, use our Slack inviter.

To receive product announcements, follow us on Twitter.

If you have found a bug with KubeDB or want to request for new features, please file an issue.

Get Up and Running Quickly

Deploy, manage, upgrade Kubernetes on any cloud and automate deployment, scaling, and management of containerized applications.