skip to Main Content

I am trying to build and deploy an image in Kubernetes, but when I deploy, it failed with crash loop error, I did add sleep time in that so now it is not failing, but the application is not accessible via the service .

I tried to check pod logs as well but there is no logs at all.
Any Kubernetes expert can help me solve this please
there is a dependency of redis but the basic is not working
Image that I am using is at

The definition file for pod and service file is as below
pod file

apiVersion: v1
kind: Pod
metadata:
  name: voting-app-pod
  labels:
    name: voting-app-pod
    app: demo-voting-app
spec:
  containers:
  - name: voting-app
    image: 
    command: ["sleep"]
    args: ["3200"]
    ports:
         - containerPort: 5000

Service file

apiVersion: v1
kind: Service
metadata:
  name: voting-service
  labels:
    name: voting-service
    app: demo-voting-app
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 5000
  type: LoadBalancer
  selector:
     name: voting-app-pod
     app: demo-voting-app

2

Answers


  1. You’re missing apiVersion: v1 at the top of the yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: voting-app-pod
      labels:
        name: voting-app-pod
        app: demo-voting-app
    spec:
      containers:
      - name: voting-app
        image: mirwasim0/bloomreach
        command: ["sleep"]
        args: ["3200"]
        ports:
             - containerPort: 5000
    

    Other than that, I tried your pod yaml in a test cluster and it started up fine with no crashloops


    UPDATE

    Removing the sleep command

    apiVersion: v1
    kind: Pod
    metadata:
      name: voting-app-pod
      labels:
        name: voting-app-pod
        app: demo-voting-app
    spec:
      containers:
      - name: voting-app
        image: mirwasim0/bloomreach
        # command: ["sleep"]
        # args: ["3200"]
        ports:
             - containerPort: 5000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: voting-service
      labels:
        name: voting-service
        app: demo-voting-app
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 5000
      type: LoadBalancer
      selector:
         name: voting-app-pod
         app: demo-voting-app
    

    Gives me the following crash out in the logs:

    $ kubectl logs -f voting-app-pod 
     * Serving Flask app 'app.py' (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
    Traceback (most recent call last):
      File "/usr/local/bin/flask", line 8, in <module>
        sys.exit(main())
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 994, in main
        cli.main(args=sys.argv[1:])
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 600, in main
        return super().main(*args, **kwargs)
      File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1053, in main
        rv = self.invoke(ctx)
      File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1659, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1395, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/local/lib/python3.7/site-packages/click/core.py", line 754, in invoke
        return __callback(*args, **kwargs)
      File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 84, in new_func
        return ctx.invoke(f, obj, *args, **kwargs)
      File "/usr/local/lib/python3.7/site-packages/click/core.py", line 754, in invoke
        return __callback(*args, **kwargs)
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 849, in run_command
        app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 324, in __init__
        self._load_unlocked()
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 350, in _load_unlocked
        self._app = rv = self.loader()
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 406, in load_app
        app = locate_app(self, import_name, name)
      File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 260, in locate_app
        __import__(module_name)
      File "/code/app.py", line 11, in <module>
        cache = redis.Redis(host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'])
      File "/usr/local/lib/python3.7/os.py", line 681, in __getitem__
        raise KeyError(key) from None
    KeyError: 'REDIS_HOST'
    

    This indicates you’ve omitted you add the environment variable REDIS_HOST. After trying a few more times, I found there’s a few other environments variables you’re missing such as REDIS_HOST, REDIS_PORT, USERNAME, PASSWORD. You just need to add those in like this, (and any other environment variables your script requires)

    apiVersion: v1
    kind: Pod
    metadata:
      name: voting-app-pod
      labels:
        name: voting-app-pod
        app: demo-voting-app
    spec:
      containers:
      - name: voting-app
        image: mirwasim0/bloomreach
        # command: ["sleep"]
        # args: ["3200"]
        ports:
             - containerPort: 5000
        env:
          - name: REDIS_HOST
            value: "127.0.0.1"
          - name: REDIS_PORT
            value: "1234"
          - name: USERNAME
            value: "my-user-name"
          - name: PASSWORD
            value: "my-password"
          ...
          ...
    
    Login or Signup to reply.
  2. I see some environment variables are mandatory to startup the service:

    apiVersion: v1
    kind: Pod
    metadata:
      name: voting-app-pod
      labels:
        name: voting-app-pod
        app: demo-voting-app
    spec:
      containers:
      - name: voting-app
        image: mirwasim0/bloomreach
        env:
        - name: REDIS_HOST
          value: my-redis-host
        - name: REDIS_PORT
          value: "6379"
        - name: USERNAME
          value: my-user
        - name: PASSWORD
          value: my-password
        ports:
        - containerPort: 5000
    
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search