In the rapidly evolving world of technology, database management remains a crucial, albeit challenging, aspect for many organizations. Percona, a leading provider of open-source database solutions, comes with its latest product, which is now in its beta phase: Percona Everest. This post aims to shed light on what Percona Everest is, how it works, and its potential impact on database management.
What is this tool? What is Percona Everest?
Percona has long been recognized for contributing to the open-source community, offering enhanced versions of MySQL, MongoDB, and Postgres. Solutions, including Percona Xtrabackup, Percona Monitoring and Management(PMM), and Percona Toolkit, have aided database administrators (DBAs) by providing alternatives to proprietary solutions, thereby preventing vendor lock-in.
The newest addition to Percona’s suite of tools, Percona Everest, aims to redefine the use and management of databases. Built on the foundation of Percona Operators, Everest simplifies the database lifecycle, encompassing provisioning, configuration, and management, with an overarching goal of saving time and resources traditionally dedicated to database management or Database as a Service (DBaaS) offerings.
Getting Started with Percona Everest
The initial step towards using Percona Everest involves setting up a Kubernetes cluster, a process supported on both Google Kubernetes Engine (GKE) and Amazon Elastic Kubernetes Service (EKS). For illustration, this post details the process of using GKE and the Everest client running on a MacOS Sonoma with Apple silicon, beginning with the use of the gcloud
CLI and proceeding to the Kubernetes cluster creation.
The first step is to create the Kubernetes cluster in GKE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ gcloud container clusters create \ > --machine-type n1-standard-4 \ > --num-nodes 3 \ > --zone us-central1-b \ > --cluster-version latest vinnie1-k8s Default change: VPC-native is the default mode during cluster creation for versions greater than 1.21.0-gke.1500. To create advanced routes based clusters, please pass the `--no-enable-ip-alias` flag Default change: During creation of nodepools or autoscaling configuration changes for cluster versions greater than 1.24.1-gke.800 a default location policy is applied. For Spot and PVM it defaults to ANY, and for all other VM kinds a BALANCED policy is used. To change the default values use the `--location-policy` flag. Note: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s). Creating cluster vinnie1-k8s in us-central1-b... Cluster is being health-checked (master is healthy)...done. Created [https://container.googleapis.com/v1/projects/support-211414/zones/us-central1-b/clusters/vinnie1-k8s]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-b/vinnie1-k8s?project=support-211414 kubeconfig entry generated for vinnie1-k8s. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS vinnie1-k8s us-central1-b 1.29.0-gke.1381000 34.136.183.215 n1-standard-4 1.29.0-gke.1381000 3 RUNNING |
Using Percona Everest
With the installation complete, the focus shifts to installing the Everest client. It is simple as we need only to download the binary (and the documentation already provides the commands):
1 2 3 4 5 6 7 |
$ curl -sSL -o everestctl-darwin-arm64 https://github.com/percona/percona-everest-cli/releases/latest/download/everestctl-darwin-arm64 $ sudo install -m 555 everestctl-darwin-arm64 /usr/local/bin/everestctl $ everestctl version ProjectName: everestctl Version: 0.8.0 FullCommit: 2fe2cb9246c8e185a91e775fdf4855511def411a |
With the client installed, we will perform the installation of the Percona Operators:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
$ everestctl install ? Namespaces managed by Everest (comma separated) default ? What operators do you want to install? MySQL, MongoDB, PostgreSQL 2024-02-28T23:36:56Z info install/install.go:430 Installing Operator Lifecycle Manager {"component": "install"} 2024-02-28T23:37:25Z info install/install.go:435 OLM has been installed {"component": "install"} 2024-02-28T23:37:25Z info install/install.go:436 Installing Percona OLM Catalog {"component": "install"} 2024-02-28T23:38:09Z info install/install.go:441 Percona OLM Catalog has been installed {"component": "install"} 2024-02-28T23:38:09Z info install/install.go:419 Creating namespace everest-monitoring {"component": "install"} 2024-02-28T23:38:10Z info install/install.go:425 Namespace everest-monitoring has been created {"component": "install"} 2024-02-28T23:38:10Z info install/install.go:238 Preparing k8s cluster for monitoring {"component": "install", "action": "monitoring"} 2024-02-28T23:38:10Z info install/install.go:208 Creating operator group for everest {"component": "install"} 2024-02-28T23:38:10Z info install/install.go:212 Installing victoriametrics-operator operator {"component": "install"} 2024-02-28T23:38:36Z info install/install.go:228 victoriametrics-operator operator has been installed {"component": "install"} 2024-02-28T23:38:48Z info install/install.go:246 K8s cluster monitoring has been provisioned successfully {"component": "install", "action": "monitoring"} 2024-02-28T23:38:48Z info install/install.go:419 Creating namespace default {"component": "install"} 2024-02-28T23:38:49Z info install/install.go:425 Namespace default has been created {"component": "install"} 2024-02-28T23:38:49Z info install/install.go:311 Installing operators into default namespace {"component": "install"} 2024-02-28T23:38:49Z info install/install.go:478 Installing percona-xtradb-cluster-operator operator {"component": "install"} 2024-02-28T23:39:10Z info install/install.go:520 percona-xtradb-cluster-operator operator has been installed {"component": "install"} 2024-02-28T23:39:10Z info install/install.go:478 Installing percona-server-mongodb-operator operator {"component": "install"} 2024-02-28T23:39:38Z info install/install.go:520 percona-server-mongodb-operator operator has been installed {"component": "install"} 2024-02-28T23:39:38Z info install/install.go:478 Installing percona-postgresql-operator operator {"component": "install"} 2024-02-28T23:40:09Z info install/install.go:520 percona-postgresql-operator operator has been installed {"component": "install"} 2024-02-28T23:40:09Z info install/install.go:315 Creating role for the Everest service account {"component": "install"} 2024-02-28T23:40:10Z info install/install.go:321 Binding role to the Everest Service account {"component": "install"} 2024-02-28T23:40:12Z info install/install.go:419 Creating namespace everest-system {"component": "install"} 2024-02-28T23:40:12Z info install/install.go:425 Namespace everest-system has been created {"component": "install"} 2024-02-28T23:40:12Z info install/install.go:255 Creating operator group for everest {"component": "install"} 2024-02-28T23:40:13Z info install/install.go:478 Installing everest-operator operator {"component": "install"} 2024-02-28T23:40:36Z info install/install.go:520 everest-operator operator has been installed {"component": "install"} 2024-02-28T23:40:36Z info install/install.go:278 Deploying Everest to everest-system {"component": "install"} 2024-02-28T23:40:53Z info install/install.go:293 Updating cluster role bindings for everest-admin {"component": "install"} 2024-02-28T23:40:54Z info install/install.go:577 Creating token for Everest {"component": "install"} 2024-02-28T23:40:55Z info install/install.go:185 Here's your authorization token for accessing the Everest UI and API: k7DcNAJyCsUFgReBJOZ4dH43G8Bc864cZ23keHckPbcTOpYK58B7MAZYHiuAHRahFONUdOXLeY4ZBws5azQLqrb1Gpxjrg6UoBQJrEg67E1dAtOH1URvlamrJ87j99C Store this token securely as you will not be able to retrieve it later. If you ever need to reset it, use the following command: everestctl token reset {"component": "install"} |
It is very important to save the token, as we will use it later in the UI interface.
With the installation done, we need to enable the port forwarding so we can use the UI interface:
1 2 3 |
$ kubectl port-forward svc/everest 8080:8080 -n everest-system Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080 |
And we open our browser using the forwarded port (8080) at localhost (http://127.0.0.1:8080/login):
With the Everest UI, we can start managing our databases and creating our first instance. I’m not going into the details of every option(maybe in another opportunity), but it is similar to deploying a DBaaS service (RDS, for example):
With all steps completed, we will see our database initializing:
And we can confirm that the pods are being installed:
1 2 3 4 5 6 7 8 9 10 11 |
$ kubectl get pods NAME READY STATUS RESTARTS AGE mysql-boring-haproxy-0 2/2 Running 0 2m59s mysql-boring-haproxy-1 2/2 Running 0 95s mysql-boring-haproxy-2 2/2 Running 0 75s mysql-boring-pxc-0 1/1 Running 0 3m mysql-boring-pxc-1 1/1 Running 0 98s mysql-boring-pxc-2 0/1 Running 0 27s percona-postgresql-operator-c5c44c589-5c6zg 1/1 Running 0 20m percona-server-mongodb-operator-668566bcbc-r5kqp 1/1 Running 5 (10m ago) 20m percona-xtradb-cluster-operator-56486d5b7d-pdrf6 1/1 Running 5 (10m ago) 21m |
Reflecting on the journey from traditional database management practices to the modern, automated approaches facilitated by technologies like Kubernetes, this evolution highlights the industry’s shift towards efficiency and simplicity. The advent of containers and the introduction of orchestration and automation by Kubernetes have been game-changers. These innovations underscore the dynamic nature of technology, where continuous change and evolution are the only constants. This fast-paced development necessitates smarter, more streamlined ways to deploy databases, aligning with the perspective shared by Jensen Huang, Nvidia’s CEO, on the transformative nature of technology and the so-called “death of coding.” Huang’s vision suggests a paradigm shift where the essence of innovation and product creation is no longer tethered to deep technical expertise in specific areas but is accessible to those with the vision and ideas.
Percona Everest is emblematic of this shift, offering a platform that democratizes database management by abstracting the complexities of traditional database administration. It empowers businesses, especially startups with limited resources, to focus on their core objectives rather than the intricacies of database and infrastructure management. By minimizing the need for specialized knowledge in database operations, Everest enables innovators and creators to reclaim their role at the forefront of product development and innovation.