【发布时间】:2020-06-25 00:05:45
【问题描述】:
使用 Springboot 2.2.4 和 Openshift 的本地发行版(Minishift、Kubernetes Master 1.11、Openshift Web Console 3.11)。
应用程序本身只是一个 spring-boot-starter-data-rest CRUD,用于在 Openshift 的 pod 中配置的简单 Employee 实体。数据源是另一个容器中的 MySQL 服务。
在部署时,一些数据会加载到员工表中。仅 4 名员工用于测试。
DROP TABLE IF EXISTS employee;
CREATE TABLE employee (
id int(11) NOT NULL AUTO_INCREMENT,
first_name varchar(45) DEFAULT NULL,
last_name varchar(45) DEFAULT NULL,
email varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
--
-- Data for table `employee`
--
INSERT INTO employee VALUES
(1,'Leslie','Andrews','leslie@luv2code.com'),
(2,'Emma','Baumgarten','emma@luv2code.com'),
(3,'Avani','Gupta','avani@luv2code.com'),
(4,'Yuri','Petrov','yuri@luv2code.com');
一切都很完美。所有端点都已很好地发布,并且一切正常。
但出于好奇,我正在尝试连接一些 mysql 查看器来检查它在启动时加载的数据,然后在 API 使用时更改。但是我在任何地方都找不到桌子。我正在尝试两种方法:
- 进入 mysql 容器并通过命令行(mysql 命令)。我连接到数据库,但它是空的(没有表)。
- 使用 phpMysqlAdmin 实例配置第三个 pod,该实例显然也完美连接到数据库,但再次显示没有表或数据(除了 information_schema)。
configmap.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://mydatabase:3306/mydatabase
fabric8\deployment.yml
spec:
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: SPRING_DATASOURCE_USER
valueFrom:
secretKeyRef:
name: mydatabase
key: database-user
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: mydatabase
key: database-password
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 180
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 30
有什么想法吗?
【问题讨论】:
-
您不能轻易地在容器中运行数据库。想象一下,您的集群中有 3 个数据库实例,A、B 和 C(每个都在不同的节点上)。现在,假设您的负载均衡器选择实例 A 来运行您的 SQL 初始化,幸运的是,您的应用程序被路由到同一个容器。现在,当您打开查看器(或第二个消费者容器)时,负载均衡器会将您连接到不同节点上的不同实例,例如实例 B。您可以在实例 B 中任意搜索,但不会找到仅存在于实例 A 中的表。
标签: mysql docker kubernetes containers openshift