【问题标题】:Kubernetes + MySQL : Creating custom database and user in a Kubernetes containerKubernetes + MySQL:在 Kubernetes 容器中创建自定义数据库和用户
【发布时间】:2017-01-27 09:04:12
【问题描述】:

我正在尝试使用 Google Container Engine 和 Kubernetes 创建一个 Django + MySQL 应用程序。按照官方 MySQL docker 镜像和 Kubernetes 文档中的文档来创建 MySQL 容器,我创建了以下复制控制器

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mysql
  name: mysql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
      - image: mysql:5.6.33
        name: mysql
        env:
          #Root password is compulsory
        - name: "MYSQL_ROOT_PASSWORD"
          value: "root_password"
        - name: "MYSQL_DATABASE"
          value: "custom_db"
        - name: "MYSQL_USER"
          value: "custom_user"
        - name: "MYSQL_PASSWORD"
          value: "custom_password"
        ports:
        - name: mysql
          containerPort: 3306
        volumeMounts:
          # This name must match the volumes.name below.
          - name: mysql-persistent-storage
            mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          gcePersistentDisk:
            # This disk must already exist.
            pdName: mysql-disk
            fsType: ext4

根据文档,传递环境变量 MYSQL_DATABASE。 MYSQL_USER,MYSQL_PASSWORD,将使用该密码创建一个新用户,并为新创建的数据库分配权限。但这不会发生。当我 SSH 进入该容器时,设置了 ROOT 密码。但是既没有创建用户,也没有创建数据库。

我已经通过在本地运行并传递类似这样的相同环境变量对此进行了测试

docker run -d --name some-mysql \
    -e MYSQL_USER="custom_user" \
    -e MYSQL_DATABASE="custom_db" \
    -e MYSQL_ROOT_PASSWORD="root_password" \
    -e MYSQL_PASSWORD="custom_password" \
    mysql

当我通过 SSH 连接到该容器时,数据库和用户都已创建,一切正常。

我不确定我在这里做错了什么。谁能指出我的错误。我整天都在这。

编辑:2016 年 9 月 20 日

根据要求 @朱利安杜波依斯 磁盘已创建。它出现在云控制台中,当我运行 describe 命令时,我得到以下输出

Command : gcloud compute disks describe mysql-disk

Result: 
creationTimestamp: '2016-09-16T01:06:23.380-07:00'
id: '4673615691045542160'
kind: compute#disk
lastAttachTimestamp: '2016-09-19T06:11:23.297-07:00'
lastDetachTimestamp: '2016-09-19T05:48:14.320-07:00'
name: mysql-disk
selfLink: https://www.googleapis.com/compute/v1/projects/<details-withheld-by-me>/disks/mysql-disk
sizeGb: '20'
status: READY
type: https://www.googleapis.com/compute/v1/projects/<details-withheld-by-me>/diskTypes/pd-standard
users:
- https://www.googleapis.com/compute/v1/projects/<details-withheld-by-me>/instances/gke-cluster-1-default-pool-e0f09576-zvh5
zone: https://www.googleapis.com/compute/v1/projects/<details-withheld-by-me>

我参考了很多教程和谷歌云示例。要在本地运行 mysql docker 容器,我的主要参考是 docker hub 上的官方图像页面 https://hub.docker.com/_/mysql/

这对我有用,并且在本地创建的容器有一个新的数据库和具有正确权限的用户。

对于 kubernetes,我的主要参考如下

https://cloud.google.com/container-engine/docs/tutorials/persistent-disk/

我只是尝试使用 Django 容器连接到它。

【问题讨论】:

  • 你的磁盘是在 GCE 上创建的吗?你能显示日志输出吗?
  • 你能链接到你所指的文档吗?
  • @JulienDuBois 和 Anirudh Ramanathan。我已按要求编辑了问题并提供了更多详细信息。如果还需要什么,请告诉我。目前我已经通过 SSH 进入容器并创建了所需的用户和数据库以继续开发。一旦我想部署到生产环境,我仍然需要一种方法来自动化这个过程。
  • 你能运行它吗?我也面临同样的问题

标签: mysql django docker kubernetes


【解决方案1】:

我在使用卷并将它们挂载到 mysql pod 时遇到了同样的问题。

mysql's docker image的文档中所述:

当你启动mysql镜像时,你可以通过在docker run命令行中传递一个或多个环境变量来调整MySQL实例的配置。 请注意,如果您使用已包含数据库的数据目录启动容器,则以下任何变量都不会产生任何影响:任何预先存在的数据库在容器启动时将始终保持不变。

所以在旋转轮子之后,我设法通过将我正在创建的卷的 hostPath 从“/data/mysql-pv-volume”更改为“/var/lib/mysql”来解决问题

这是一个可能有助于创建卷的代码 sn-p

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  persistentVolumeReclaimPolicy: Delete /* For development Purposes only */
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib/mysql"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

希望有所帮助。

【讨论】:

    【解决方案2】:

    您在部署中设置了 mysql-disk 并且您拥有的磁盘是自定义磁盘。将 pdName 更改为 custom-disk 即可。

    【讨论】:

    • 真的很抱歉。是我的错。我正在编辑名称,因为我不确定在公共平台上发布时必须保护多少信息。我会改变的。但是磁盘名称是正确的。正如我在问题中提到的,我进入了那个容器,创建了数据库,然后将 Django 与它连接起来,它工作正常。但是当我创建 pod 时没有创建数据库。
    猜你喜欢
    • 2021-03-04
    • 2019-08-05
    • 2020-02-15
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2019-04-10
    • 2023-01-17
    相关资源
    最近更新 更多