Deploying YDB in Managed Service for Kubernetes
- Before you start
- Install the YDB controller in the cluster
- Create a YDB cluster
- Create a database
- Test the controller
- Release the resources you don’t use
To use Kubernetes to create a cluster YDB, follow the steps below.
Before you start
Create a Kubernetes cluster.
You can use an already running Kubernetes cluster or create a new one.
Warning
Make sure that you’re using Kubernetes version 1.20 or higher.
Install the Kubernetes CLI kubectl.
Define the kubectl configuration.
Install the Kubernetes Helm 3 package manager.
Clone the repository with ydb-kubernetes-operator.
git clone https://github.com/ydb-platform/ydb-kubernetes-operator && cd ydb-kubernetes-operator
Add a repository for Yandex.Cloud to Helm:
CLI
Run the command:
helm repo add ydb https://charts.ydb.tech/
ydb
: The repository alias.https://charts.ydb.tech/
: The repository URL.
Output:
"ydb" has been added to your repositories
Update the Helm chart index:
CLI
Run the command:
helm repo update
Output:
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ydb" chart repository
Update Complete. ⎈Happy Helming!⎈
Install the YDB controller in the cluster
Install YDB in the standard configuration:
CLI
Run the command:
helm install ydb-operator ydb/operator
ydb-operator
: The release name.ydb/operator
: The name of the chart in the repository you added earlier.
Output:
NAME: ydb-operator
LAST DEPLOYED: Thu Aug 12 19:32:28 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Create a YDB cluster
Apply the manifest for creating a YDB cluster:
CLI
Run the command:
kubectl apply -f samples/storage.yaml
This command creates a StatefulSet object that describes a set of containers with stable network IDs and disks assigned to them, as well as Service and ConfigMap objects that are required for the cluster to work.
You can check the progress of YDB cluster creation using the following commands:
kubectl get storages.ydb.tech
kubectl describe storages.ydb.tech
Wait until the status of the Storage resource changes to Ready
.
Warning
The cluster configuration is static. The controller won’t process any changes when the manifest is reapplied. You can only update cluster parameters such as version or disk size by creating a new cluster.
The standard configuration includes the minimum required 9 storage nodes, 80 GB each. We recommend using disks of at least 80 GB to ensure the stable operation of YDB clusters.
Create a database
Apply the manifest for creating a database:
CLI
Run the command:
kubectl apply -f samples/minikube/database.yaml
Note
The .spec.storageClusterRef.name
key value must match the name of the storage resource of the cluster part.
After processing the manifest, a StatefulSet object that describes a set of dynamic nodes is created. The created database will be accessible from inside the Kubernetes cluster by the database-sample
DNS name or the database-sample.<namespace>.svc.cluster.local
FQDN, where namespace
indicates the namespace that the release was installed in. The database is connected to through port 2135
.
View the status of the created resource:
kubectl describe database.ydb.tech
Name: database-sample
Namespace: default
Labels: <none>
Annotations: <none>
API Version: ydb.tech/v1alpha1
Kind: Database
...
Status:
State: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Provisioning 8m10s ydb-operator Resource sync is in progress
Normal Provisioning 8m9s ydb-operator Resource sync complete
Normal TenantInitialized 8m9s ydb-operator Tenant /root/database-sample created
The database is ready to run.
Test the controller
Test how YDB works:
CLI
Check that all nodes are in the
Ready
status:kubectl get pods
NAME READY STATUS RESTARTS AGE
database-sample-0 1/1 Running 0 1m
database-sample-1 1/1 Running 0 1m
database-sample-2 1/1 Running 0 1m
database-sample-3 1/1 Running 0 1m
database-sample-4 1/1 Running 0 1m
database-sample-5 1/1 Running 0 1m
storage-sample-0 1/1 Running 0 1m
storage-sample-1 1/1 Running 0 1m
storage-sample-2 1/1 Running 0 1m
storage-sample-3 1/1 Running 0 1m
storage-sample-4 1/1 Running 0 1m
storage-sample-5 1/1 Running 0 1m
storage-sample-6 1/1 Running 0 1m
storage-sample-7 1/1 Running 0 1m
storage-sample-8 1/1 Running 0 1m
Start a new pod using the YDB CLI:
kubectl run -it --image=cr.yandex/yc/ydb:21.4.30 --rm ydb-cli bash
Query the YDB database:
ydb \
--endpoint grpc://database-sample:2135 \
--database /root/database-sample \
table query execute --query 'select 1;'
--endpoint
: Database endpoint.--database
: The name of the created database.--query
: Query text.
Output:
┌─────────┐
| column0 |
├─────────┤
| 1 |
└─────────┘
For more on YDB CLI commands, see the documentation.
Release the resources you don’t use
If you no longer need the created resources, delete them:
CLI
To delete a YDB database, just delete the
Database
resource mapped to it:kubectl delete database.ydb.tech database-sample
To delete a YDB cluster, run the following commands:
kubectl delete storage.ydb.tech storage-sample
kubectl delete pvc -l app.kubernetes.io/name=ydb
To remove the YDB controller from the Kubernetes cluster, delete the release created by Helm:
helm delete ydb-operator
ydb-operator
: The name of the release that the controller was installed under.