[英]Kubernetes: Error when creating a StatefulSet with a MySQL container
[英]Kubernetes + MySQL : Creating custom database and user in a Kubernetes container
我正在尝试使用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日
根据要求@Julien Du Bois磁盘已创建。 它出现在云控制台中,当我运行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>
我提到了很多教程和Google Cloud示例。 为了在本地运行mysql docker容器,我的主要参考是docker hub https://hub.docker.com/_/mysql/上的官方映像页面
这对我有用,在本地创建的容器具有新数据库和具有正确权限的用户。
对于kubernetes,我主要参考以下内容
https://cloud.google.com/container-engine/docs/tutorials/persistent-disk/
我只是想使用Django容器连接到它。
您在部署中设置了mysql-disk,而您拥有的磁盘是定制磁盘。 将pdName更改为“定制磁盘”,它将起作用。
当我使用卷并将它们安装到mysql pod时,我遇到了同样的问题。
如mysql的docker镜像文档中所述:
启动mysql映像时,可以通过在docker run命令行上传递一个或多个环境变量来调整MySQL实例的配置。 请注意,如果使用已包含数据库的数据目录启动容器,则以下任何变量都将无效:容器启动时,任何现有数据库都将保持不变。
因此,在旋转轮子之后,我设法通过将要创建的卷的hostPath从“ / data / mysql-pv-volume”更改为“ / var / lib / mysql”来解决了问题
这是一个有助于创建卷的代码段
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
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.