后台应用程序间歇性工作

问题描述 投票:0回答:1

我们已经在 AKS 集群上部署了后台应用程序,并且我们的应用程序使用了 nginx 入口控制器,但是该应用程序不稳定,它只能工作 2 分钟,然后长时间宕机(间歇性工作)。我们无法找到根本原因,甚至在 pod 日志中看不到任何错误。同一个应用程序在另一个环境中运行没有任何问题。

我们间歇性地看到 http 502 错误。

我们尝试重新部署nginx以及后台应用程序,但没有帮助。

azure-aks backstage
1个回答
0
投票

像 AKS 集群上的 Backstage 应用程序遇到的间歇性问题可能很难诊断,尤其是当 Pod 日志中没有明确的错误消息时。这更多的是一个故障排除问题。但是,HTTP 502 错误表明网关或代理(在本例中为 Nginx)存在问题,无法从 Backstage 应用程序获得有效响应。

下面是使用 helm 图表在 AKS 上部署后台的示例

helm install backstage backstage/backstage -n backstage

enter image description here

如果您想采取手动部署路线,也可以这样做。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
  namespace: backstage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backstage
  template:
    metadata:
      labels:
        app: backstage
    spec:
      containers:
        - name: backstage
          image: backstage:<backstageversion>
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 7007
          envFrom:
            - secretRef:
                name: postgres-secrets
            - secretRef:
                name: backstage-secrets

对于生产部署,

image
引用通常是容器注册表上存储库的完整 URL,例如:arkocr.azurecr.io/backstage 现在,如果您想在本地主机上检查它:

kubectl port-forward --namespace=backstage svc/backstage 80:80  
Forwarding from 127.0.0.1:80 ->  7007

但是为了这个例子,我将使用 helm

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx

enter image description here

然后创建一个 Ingress 资源,将流量路由到您的 Backstage 服务。用

kubectl apply -f yourfilename

保存
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: backstage-ingress
  namespace: backstage
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: backstage
            port:
              number: 80

Nginx Ingress Controller安装成功后,会被分配一个外部IP,你的pods后台pods就起来了,你可以在浏览器上访问了

kubectl get svc -n backstage
enter image description here enter image description here

现在谈到您的间歇性问题,如果您在 AKS 上运行此问题,请确保必要的防火墙规则已到位以允许流量到达入口控制器,并确保选中下面的标记 enter image description here

通过执行这些步骤,您应该能够确保 AKS 集群具备必要的防火墙规则,从而允许外部流量到达您的 Nginx 入口控制器。如果问题仍然存在,您需要检查日志

kubectl logs -n <namespace> -l app=nginx-ingress

检查 Backstage Pod 的资源使用情况(CPU、内存),看看是否存在资源耗尽而导致 Pod 无响应的情况。

参考文档:

官方后台指南

K8s 后台示例

类似话题

© www.soinside.com 2019 - 2024. All rights reserved.