如何解决GKE容器中的EADDRINUSE问题?

2024-03-05

我是容器和 GKE 的新手。我曾经运行我的节点服务器应用程序npm run debug我也尝试使用我的容器的 shell 在 GKE 上执行此操作。当我登录到 shell 时myapp容器并执行此操作我得到:

> [email protected] /cdn-cgi/l/email-protection start /usr/src/app
> node src/

events.js:167
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8089

通常我用类似的方法来处理这个问题killall -9 node https://stackoverflow.com/questions/9898372/how-to-fix-error-listen-eaddrinuse-while-using-nodejs但是当我这样做时,看起来我被踢出 shell,并且容器被 kubernetes 重新启动。节点似乎已经在使用该端口或其他东西:

netstat -tulpn | grep 8089
tcp        0      0 :::8089                 :::*                    LISTEN      23/node

如何从 shell 启动我的服务器?

我的配置文件: Dockerfile:

FROM node:10-alpine

RUN apk add --update \
libc6-compat

WORKDIR /usr/src/app
COPY package*.json ./
COPY templates-mjml/ templates-mjml/
COPY public/ public/
COPY src/ src/
COPY data/ data/
COPY config/ config/
COPY migrations/ migrations/
ENV NODE_ENV 'development'
ENV PORT '8089'
RUN npm install --development

myapp.yaml:

apiVersion: v1
kind: Service
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  ports:
  - port: 8089
    name: http
  selector:
    app: myapp    
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: gcr.io/myproject-224713/firstapp:v4
          ports:
            - containerPort: 8089
          env:
            - name: POSTGRES_DB_HOST
              value: 127.0.0.1:5432
            - name: POSTGRES_DB_USER
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: username
            - name: POSTGRES_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: password       
        - name: cloudsql-proxy
          image: gcr.io/cloudsql-docker/gce-proxy:1.11
          command: ["/cloud_sql_proxy",
                    "-instances=myproject-224713:europe-west4:mydatabase=tcp:5432",
                    "-credential_file=/secrets/cloudsql/credentials.json"]
          securityContext:
            runAsUser: 2
            allowPrivilegeEscalation: false
          volumeMounts:
            - name: cloudsql-instance-credentials
              mountPath: /secrets/cloudsql
              readOnly: true
      volumes:
        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials
---

myrouter.yaml:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: myapp-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - "*"
  gateways:
  - myapp-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: myapp
      weight: 100
    websocketUpgrade: true

EDIT: I got following logs:enter image description here

编辑2: 添加后羽杰健康服务 https://think-engineer.com/blog/cloud-computing/exposing-a-feathers-js-http-api-in-kubernetes-using-ingress我得到以下输出describe:

Name:           myapp-95df4dcd6-lptnq
Namespace:      default
Node:           gke-standard-cluster-1-default-pool-59600833-pcj3/10.164.0.3
Start Time:     Wed, 02 Jan 2019 22:08:33 +0100
Labels:         app=myapp
                pod-template-hash=518908782
Annotations:    kubernetes.io/limit-ranger: LimitRanger plugin set: cpu request for container myapp; cpu request for container cloudsql-proxy
                sidecar.istio.io/status:
                  {"version":"3c9617ff82c9962a58890e4fa987c69ca62487fda71c23f3a2aad1d7bb46c748","initContainers":["istio-init"],"containers":["istio-proxy"]...
Status:         Running
IP:             10.44.3.17
Controlled By:  ReplicaSet/myapp-95df4dcd6
Init Containers:
  istio-init:
    Container ID:  docker://768b2327c6cfa57b3d25a7029e52ce6a88dec6848e91dd7edcdf9074c91ff270
    Image:         gcr.io/gke-release/istio/proxy_init:1.0.2-gke.0
    Image ID:      docker-pullable://gcr.io/gke-release/istio/proxy_init@sha256:e30d47d2f269347a973523d0c5d7540dbf7f87d24aca2737ebc09dbe5be53134
    Port:          <none>
    Host Port:     <none>
    Args:
      -p
      15001
      -u
      1337
      -m
      REDIRECT
      -i
      *
      -x

      -b
      8089,
      -d

    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 02 Jan 2019 22:08:34 +0100
      Finished:     Wed, 02 Jan 2019 22:08:35 +0100
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:         <none>
Containers:
  myapp:
    Container ID:   docker://5566a3e8242ec6755dc2f26872cfb024fab42d5f64aadc3db1258fcb834f8418
    Image:          gcr.io/myproject-224713/firstapp:v4
    Image ID:       docker-pullable://gcr.io/myproject-224713/firstapp@sha256:0cbd4fae0b32fa0da5a8e6eb56cb9b86767568d243d4e01b22d332d568717f41
    Port:           8089/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 02 Jan 2019 22:09:19 +0100
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 02 Jan 2019 22:08:35 +0100
      Finished:     Wed, 02 Jan 2019 22:09:19 +0100
    Ready:          False
    Restart Count:  1
    Requests:
      cpu:      100m
    Liveness:   http-get http://:8089/health delay=15s timeout=20s period=10s #success=1 #failure=3
    Readiness:  http-get http://:8089/health delay=5s timeout=5s period=10s #success=1 #failure=3
    Environment:
      POSTGRES_DB_HOST:      127.0.0.1:5432
      POSTGRES_DB_USER:      <set to the key 'username' in secret 'mysecret'>  Optional: false
      POSTGRES_DB_PASSWORD:  <set to the key 'password' in secret 'mysecret'>  Optional: false
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-9vtz5 (ro)
  cloudsql-proxy:
    Container ID:  docker://414799a0699abe38c9759f82a77e1a3e06123714576d6d57390eeb07611f9a63
    Image:         gcr.io/cloudsql-docker/gce-proxy:1.11
    Image ID:      docker-pullable://gcr.io/cloudsql-docker/gce-proxy@sha256:5c690349ad8041e8b21eaa63cb078cf13188568e0bfac3b5a914da3483079e2b
    Port:          <none>
    Host Port:     <none>
    Command:
      /cloud_sql_proxy
      -instances=myproject-224713:europe-west4:osm=tcp:5432
      -credential_file=/secrets/cloudsql/credentials.json
    State:          Running
      Started:      Wed, 02 Jan 2019 22:08:36 +0100
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        100m
    Environment:  <none>
    Mounts:
      /secrets/cloudsql from cloudsql-instance-credentials (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-9vtz5 (ro)
  istio-proxy:
    Container ID:  docker://898bc95c6f8bde18814ef01ce499820d545d7ea2d8bf494b0308f06ab419041e
    Image:         gcr.io/gke-release/istio/proxyv2:1.0.2-gke.0
    Image ID:      docker-pullable://gcr.io/gke-release/istio/proxyv2@sha256:826ef4469e4f1d4cabd0dc846f9b7de6507b54f5f0d0171430fcd3fb6f5132dc
    Port:          <none>
    Host Port:     <none>
    Args:
      proxy
      sidecar
      --configPath
      /etc/istio/proxy
      --binaryPath
      /usr/local/bin/envoy
      --serviceCluster
      myapp
      --drainDuration
      45s
      --parentShutdownDuration
      1m0s
      --discoveryAddress
      istio-pilot.istio-system:15007
      --discoveryRefreshDelay
      1s
      --zipkinAddress
      zipkin.istio-system:9411
      --connectTimeout
      10s
      --statsdUdpAddress
      istio-statsd-prom-bridge.istio-system:9125
      --proxyAdminPort
      15000
      --controlPlaneAuthPolicy
      NONE
    State:          Running
      Started:      Wed, 02 Jan 2019 22:08:36 +0100
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:  10m
    Environment:
      POD_NAME:                      myapp-95df4dcd6-lptnq (v1:metadata.name)
      POD_NAMESPACE:                 default (v1:metadata.namespace)
      INSTANCE_IP:                    (v1:status.podIP)
      ISTIO_META_POD_NAME:           myapp-95df4dcd6-lptnq (v1:metadata.name)
      ISTIO_META_INTERCEPTION_MODE:  REDIRECT
    Mounts:
      /etc/certs/ from istio-certs (ro)
      /etc/istio/proxy from istio-envoy (rw)
Conditions:
  Type           Status
  Initialized    True 
  Ready          False 
  PodScheduled   True 
Volumes:
  cloudsql-instance-credentials:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  cloudsql-instance-credentials
    Optional:    false
  default-token-9vtz5:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-9vtz5
    Optional:    false
  istio-envoy:
    Type:    EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:  Memory
  istio-certs:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  istio.default
    Optional:    true
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason                 Age                From                                                        Message
  ----     ------                 ----               ----                                                        -------
  Normal   Scheduled              68s                default-scheduler                                           Successfully assigned myapp-95df4dcd6-lptnq to gke-standard-cluster-1-default-pool-59600833-pcj3
  Normal   SuccessfulMountVolume  68s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  MountVolume.SetUp succeeded for volume "istio-envoy"
  Normal   SuccessfulMountVolume  68s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  MountVolume.SetUp succeeded for volume "default-token-9vtz5"
  Normal   SuccessfulMountVolume  68s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  MountVolume.SetUp succeeded for volume "cloudsql-instance-credentials"
  Normal   SuccessfulMountVolume  68s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  MountVolume.SetUp succeeded for volume "istio-certs"
  Normal   Pulled                 67s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Container image "gcr.io/gke-release/istio/proxy_init:1.0.2-gke.0" already present on machine
  Normal   Created                67s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Created container
  Normal   Started                67s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Started container
  Normal   Pulled                 66s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Container image "gcr.io/cloudsql-docker/gce-proxy:1.11" already present on machine
  Normal   Created                66s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Created container
  Normal   Started                66s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Started container
  Normal   Created                65s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Created container
  Normal   Started                65s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Started container
  Normal   Pulled                 65s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Container image "gcr.io/gke-release/istio/proxyv2:1.0.2-gke.0" already present on machine
  Normal   Created                65s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Created container
  Normal   Started                65s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Started container
  Warning  Unhealthy              31s (x4 over 61s)  kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Readiness probe failed: HTTP probe failed with statuscode: 404
  Normal   Pulled                 22s (x2 over 66s)  kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Container image "gcr.io/myproject-224713/firstapp:v4" already present on machine
  Warning  Unhealthy              22s (x3 over 42s)  kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Liveness probe failed: HTTP probe failed with statuscode: 404
  Normal   Killing                22s                kubelet, gke-standard-cluster-1-default-pool-59600833-pcj3  Killing container with id docker://myapp:Container failed liveness probe.. Container will be killed and recreated.

这就是 Kubernetes 的工作原理,只要您的 Pod 有进程在运行,它就会保持“运行”状态。一旦你杀死一个进程,Kubernetes 就会重新启动 pod,因为它崩溃了或者出了问题。

如果你真的想调试npm run debug考虑:

  1. 创建一个容器CMD https://docs.docker.com/engine/reference/builder/#cmd(在最后)或ENTRYPOINT https://docs.docker.com/engine/reference/builder/#entrypointDockerfile 中的值是npm run debug。然后使用 Kubernetes 中的部署定义运行它。

  2. 覆盖命令中的myapp部署定义中的容器,类似于:

    spec:
      containers:
        - name: myapp
          image: gcr.io/myproject-224713/firstapp:v4
          ports:
            - containerPort: 8089
          command: ["npm", "run", "debug" ]
          env:
            - name: POSTGRES_DB_HOST
              value: 127.0.0.1:5432
            - name: POSTGRES_DB_USER
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: username
            - name: POSTGRES_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: password   
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决GKE容器中的EADDRINUSE问题? 的相关文章

随机推荐

  • IIS 7.0 中的模拟

    我有一个在 IIS 6 0 下正常工作的网站 它使用 Windows 凭据对用户进行身份验证 然后在与访问数据库的服务通信时 它会传递凭据 在 IIS 7 0 中 相同的配置设置不会传递凭据 并且数据库会受到 NT AUTHORITY AN
  • 捕获某个按钮点击的WndProc消息

    我的表格上有一个取消按钮 我想确定里面WndProc方法表示这个Cancel单击按钮并为其编写一些代码 这是绝对必要的 因为否则我无法取消所有其他尚未执行的控件验证事件 请帮忙 NET 2 0 WinForms 您可以通过以下方式解析左键单
  • Angular 2 TypeScript 如何在数组中查找元素

    我有一个组件和一个服务 成分 export class WebUserProfileViewComponent persons Person personId number constructor params RouteParams pr
  • Dialogflow Agent 在 Google 模拟器中工作,但在控制台和 Web 链接中失败

    我正在使用 Dialogflow V2 API 通过 Google 模拟器上的 Actions 进行测试时一切正常 请查找附件图片 但是 当尝试使用 Dialogflow 中的控制台 右列 以及 Web 集成链接时 它不起作用 代理能够从用
  • 比较常量时,哪里可以使用 & 和 ==?有什么不同?

    我想知道两者之间有什么区别 file dwFileAttributes FILE ATTRIBUTE DIRECTORY and file dwFileAttributes FILE ATTRIBUTE DIRECTORY 当我使用第一个时
  • 清除python中的变量

    python中有没有办法清除变量的值 例如 如果我正在实现二叉树 class Node self left somenode1 self right somenode2 如果我想从树中删除某些节点 我需要设置self left清空 The
  • iOS - 跟踪我的安装来自哪些广告活动[重复]

    这个问题在这里已经有答案了 我在应用商店中有一个 iOS 应用程序 并且正在运行一些广告活动 Google Adwords FB 广告等 我如何知道我的安装来自哪里 我有一个等效的 Android 应用程序 Google play 允许我将
  • ruby 中的错误解密错误

    在执行时cipher final 它说bad decrypt错误 我试图找出问题所在 但是 我找不到 你能告诉我我的代码有什么问题吗 这是我的代码 require openssl require base64 require hex str
  • 如何修复“重复属性映射”异常?

    我正在使用我的 xml 文件来从我的数据库映射新表 但是当我启动项目时 我收到一个我无法理解和解决的重复属性映射错误 这是我的 hibernate cfg xml
  • 如何检查 tvOS 是否启用了深色外观

    如何检查用户是否在 Apple TV 上启用了深色外观 Using UI用户界面样式 https developer apple com reference uikit uiuserinterfacestyle 首先在 tvOS 10 中提
  • 突出显示搜索文本 - 角度 2

    信使根据用户给出的输入显示搜索结果 在显示结果时需要突出显示搜索到的单词 这些是所使用的 html 和组件 组件 html div div Id result id div div Summary result summary div di
  • 如何在 C 中声明可变大小的数组?

    好吧 我正在做矩阵乘法 我需要做一个m x n数组和一个p x q array 但是 我不知道该怎么做 这是我的程序 当我手动输入值时 它会打印正确的输出 include
  • 从 javascript 链接到 .cshtml 视图

    如何从 javascript 文件直接指向 cshtml 视图 例如 为什么我不能将 cshtml 视图与 angular js 一起使用 就像这个例子一样 directive encoder timeout gt return restr
  • Bootstrap 4 使下拉菜单可滚动

    I have a problem with my drop down menu on smaller devices i cannot make it scroll able when i tried the solution here t
  • 从我在react-table中发送请求的api获取

    我需要一个服务器端表 所以在我看到之后react table在 github 上获得了 9k 星 然后决定使用它 我正在尝试构建一个 React Table 它可以对每个请求的数据进行轮询以获取最新数据 在示例中我使用 jsonplaceh
  • 检查是否使用 React Native 启用了位置服务

    我目前正在开发一个使用 React Native 的应用程序 该应用程序需要启用位置服务才能实现其某些功能 我一直在研究是否有一种简单的方法来测试用户是否打开了它们 这样如果没有打开 我可以显示不同的视图 除了 IOS 或 Android
  • JQuery、Flot、值标签、中心

    是否可以将值标签放置在条形上 使它们位于条形的中心 如果我设置栏align center 条形上的标签偏离且不居中
  • VBA 挂在 ie.busy 和 Readystate 检查上

    我正在尝试从网站上获取一些足球运动员数据来填充私人使用的数据库 我已经在下面包含了整个代码 第一部分是一个循环程序 它调用第二个函数来填充数据库 去年夏天 我在 MSAccess 中运行了这段代码来填充数据库 效果非常好 现在 在计划挂起之
  • 如何在 Android (kotlin) 中访问资产包数据

    我使用 asset pack 库将一些资源打包到我的 Android kotlin 应用程序中 https developer android com guide app bundle asset delivery build native
  • 如何解决GKE容器中的EADDRINUSE问题?

    我是容器和 GKE 的新手 我曾经运行我的节点服务器应用程序npm run debug我也尝试使用我的容器的 shell 在 GKE 上执行此操作 当我登录到 shell 时myapp容器并执行此操作我得到 gt email protect