3
respostas

Aplicação não abre / requisição quebrada

Eu criei a aplicação: deployment, volume, loadbalancer, banco de dados. Meu dashboard está assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Esses são meus arquivos:

vollmed-api-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vollmed-api-deployment
  labels:
    app: vollmed-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: vollmed-api
  template:
    metadata:
      labels:
        app: vollmed-api
    spec:
      containers:
      - name: vollmed-api
        image: leonardosartorello/vollmed:v8
        ports:
        - containerPort: 3000
        env:
        # Define the environment variable
        - name: DB_HOST # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: vollmed-configmap           # The ConfigMap this value comes from.
              key: DB_HOST # The key to fetch.
        - name: DB_DATABASE # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: vollmed-configmap           # The ConfigMap this value comes from.
              key: DB_DATABASE # The key to fetch.
        - name: DB_PASSWORD # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            secretKeyRef:
              name: vollmed-secret           # The ConfigMap this value comes from.
              key: DB_PASSWORD # The key to fetch.
        # livenessProbe:
        #   httpGet:
        #     path: /paciente
        #     port: 3000
        #   initialDelaySeconds: 10
        #   periodSeconds: 3

vollmed-api-loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: vollmed-api-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: vollmed-api
  ports:
      # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - port: 3000
      targetPort: 3000

vollmed-mysql-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql # has to match .spec.template.metadata.labels
  serviceName: "mysql"
  replicas: 1 # by default is 1
  minReadySeconds: 10 # by default is 0
  template:
    metadata:
      labels:
        app: mysql # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mysql
        image: mysql:8
        ports:
        - containerPort: 3306
          name: mysql
        env:
        - name: MYSQL_DATABASE # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: vollmed-configmap           # The ConfigMap this value comes from.
              key: DB_DATABASE # The key to fetch.
        - name: MYSQL_ROOT_PASSWORD # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            secretKeyRef:
              name: vollmed-secret           # The ConfigMap this value comes from.
              key: DB_PASSWORD # The key to fetch.
        volumeMounts:
        - name: vollmed-mysql-pv
          mountPath: /var/lib/mysql
      volumes:
      - name: vollmed-mysql-pv
        persistentVolumeClaim:
          claimName: vollmed-mysql-pvc

vollmed-mysql-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: vollmed-mysql-svc
  labels:
    app: mysql
spec:
  ports:
  - port: 3306
    name: mysql
  clusterIP: None
  selector:
    app: mysql

vollmed-mysql-volume.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: vollmed-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 15Gi
  storageClassName: csi-hostpath-sc

Tive que deixar o livenessProbe desabilitado porque a requisição está quebrando.

Eu havia conseguido antes, acessando pelo IP da minha máquina e a porta 3000. Mas precisei reinstalar o minikube e refazer tudo de novo, porém agora a requisção quebra. No meu dashboard o loadbalancer fica sempre pendente:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Bom, um dos problemas era que o minikube tunnel não estava rodando, mas mesmo assim eu continuo não conseguindo acessar a aplicação:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, Ana.

Tudo bem?

Segue a resposta....

Olá, Ana!

Pelo que pude perceber, você está enfrentando um problema com a aplicação não abrindo e a requisição quebrando, certo? Vou tentar te ajudar a identificar o que pode estar acontecendo.

Primeiramente, vamos verificar se todos os seus serviços estão funcionando corretamente. Para isso, você pode usar o comando kubectl get services. Isso vai te mostrar todos os serviços que estão rodando e seus respectivos status.

Em seguida, vamos verificar se o seu banco de dados está funcionando corretamente. Para isso, você pode usar o comando kubectl exec -it mysql-0 -- mysql -p, substituindo "mysql-0" pelo nome do seu pod do banco de dados. Isso vai te permitir acessar o banco de dados e verificar se tudo está funcionando como deveria.

Além disso, notei que você mencionou que o livenessProbe está desabilitado porque a requisição está quebrando. O livenessProbe é uma forma do Kubernetes verificar se a sua aplicação está funcionando corretamente. Se a requisição está quebrando, pode ser que exista algum problema com a sua aplicação. Sugiro que você habilite o livenessProbe e veja qual é o erro que está sendo retornado. Isso pode te dar uma pista do que pode estar acontecendo.

Outro ponto importante é verificar se a aplicação está conseguindo se conectar com o banco de dados. Você pode fazer isso verificando os logs da sua aplicação. Para isso, você pode usar o comando kubectl logs <nome-do-pod>, substituindo "" pelo nome do pod da sua aplicação.

Por fim, notei que você mencionou que o loadbalancer fica sempre pendente. Isso pode indicar que o serviço de loadbalancer não está conseguindo se conectar com a sua aplicação. Sugiro que você verifique a configuração do seu loadbalancer para garantir que ele está apontando para a aplicação correta.

Espero que essas sugestões te ajudem a identificar o problema. Lembre-se, esses são apenas pontos de partida e pode ser necessário realizar mais investigações para identificar a causa exata do problema.

Espero ter ajudado e bons estudos!