【问题标题】:How to create mysql users and database during deployment of mysql in kubernetes?Kubernetes部署mysql时如何创建mysql用户和数据库?
【发布时间】:2021-03-04 20:33:17
【问题描述】:

我想在 kubernetes 中创建 mysql 部署时创建一些 mysql 用户和数据库。 表示在创建mysql部署时,它还应该在mysql中创建一些用户和数据库。

以下是我为 mysql 创建的部署配置。让我知道是否可以在这里添加一些数据来创建用户和数据库。

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: v1
kind: Service
metadata:
  name: phpmyadmin
spec:
  ports:
  - port: 80
    protocol: TCP
    nodePort: 30081
  selector:
    app: mysql
  type: NodePort
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              configMapKeyRef:
                name: mysql-config
                key: mysql_root_password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      - image: phpmyadmin:5
        name: phpmyadmin
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: password
          - name: PMA_HOST
            value: mysql
        ports:
        - containerPort: 80
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

【问题讨论】:

    标签: mysql kubernetes deployment openshift


    【解决方案1】:

    您可以使用postStartContainer Lifecycle Hooks 来完成。它使您在启动 mysql 容器后运行额外的 SQL 或脚本。

    例如,如果您创建自己的脚本create_user.sh,通过mysql 命令执行诸如CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password'; 之类的DDL,那么您可以按如下方式对其进行配置。

        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            lifecycle:
              postStart:
                exec:
                  command: ["/bin/bash", "-c", "/path/to/create_users.sh"]
    

    更多配置详情请参考Attach Handlers to Container Lifecycle Events

    【讨论】:

      【解决方案2】:

      mysql docker image 中(在“初始化新实例”下):您可以将/docker-entrypoint-initdb.d 用作一个点,以便为数据库初始化卷装载脚本和SQL 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多