【问题标题】:Helm Kubernetes setup mysql with NodeJs applicationHelm Kubernetes 使用 NodeJs 应用程序设置 mysql
【发布时间】:2019-06-30 11:30:45
【问题描述】:

我是 Kubernetes 和 helm world 的新手,我正在尝试在 Azure kKubernetes 服务上使用 Kubernetes 和 Helm 部署一个带有 MYSQL 数据库的 Nodejs 应用程序。

这是我到目前为止所做的:

我的Dockerfile

FROM node:10-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 32000
CMD [ "node", "app.js" ]

我已使用此 Dockerfile 构建了映像,然后将其推送到我的 ACR 注册表上的存储库。 此应用程序正在使用mysql 数据库,因此在安装我的应用程序的舵图之前,我已使用以下命令在我的集群上安装了mysql 舵图:

helm install --name mysql --set mysqlRootPassword=rootpassword,mysqlUser=mysql,mysqlPassword=my-password,mysqlDatabase=mydatabase,persistence.existingClaim=mysql-pvc stable/mysql

之后,我将集群中的两个变量导出为:

MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306

然后将端口作为后台进程转发,例如:

kubectl port-forward svc/mysql 3306

在我安装了自己的应用程序图表之后,我只是通过运行helm create mychart 创建了一个图表,然后创建了一个自定义的values.yaml 文件并在安装时传递它,如下所示:

image:
    registry: helmcr.azurecr.io
    repository: helmcr.azurecr.io/helloworldtest01
    tag: 0.3
service:
    name: http
    type: LoadBalancer
    port: 32000
    internalPort: 32000
hosts:
    - name: mychart.local
      path: /

安装两个图表后,应用程序应该连接到mysql,但它显示:CrashLoopBackOff

更新:这是我在我的

中配置数据库连接的方式
application:
module.exports = {
    adapters: {
        mysqlAdapt: mysqlAdapter
    },

  connections: {
    mysqlDB: {
        adapter: 'mysqlAdapt',
        host: process.env.MYSQL_SERVICE_HOST,
        database: 'mydatabase',
        user:'root',
        password:'my-password',
        port: process.env.MMYSQL_SERVICE_PORT,
        supportBigNumbers:true, //true/false
        debug:['ComQueryPacket'], //false or array of node-mysql debug options
        trace:true //true/false
    } 
  }
};

当我运行以下命令获取日志时:

kubectl logs myrel09-mychart09-5b8bb86788-9k627 -p

这里是上面命令的输出:

Wed, 06 Feb 2019 13:29:21 GMT body-parser deprecated bodyParser: use individual json/urlencoded middlewares at app.js:10:9
Wed, 06 Feb 2019 13:29:21 GMT body-parser deprecated undefined extended: provide extended option at node_modules/body-parser/index.js:105:29
Wed, 06 Feb 2019 13:29:21 GMT express deprecated app.del: Use app.delete instead at node_modules/express-resource/index.js:153:19
Load model crud
(node:1) [DEP0095] DeprecationWarning: timers.enroll() is deprecated. Please use setTimeout instead.

/usr/src/app/app.js:32
    if (err) throw err;
             ^
Error (E_UNKNOWN) :: Encountered an unexpected error
: Could not connect to MySQL:
Error: connect ECONNREFUSED 127.0.0.1:3306
    at afterwards (/usr/src/app/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
    at /usr/src/app/node_modules/sails-mysql/lib/connections/spawn.js:40:7
    at Handshake.onConnect [as _callback] (/usr/src/app/node_modules/sails-mysql/node_modules/mysql/lib/Pool.js:54:9)
    at Handshake.Sequence.end (/usr/src/app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
    at Protocol.handleNetworkError (/usr/src/app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:364:14)
    at PoolConnection.Connection._handleNetworkError (/usr/src/app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:421:18)
    at Socket.emit (events.js:189:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

当我尝试从本地系统连接到这个 mysql 数据库时,它已成功连接,这意味着数据库工作正常,但我的配置有问题。

这里有什么问题?

提前致谢!

【问题讨论】:

  • 节点 pod 正在尝试连接自己,您需要更改它。
  • 嗨@PaulAnnetts 我该如何改变呢?
  • 这取决于您未共享的服务的 helm 部署以及我不知道的 mysql helm 的详细信息。但不能是环回本地地址 127.0.0.1。我建议你研究一下 kubernetes 网络的工作原理以及 mysql helm chart 的详细信息。

标签: mysql node.js docker kubernetes kubernetes-helm


【解决方案1】:

由于您使用同一个集群来部署这两个应用程序,因此您也可以使用集群 ip。

如果你想使用端口转发,我认为你应该使用你节点的 ip 而不是 localhost ip。

【讨论】:

  • 嗨@RajeshDeshpande,我需要将我的pod ip 导出为MYSQL_HOST,然后需要在我的应用程序中使用它吗?
  • 如果您在创建应用程序 pod 之前创建 db 服务,它将是我的默认设置。首先部署 mysql 图表和它们的应用程序图表。然后转到应用程序容器,您将看到 mysql 服务详细信息。无需导出任何东西。这不过是通过环境变量发现服务。
  • 我在做同样的事情,首先部署应用程序图表,然后部署mysql 图表,但是我需要在我的应用程序中定义什么host 进行连接?
  • 订单很重要。先部署mysql图表,再部署应用。这样 mysql 服务主机和端口将在应用程序容器中可用。如果你遵循这个不需要导出任何变量
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 2020-06-15
  • 2019-04-18
  • 2021-10-24
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多