Я новичок в Kubernetes и helm world и пытаюсь развернуть приложение Nodejs с базой данных MYSQL, используя Kubernetes и Helm в Azure kKubernetes Service.
Вот что я сделал до сих пор:
My 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
из моего локальногосистема, это связано успешноlly, это означает, что база данных работает правильно, но что-то не так с моей конфигурацией.
Что здесь может быть не так?
Заранее спасибо!