In this tutorial, you configure a database named DemoDB
which contains one Orders
table populated with two rows of sample data.
Step 1: Clone the Git repository
-
Go to the kyma-runtime-extension-samples repository. This repository contains a collection of Kyma sample applications which will be used during the tutorial.
-
Download the code by choosing the green Code button, and then choosing one of the options to download the code locally.
You can instead run the following command using your CLI at your desired folder location:
git clone https://github.com/SAP-samples/kyma-runtime-extension-samples
Step 2: Explore the sample
-
Open the database-mssql
directory in your desired editor.
-
Explore the content of the sample.
-
Within the app
folder you can find the configuration files for setting up the sample DemoDB
database within the Docker image.
The process includes defining the database password as well as the creation of the Orders
table with sample data.
-
Within the docker
folder you can find the Dockerfile definition. Notice how the last command references the entrypoint.sh
script defined within the app directory which is used to call the commands to configure the sample database.
-
Within the k8s
folder you can find the resource definitions that will be used to deploy the sample to the Kyma runtime. This includes the deployment.yaml
which specifies the microservice definition of the MSSQL database and also a service definition which exposes the microservice to other resources within the cluster. The pvc.yaml
specifies a persistent volume claim which is used to request a storage location for the data of the database. The secret.yaml
contains the database user and password.
Step 3: Build the Docker image
Run the following commands from the database-mssql
directory using your CLI.
Make sure to replace the value of <your-docker-id>
with your Docker account ID.
-
To build the Docker image, run this command:
docker build -t <your-docker-id>/mssql -f docker/Dockerfile .
-
To push the Docker image to your Docker repository, run this command:
docker push <your-docker-id>/mssql
Step 4: Use the Docker image locally
Make sure to replace the value of <your-docker-id>
with your Docker account ID.
-
Start the image locally by running this command:
docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 --name sql1 -d <your-docker-id>/mssql
-
Open a bash shell within the image by running this command:
docker exec -it sql1 "bash"
-
Start the sqlcmd
tool, which allows you to run queries against the database, by running this command:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P Yukon900
-
Run a sample query by running this commands:
1> USE DemoDB
2> SELECT * FROM ORDERS
3> GO
-
End the sqlcmd
session by running:
1> exit
-
End the bash session by running:
exit
-
Shutdown the Docker container by running this command:
docker stop sql1
-
Here are some additional commands that can be used:
To start the container again, run:
docker start sql1
The container can be removed by running:
docker rm sql1
Step 5: Apply resources to the Kyma runtime
You can find the resource definitions in the k8s
folder. If you performed any changes in the database configuration, these files may also need to be updated. The folder contains the following files:
secret.yaml
: defines the database password and user which is base64-encoded.
pvc.yaml
: defines a PersistentVolume
used to store the data of the database.
deployment.yaml
: defines the Deployment definition for the MSSQL database as well as a Service used for communication. This definition references both the secret.yaml
and pvc.yaml
by name.
Run the following commands from the database-mssql
directory using your CLI.
-
Start by creating the dev
Namespace if it doesn’t already exist:
kubectl create namespace dev
-
Apply the PersistentVolumeClaim
:
kubectl -n dev apply -f ./k8s/pvc.yaml
-
Apply the Secret:
kubectl -n dev apply -f ./k8s/secret.yaml
-
Within the deployment.yaml
, adjust the value of spec.template.spec.containers.image
to use your Docker image. Apply the Deployment:
kubectl -n dev apply -f ./k8s/deployment.yaml
-
Verify the Pod is up and running:
kubectl -n dev get po
This command results in a table similar to the one below, showing a Pod with the name mssql-
ending with a random hash. The STATUS will display Running
when the Pod is up and running.
NAME READY STATUS RESTARTS AGE
mssql-6df65c689d-qdj4r 2/2 Running 0 93s
Step 6: Locally access the MSSQL Deployment
Kubernetes provides a port-forward functionality that allows you to connect to resources running in the Kyma runtime locally. This can be useful for development and debugging tasks. Make sure to adjust the name of the Pod in the following commands to match your own.
-
Confirm the port on which the Pod is listening:
kubectl get pod mssql-6df65c689d-qdj4r -n dev --template='{{(index (index .spec.containers 0).ports 0).containerPort}}'
This command should return:
1433
-
Apply the port-forward to the Pod:
kubectl port-forward mssql-6df65c689d-qdj4r -n dev 1433:1433
This command should return:
Forwarding from 127.0.0.1:1433 -> 1433
Forwarding from [::1]:1433 -> 1433
-
At this point, a tool such as sqlcmd
or a development project running on your computer can access the database running in the Kyma runtime using localhost:1433
.
-
To end the process, use CTRL+C
.
Step 7: Directly access the MSSQL Deployment
Similarly to how the Docker image can be accessed locally, you can perform the same on the Deployment running in the Kyma runtime. Make sure to adjust the name of the Pod in the following commands to match your own.
-
By default, a Pod includes the denoted Deployments defined in the yaml
definition as well as the istio-proxy
. For the mssql
Deployment, this means there will be two containers in the Pod.
The describe
command can be used to view this information.
kubectl describe pod mssql-6df65c689d-qdj4r -n dev
-
Run the following command to obtain a bash shell.
If any adjustments where made to the name of the MSSQL deployment, adjust the name of the container denoted by the -c
option.
kubectl exec -it mssql-6df65c689d-qdj4r -n dev -c mssql -- bash
-
To run the sqlcmd
tool, which allows you to run queries against the database, run this command:
/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U SA -P Yukon900
-
The commands performed in [Step 4: ](Use the Docker image locally) to query the database can now be used in the same fashion.