一项服务中的Kubernetes Docker / MySQL多个数据库

时间:2018-07-26 12:50:50

标签: mysql docker kubernetes

我在一个mysql服务中需要多个数据库。

apiVersion: v1
kind: Service
metadata:
  name: database
  labels:
    app: keyshake
spec:
  ports:
    - port: 3306
  selector:
    app: keyshake
    tier: database
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-pv-claim
  labels:
    app: keyshake
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: database
  labels:
    app: keyshake
spec:
  selector:
    matchLabels:
      app: keyshake
      tier: database
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: keyshake
        tier: database
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_RANDOM_ROOT_PASSWORD
          value: "yes"
        - name: MYSQL_USER
          value: keyshake
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: database-password
              key: password
        ports:
        - containerPort: 3306
          name: database
        volumeMounts:
        - name: database-persistent-storage
          mountPath: /var/lib/mysql
        - name: mysql-initdb
          mountPath: /docker-entrypoint-initdb.d
      volumes:
      - name: database-persistent-storage
        persistentVolumeClaim:
          claimName: database-pv-claim
      - name: mysql-initdb
        configMap:
          name: mysql-initdb-config

这是我的配置。 现在,我正在使用具有以下内容的配置映射:

init.sql:

CREATE DATABASE IF NOT EXISTS keyshake;
CREATE DATABASE IF NOT EXISTS pdns;

当我创建服务时,它会记录此/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql,但是当我连接到该服务并列出数据库时,我什么也看不到。

我想我的配置没有正确设置,但是我不知道问题出在哪里。

谢谢。

西奥

1 个答案:

答案 0 :(得分:0)

在docker-compose文件中添加相同的配置,例如:

services:
 mysql1:
    container_name: mysqlserver
    image: mysql:5.6
    ports:
        - 3310:3306
    volumes:
        - ./sqlserver:/docker-entrypoint-initdb.d
    environment:
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_DATABASE: <dbname1>
        MYSQL_USER: <db1user>
        MYSQL_PASSWORD: <db1pass>

mysql2:
    container_name: mysqlserver2
    image: mysql:5.6
    environment:
    volumes:
        - ./sqlserver:/docker-entrypoint-initdb2.d
    ports:
        - 3311:3306
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_DATABASE: <dbname2>
        MYSQL_USER: <db2user>
        MYSQL_PASSWORD: <db2pass>

如果您需要一项服务,如果您的意思是正确的,则需要将该Docker卷加载到您的应用程序中。如果要使用2个数据库配置应用程序,请在Loadbalancer中添加Config.services.mysqlserver1(host,port,pass)之类的属性。

如果您不使用DB Accumulator(例如JPA),则必须单独添加诸如

之类的schema.sql
CREATE DATABASE IF NOT EXISTS keyshake;
CREATE DATABASE IF NOT EXISTS pdns;

并在两个映像实例的docker入口点中添加schema.sql的路径,以代替docker-entrypoint-initdb.sql ----> schema.sql

在端口中配置不同的租户,请参见"docker -ti mysql1 /bin/bash""docker -ti server2 /bin/bash",以了解两个数据库实例是否都具有所需的表。

希望这会有所帮助!!