Spring Kubernetes 中的数据源 MySQL
Spring DataSource in Kubernetes for MySQL
我已经在 IBM Cloud 中部署了一个 MySQL 数据库和一个带有 Kubernetes 的 Spring 启动应用程序。 MySQL 数据库有一个部署和一个服务,但它不应该在外面访问,所以我给了他一个集群 ip。但是 Spring 应用程序是负载平衡的,因为它应该对客户端可见。我在 spring 数据源中写的 MySQL 数据源不起作用。在本地情况下,我只写本地主机,但在云中这不起作用?有人知道它是如何工作的吗?
Deployment file:
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
enviroment: test
spec:
selector:
matchLabels:
app: mysql
enviroment: test
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
enviroment: test
spec:
containers:
- image: de.icr.io/test/mysql:5.7
name: db
env:
- name: MYSQL_ROOT_PASSWORD
value: ************
- name: MYSQL_USER
value: ********
- name: MYSQL_PASSWORD
value: ***********
- name: MYSQL_DATABASE
value: *******
ports:
- containerPort: 3306
name: db
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: mysql-pv-claim
那是我的服务:
apiVersion: v1
kind: Service
metadata:
name: mysqlservices
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql
enviroment: test
我知道你不需要我的持久卷索取,但我发送了它。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
labels:
billingType: "monthly"
region: eu-de
zone: Frankfurt
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: ibmc-file-bronze
最后 Spring 引导数据源我不知道我将在 url 中为连接写什么。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
primary="true">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://db/nlfb?useSSL=false" />
<property name="username" value="*****" />
<property name="password" value="******" />
</bean>
谨致问候并感谢您的帮助。
您必须使用 Kubernetes Deployments 的服务名称。这与特定部署有关,即如果您的服务名称是 db 并且它位于命名空间 dev 上,那么您必须编写 dev.db
我已经在 IBM Cloud 中部署了一个 MySQL 数据库和一个带有 Kubernetes 的 Spring 启动应用程序。 MySQL 数据库有一个部署和一个服务,但它不应该在外面访问,所以我给了他一个集群 ip。但是 Spring 应用程序是负载平衡的,因为它应该对客户端可见。我在 spring 数据源中写的 MySQL 数据源不起作用。在本地情况下,我只写本地主机,但在云中这不起作用?有人知道它是如何工作的吗?
Deployment file:
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
enviroment: test
spec:
selector:
matchLabels:
app: mysql
enviroment: test
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
enviroment: test
spec:
containers:
- image: de.icr.io/test/mysql:5.7
name: db
env:
- name: MYSQL_ROOT_PASSWORD
value: ************
- name: MYSQL_USER
value: ********
- name: MYSQL_PASSWORD
value: ***********
- name: MYSQL_DATABASE
value: *******
ports:
- containerPort: 3306
name: db
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: mysql-pv-claim
那是我的服务:
apiVersion: v1
kind: Service
metadata:
name: mysqlservices
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql
enviroment: test
我知道你不需要我的持久卷索取,但我发送了它。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
labels:
billingType: "monthly"
region: eu-de
zone: Frankfurt
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: ibmc-file-bronze
最后 Spring 引导数据源我不知道我将在 url 中为连接写什么。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
primary="true">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://db/nlfb?useSSL=false" />
<property name="username" value="*****" />
<property name="password" value="******" />
</bean>
谨致问候并感谢您的帮助。
您必须使用 Kubernetes Deployments 的服务名称。这与特定部署有关,即如果您的服务名称是 db 并且它位于命名空间 dev 上,那么您必须编写 dev.db