Could not translate host name "pg" to address: Temporary failure in name resolution

Hi all. Deploying a Django application to Kubernetes. When I want to perform migrations in a container. An error appears that dns “pg” does not resolve. How can I fix this?

/usr/local/lib/python3.9/site-packages/django/core/management/commands/makemigrations.py:105: RuntimeWarning: Got an error checking a consistent migration history performed for database connection ‘default’: could not translate host name “pg” to address: Temporary failure in name resolution

kubeadm version: &version.Info{Major:“1”, Minor:“29”, GitVersion:“v1.29.9”, GitCommit:“114a1f58037bd70f90d9e630e591c5e52dd9b298”, GitTreeState:“clean”, BuildDate:“2024-09-11T20:27:20Z”, GoVersion:“go1.22.6”, Compiler:“gc”, Platform:“linux/amd64”}

root@kube-master:/home/dott/job# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
root@kube-master:/home/dott/job#

My manifest

> root@kube-master:/home/dott/job# ls
> app-deploy.yaml  app-migrations1.yaml  pg-deploy.yaml  pg-service.yaml
> 
> root@kube-master:/home/dott/job# nano app-deploy.yaml
> apiVersion: apps/v1
> kind: Deployment
> metadata:
>   name: ktswebinar
>   labels:
>     app.kubernetes.io/name: ktswebinar
>     app.kubernetes.io/component: web
> spec:
>   replicas: 1
>   selector:
>     matchLabels:
>       app.kubernetes.io/name: ktswebinar
>       app.kubernetes.io/component: web
>   template:
>     metadata:
>       labels:
>         app.kubernetes.io/name: ktswebinar
>         app.kubernetes.io/component: web
>     spec:
>       containers:
>         - name: ktswebinar
>           image: igorcoding/ktswebinar:1.0.4
>           imagePullPolicy: IfNotPresent
>           ports:
>             - containerPort: 8000
>               name: http
>           env:
>             - name: DATABASE_URL
>               value: postgresql://postgres:gYwOKJZaR0do8TUUgPS9@pg:5432/postgres
> 
> 
> root@kube-master:/home/dott/job# nano app-migrations1.yaml
> apiVersion: batch/v1
> kind: Job
> metadata:
>   name: migrations
>   labels:
>     app.kubernetes.io/name: ktswebinar
>     app.kubernetes.io/component: migrations
> spec:
>   activeDeadlineSeconds: 120
>   template:
>     metadata:
>       labels:
>         app.kubernetes.io/name: ktswebinar
>         app.kubernetes.io/component: migrations
>     spec:
>       restartPolicy: Never
>       containers:
>         - name: migrations
>           image: igorcoding/ktswebinar:1.0.4
>           imagePullPolicy: IfNotPresent
>           command:
>             - python
>             - manage.py
>             - migrate
>           env:
>             - name: DATABASE_URL
>               value: postgresql://postgres:gYwOKJZaR0do8TUUgPS9@pg:5432/postgres
> 
> 
> root@kube-master:/home/dott/job# nano pg-deploy.yaml
> apiVersion: apps/v1
> kind: Deployment
> metadata:
>   name: pg
>   labels:
>     app.kubernetes.io/name: ktswebinar
>     app.kubernetes.io/component: pg
> spec:
>   replicas: 1
>   selector:
>     matchLabels:
>       app.kubernetes.io/name: ktswebinar
>       app.kubernetes.io/component: pg
>   template:
>     metadata:
>       labels:
>         app.kubernetes.io/name: ktswebinar
>         app.kubernetes.io/component: pg
>     spec:
>       containers:
>         - name: pg
>           image: postgres:14
>           imagePullPolicy: IfNotPresent
>           ports:
>             - containerPort: 5432
>               name: pg
>           env:
>             - name: POSTGRES_PASSWORD
>               value: gYwOKJZaR0do8TUUgPS9
> 
> 
> 
> root@kube-master:/home/dott/job# nano pg-service.yaml
> 
> 
> apiVersion: v1
> kind: Service
> metadata:
>   name: pg
>   labels:
>     app.kubernetes.io/name: ktswebinar
>     app.kubernetes.io/component: pg
> spec:
>   type: ClusterIP
>   ports:
>     - port: 5432
>       targetPort: pg
>       protocol: TCP
>       name: pg
>   selector:
>     app.kubernetes.io/name: ktswebinar
>     app.kubernetes.io/component: pg
> 
> 
> root@kube-master:/home/dott/job# kubectl -n ktswebinar get pods
> NAME                          READY   STATUS    RESTARTS   AGE
> ktswebinar-6b7c46b449-286rr   1/1     Running   0          42s
> pg-56c9d89c69-mljlh           1/1     Running   0          116s

instead of above have you tried with .cluster.local or whatever your local DNS for PG is and see if it works?

          value: postgresql://postgres:gYwOKJZaR0do8TUUgPS9@pg.cluster.local:5432/postgres

no, I didn’t use any other dns.
At another stand
Everything worked for me. But this is not it. I can’t understand what’s wrong?

My dns settings
nano /etc/hosts

kube-master
127.0.0.1 localhost
127.0.0.1 kube-master
10.244.0.3 kube-master
10.244.0.4 kube-worker1
10.244.0.5 kube-worker2

kube-worker1
127.0.0.1 localhost
127.0.0.1 kube-worker1
10.244.0.3 kube-master
10.244.0.4 kube-worker1
10.244.0.5 kube-worker2

kube-worker2
127.0.0.1 localhost
127.0.0.1 kube-worker2
10.244.0.3 kube-master
10.244.0.4 kube-worker1
10.244.0.5 kube-worker2

root@kube-master:/home/dott/job# kubectl exec -n ktswebinar -it ktswebinar-7d6774dd9-qnkjf /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] – [COMMAND] instead.
root@ktswebinar-7d6774dd9-qnkjf:/code#
root@ktswebinar-7d6774dd9-qnkjf:/code#
root@ktswebinar-7d6774dd9-qnkjf:/code#
root@ktswebinar-7d6774dd9-qnkjf:/code# nslookup pg
bash: nslookup: command not found
root@ktswebinar-7d6774dd9-qnkjf:/code# nslookup pg.ktswebinar.service.cluster.local
bash: nslookup: command not found
root@ktswebinar-7d6774dd9-qnkjf:/code# ping pg.ktswebinar.service.cluster.local
bash: ping: command not found
root@ktswebinar-7d6774dd9-qnkjf:/code# ls
Dockerfile LICENSE docker ktswebinar manage.py requirements.txt static
root@ktswebinar-7d6774dd9-qnkjf:/code# python manage.py makemigrations
/usr/local/lib/python3.9/site-packages/django/core/management/commands/makemigrations.py:105: RuntimeWarning: Got an error checking a consistent migration history performed for database connection ‘default’: could not translate host name “pg.ktswebinar.service.cluster.local” to address: Temporary failure in name resolution

warnings.warn(
No changes detected
root@ktswebinar-7d6774dd9-qnkjf:/code# python manage.py makemigrations^C
root@ktswebinar-7d6774dd9-qnkjf:/code# exit
exit
command terminated with exit code 130
root@kube-master:/home/dott/job# nano app-deploy.yaml
root@kube-master:/home/dott/job# kubectl exec -n ktswebinar -it ktswebinar-7d6774dd9-qnkjf /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] – [COMMAND] instead.
root@ktswebinar-7d6774dd9-qnkjf:/code# exit
exit
root@kube-master:/home/dott/job# kubectl -n ktswebinar apply -f ./app-deploy.yaml
deployment.apps/ktswebinar configured
root@kube-master:/home/dott/job# kubectl exec -n ktswebinar -it ktswebinar-7d6774dd9-qnkjf /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] – [COMMAND] instead.
Error from server (NotFound): pods “ktswebinar-7d6774dd9-qnkjf” not found
root@kube-master:/home/dott/job# kubectl -n ktswebinar get pods
NAME READY STATUS RESTARTS AGE
ktswebinar-7b9b4bf798-wm6sj 1/1 Running 0 14s
pg-56c9d89c69-mljlh 1/1 Running 0 32h
root@kube-master:/home/dott/job# kubectl exec -n ktswebinar -it ktswebinar-7b9b4bf798-wm6sj /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] – [COMMAND] instead.
root@ktswebinar-7b9b4bf798-wm6sj:/code# python manage.py makemigrations
/usr/local/lib/python3.9/site-packages/django/core/management/commands/makemigrations.py:105: RuntimeWarning: Got an error checking a consistent migration history performed for database connection ‘default’: could not translate host name “pg.ktswebinar.cluster.local” to address: Temporary failure in name resolution

warnings.warn(
No changes detected
root@ktswebinar-7b9b4bf798-wm6sj:/code#

I changed, but it still not working

What is the output of following commands?

kubectl run -i --tty --rm debug --image=busybox --restart=Never – sh
/ # cat /etc/resolv.conf

exit from container

kubectl exec -it --namespace="NAME_SPACE_NAME" POD_NAME --bash -c "`cat /etc/resolv.conf``

Also looks like you are using pg.ktswebinar.cluster.local and not what I suggested earlier “pg.cluster.local”

In this case, the name you want to reference, the name of this service in DNS is: of.default.svc.cluster.local

1 Like