Python Django Eureka Client is not unregistering from Eureka Server in Kubernetes Cluster

Viewed 45

I want to register python django eureka client to java spring eureka server. There is no problem when registering django project to the eureka server on localhost, when django project is run it is registering to the eureka server. when stop django project with CTRL + C, it is unregistering from the eureka server. The problem is that registering django project via Kubernetes cluster, i am running pod with command "kubectl apply -f kub8s-media.yaml" and it is successfully registers but when i want to stop project using "kubectl delete -f kub8s-media.yaml" or restart using "kubectl rollout restart deployment kub8s-deploy" django project didn't unregister from eureka

Dockerfile

FROM python

RUN mkdir /backend-media

COPY . /backend-media

WORKDIR /backend-media

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

EXPOSE 8001

RUN pip install -r requirements.txt

CMD ["python", "manage.py", "runserver", "0.0.0.0:8001"]

kub8s-media.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-media-deploy
spec:
  selector:
    matchLabels:
      app: backend-media
  replicas: 1
  template:
    metadata:
      labels:
        app: backend-media
    spec:
      containers:
      - name: backend-media-app
        ports:
          - containerPort: 8001
        image: aalfaa00/media:latest



---
apiVersion: v1
kind: Service
metadata:
  name: backend-media-svc
  labels:
    app: backend-media
spec:
  type: NodePort
  ports:
    - port: 8001
      protocol: TCP
  selector:
    app: backend-media

eureka.py

import random
import string
import os
import py_eureka_client.eureka_client as eureka_client


N = 32
res = ''.join(random.choices(string.ascii_lowercase + string.digits, k=N))


server_port = 8001


def eureka_init():
    if os.environ.get("RUN_MAIN"):
        eureka_client.init(eureka_server="http://192.168.49.2:32451",
                        app_name="service",
                        instance_port=server_port,
                        instance_id=("media:" + str(res)))
        print("Eureka client is running")


def stop_eureka():
    if os.environ.get("RUN_MAIN"):
        eureka_client.stop()
        print("Stopping Eureka client")

manage.py

import os
import sys
from media_service.eureka import eureka_init, stop_eureka


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'media_service.settings')
    if os.environ.get('RUN_MAIN'):
        print('run')
        eureka_init()
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)
    stop_eureka()

if __name__ == '__main__':
    main()

0 Answers
Related