[英]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.