如何在Kubernetes中为MySQL数据使用PersistentVolume
我正在Minikube上开发数据库环境。 我想通过Kubernetes的PersistentVolume函数来持久化MySQL数据。 但是,如果hostPath指定了/var/lib/MySQL(MySQL数据目录),则在启动MySQL服务器时会发生错误,并且不会启动 kubernetes-config.yaml如何在Kubernetes中为MySQL数据使用PersistentVolume,mysql,kubernetes,Mysql,Kubernetes,我正在Minikube上开发数据库环境。 我想通过Kubernetes的PersistentVolume函数来持久化MySQL数据。 但是,如果hostPath指定了/var/lib/MySQL(MySQL数据目录),则在启动MySQL服务器时会发生错误,并且不会启动 kubernetes-config.yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs001-pv labels:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs001-pv
labels:
app: nfs001-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
nfs:
path: /share/mydata
server: 192.168.99.1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: ""
selector:
matchLabels:
app: nfs001-pv
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: sk-app
labels:
app: sk-app
spec:
replicas: 1
selector:
matchLabels:
app: sk-app
template:
metadata:
labels:
app: sk-app
spec:
containers:
- name: sk-app
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: mydata
volumes:
- name: mydata
persistentVolumeClaim:
claimName: nfs-claim
---
apiVersion: v1
kind: Service
metadata:
name: sk-app
labels:
app: sk-app
spec:
type: NodePort
ports:
- port: 3306
nodePort: 30001
selector:
app: sk-app
我如何启动它
--附言--
当我尝试“kubectl日志”时,我收到以下错误消息
chown:更改“/var/lib/mysql/”的所有权:不允许操作
当我尝试“kubectl描述xxx”时,我得到了以下结果
kubectl描述pv:
Name: nfs001-pv
Labels: app=nfs001-pv
Annotations: pv.kubernetes.io/bound-by-controller=yes
StorageClass:
Status: Bound
Claim: default/nfs-claim
Reclaim Policy: Retain
Access Modes: RWX
Capacity: 1Gi
Message:
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 192.168.99.1
Path: /share/mydata
ReadOnly: false
Events: <none>
名称:nfs001 pv
标签:app=nfs001 pv
注释:pv.kubernetes.io/boundbycontroller=yes
StorageClass:
状态:绑定
声明:默认/nfs声明
回收策略:保留
访问模式:RWX
容量:1Gi
信息:
资料来源:
类型:NFS(在pod的生命周期内持续的NFS装载)
服务器:192.168.99.1
路径:/share/mydata
只读:false
活动:
kubectl描述pvc:
Name: nfs-claim
Namespace: default
StorageClass:
Status: Bound
Volume: nfs001-pv
Labels: <none>
Annotations: pv.kubernetes.io/bind-completed=yes
pv.kubernetes.io/bound-by-controller=yes
Capacity: 1Gi
Access Modes: RWX
Events: <none>
名称:nfs声明
名称空间:默认值
StorageClass:
状态:绑定
数量:nfs001 pv
标签:
注释:pv.kubernetes.io/bind completed=yes
pv.kubernetes.io/控制器绑定=是
容量:1Gi
访问模式:RWX
活动:
kubectl描述部署:
Name: sk-app
Namespace: default
CreationTimestamp: Tue, 25 Sep 2018 14:22:34 +0900
Labels: app=sk-app
Annotations: deployment.kubernetes.io/revision=1
Selector: app=sk-app
Replicas: 1 desired | 1 updated | 1 total | 0 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=sk-app
Containers:
sk-app:
Image: mysql:5.7
Port: 3306/TCP
Environment:
MYSQL_ROOT_PASSWORD: password
Mounts:
/var/lib/mysql from mydata (rw)
Volumes:
mydata:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: nfs-claim
ReadOnly: false
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: sk-app-d58dddfb (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 23s deployment-controller Scaled up replica set sk-app-d58dddfb to 1
Name:sk应用程序
名称空间:默认值
CreationTimestamp:2018年9月25日星期二14:22:34+0900
标签:app=sk app
注释:deployment.kubernetes.io/revision=1
选择器:app=sk-app
副本:1个需要的副本| 1个更新的副本| 1个总数| 0个可用副本| 1个不可用副本
策略类型:RollingUpdate
最小就绪秒:0
滚动更新策略:最多25%不可用,最多25%喘振
Pod模板:
标签:app=sk app
容器:
sk应用程序:
图片:mysql:5.7
端口:3306/TCP
环境:
MYSQL\u ROOT\u密码:PASSWORD
挂载:
/来自mydata(rw)的var/lib/mysql
卷数:
我的数据:
类型:PersistentVolumeClaim(对同一命名空间中PersistentVolumeClaim的引用)
索赔名称:nfs索赔
只读:false
条件:
类型状态原因
---- ------ ------
可用的错误最小值ReplicaSunAvailable
正在进行的真实复制
旧复制集:
新复制集:sk-app-d58dddfb(创建了1/1个复制副本)
活动:
从消息中键入原因年龄
---- ------ ---- ---- -------
正常扩展ReplicaSet 23s部署控制器将副本集sk-app-d58dddfb扩展到1
卷看起来不错,所以看起来您的nfs卷的根目录上有一个权限问题,该卷在容器上装载为/var/lib/mysql
你可以:
1) 使用nfs装载命令装载该nfs卷并运行:
chmod 777 . # This gives rwx to anybody so need to be mindful.
2) 在部署中运行initContainer,如下所示:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: sk-app
labels:
app: sk-app
spec:
replicas: 1
selector:
matchLabels:
app: sk-app
template:
metadata:
labels:
app: sk-app
spec:
initContainers:
- name: init-mysql
image: busybox
command: ['sh', '-c', 'chmod 777 /var/lib/mysql']
volumeMounts:
- mountPath: /var/lib/mysql
name: mydata
containers:
- name: sk-app
image: mysql:5.7
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: mydata
volumes:
- name: mydata
persistentVolumeClaim:
claimName: nfs-claim
accessModes:
- ReadWriteMany
您能否指定错误消息是什么?您能否发布
kubectl descripe pvc
、kubectl descripe deployment
和kubectl descripe pv
?@Maruf Tuhin-感谢您的评论。我在问题上添加了错误消息。请检查。@Rico-谢谢您的评论。我在我的问题上添加了结果。请检查一下。谢谢你的回答。我尝试了你的建议,但是kubernetes返回了CrashLoopBackOffchown:更改“/var/lib/mysql/”的所有权:不允许操作
。尝试将accessMode
设置添加到ReadWriteMany
。否则,您必须更改源nfs文件系统的权限