Kubernetes + Django / PostgreSQL: Specifying the HOST of Your PostgreSQL Database in a Kubernetes Cluster

Kubernetes + Django / PostgreSQL: Specifying the HOST of Your PostgreSQL Database in a Kubernetes Cluster
When deploying a Django application with a PostgreSQL database to a Kubernetes cluster, one of the most common questions is: “How do I specify the HOST of my PostgreSQL database?” This blog post will guide you through the process, providing a clear, step-by-step tutorial on how to achieve this.
Introduction
Kubernetes, an open-source platform designed to automate deploying, scaling, and operating application containers, is a powerful tool for managing complex applications. Django, a high-level Python web framework, and PostgreSQL, a powerful, open-source object-relational database system, are often used together in web development projects. When deploying such an application to a Kubernetes cluster, it’s crucial to correctly specify the HOST of your PostgreSQL database.
Prerequisites
Before we start, ensure you have the following:
- A Kubernetes cluster up and running.
kubectl
command-line tool installed and configured to interact with your cluster.- A Django application configured to use a PostgreSQL database.
- Docker installed on your local machine.
Step 1: Dockerize Your Django Application
First, we need to containerize our Django application using Docker. Create a Dockerfile
in your project’s root directory with the following content:
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
Then, build the Docker image:
docker build -t my-django-app .
Step 2: Create a PostgreSQL Deployment in Kubernetes
Next, we’ll create a PostgreSQL deployment in our Kubernetes cluster. We’ll use a YAML file to define the deployment. Here’s an example:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:latest
env:
- name: POSTGRES_USER
value: yourusername
- name: POSTGRES_PASSWORD
value: yourpassword
- name: POSTGRES_DB
value: yourdatabase
Apply this deployment using kubectl
:
kubectl apply -f postgres-deployment.yaml
Step 3: Expose PostgreSQL Service
Now, we need to expose the PostgreSQL deployment as a service within our Kubernetes cluster. This will allow our Django application to communicate with the database. Here’s an example of a service definition:
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
Apply this service using kubectl
:
kubectl apply -f postgres-service.yaml
Step 4: Specify the HOST in Django Settings
In your Django settings, you should now specify the HOST of your PostgreSQL database as the name of the service you just created, which is postgres
in this case. Here’s how you can do it:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'yourdatabase',
'USER': 'yourusername',
'PASSWORD': 'yourpassword',
'HOST': 'postgres',
'PORT': '5432',
}
}
Conclusion
In this post, we’ve walked through the process of specifying the HOST of a PostgreSQL database when deploying a Django application to a Kubernetes cluster. By following these steps, you should be able to successfully deploy your Django/PostgreSQL application to Kubernetes and ensure it can communicate with the database. Remember, the key is to use the name of the Kubernetes service as the HOST in your Django settings. Happy deploying!
About Saturn Cloud
Saturn Cloud is your all-in-one solution for data science & ML development, deployment, and data pipelines in the cloud. Spin up a notebook with 4TB of RAM, add a GPU, connect to a distributed cluster of workers, and more. Join today and get 150 hours of free compute per month.