我已经在同一个命名空间下创建了mysql k8s容器和nodejs k8s容器。我无法连接mysql db。(sequalize)
我尝试使用'''http://mysql.e-commerce.svc.cluster.local:3306'''连接。但是我收到“ SequelizeHostNotFoundError”错误。
这是我的服务和部署Yaml文件。
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: e-commerce
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30306
selector:
app: mysql
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: e-commerce
spec:
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql-container
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim```
答案 0 :(得分:1)
您正尝试使用http协议访问数据库,保留该数据库或使用mysql:// ip:3306进行更改。有些客户端不接受数据库的DNS名称,因此您可以检查服务的ClusterIP并尝试使用该IP。
答案 1 :(得分:1)
从ClusterIP为我工作,或者采用更好的方法来使用本地群集服务ex的主机名。 db-mysql.default.svc.cluster.local
。这样,如果集群重新启动并且IP发生了变化,那么您就可以覆盖它。
答案 2 :(得分:0)
尝试:
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: e-commerce
spec:
clusterIP: None
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
具有相同的连接字符串。
答案 3 :(得分:0)
如社区成员FL3SH所述,您可以将var comments = await _unitOfWork.Repository<Comment>().Query()
.Include(x => x.User)
.Include(c => c.Post)
.Select(x => new CommentViewModel
{
Comment = _mapper.Map<Comment, CommentDto>(x),
})
.ToListAsync();
更改为spec.type
。
您可以使用稳定的头盔图表wordpress/mysql重现此任务。
对于新创建的广告连播:
clusterIP
和服务:
mysql-mariadb-0
mysql-wordpress
成功部署后,您可以通过运行以下命令来验证您的服务是否在mysql-mariadb
mysql-wordpress
窗格中工作:
mysql-wordpress
此外,您可以安装nslooukp,telnet等其他工具:
kubectl exec -it mysql-wordpress-7cb4958654-tqxm6 -- /bin/bash
与数据库的服务和连接性可以通过运行f.e.这些命令:
apt-get update && apt-get install dnsutils telnet
示例输出:
nslookup mysql-mariadb
telnet mysql-mariadb 3306
mysql -uroot -hmysql-mariadb -p<your_db_password>
您应该能够使用服务名称或IP地址进行连接。 在此掌舵图中,您还可以找到statefulset的模板,以创建mysql pod。
更新
从第二个广告连播开始ubuntu运行此示例-Node.js Mysql,安装nodes.js并创建与数据库 demo_db_connection.js
的连接示例:
nslookup mysql-mariadb
Server: 10.125.0.10
Address: 10.125.0.10#53
Non-authoritative answer:
Name: mysql-mariadb.default.svc.cluster.local
Address: 10.125.0.76
mysql -u root -hmysql-mariadb -p<your_db_password>
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2068
Server version: 10.1.40-MariaDB Source distribution
运行它:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "mysql-mariadb",
user: "root",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});