kubernetes - chown:更改“/var/lib/mysql/”的所有权:在 kubernetes 的启动 pod 中不允许操作
问题描述
当我在 kubernetes v1.15.2 中启动我的 mysql 5.7 pod 时,日志显示如下:
2020-05-30 13:08:04+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.30-1debian10 started.
chown: changing ownership of '/var/lib/mysql/': Operation not permitted
这是我的 mysql yaml 定义:
apiVersion: v1
kind: Service
metadata:
name: apollo-mysql
namespace: sre
spec:
ports:
- port: 3306
selector:
app: mysql
clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: apollo-mysql
namespace: sre
spec:
selector:
matchLabels:
app: apollo-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: apollo-mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: gfwge4LucnXwfefewegLwAd29QqJn4
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: apollo-mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: apollo-mysql-persistent-storage
persistentVolumeClaim:
claimName: apollo-mysql-pv-claim
这是我的光伏定义:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-apollo-mysql-pv1
namespace: sre
labels:
alicloud-pvname: apollo-mysql-data-db
spec:
capacity:
storage: 5Gi
storageClassName: apollo-mysql-data-db
mountOptions:
- vers=4.0
- noresvport
accessModes:
- ReadWriteOnce
nfs:
server: "192.168.64.237"
path: "/mnt/data/apollodb/apollopv"
persistentVolumeReclaimPolicy: Retain
我已经将 mod 更改为 777,如下所示:
chmod 777 /mnt/data/apollodb/apollopv
那么问题出在哪里,我应该怎么做才能解决这个问题?我检查了 selinux 状态,它被禁用了。
[miao@meowk8sslave3 apollodb]$ /usr/sbin/sestatus -v
SELinux status: disabled
这是我的 nfs 导出定义:
/mnt/data/apollodb/apollopv *(rw,sync,no_subtree_check,no_root_squash)
解决方案
您提供的 yaml 缺少 PVC,它指定storageClass
要安装的。
看起来您正在尝试挂载一个外部 NFS(可能有一些云提供商),在这种情况下,您需要nfs-utils
安装并执行mount -t nfs 192.168.64.237:/entrypoint /mnt/...
.
你的 PV 说/mnt/data/apollodb/apollopv
,它应该是 nfs 服务器的入口点,而不是它要在文件系统中挂载的位置。
要完成这项工作,请为自己准备一个 nfs 服务器(获取 IP 地址和入口点;例如 192.168.64.237:/nfs),然后将其挂载到您的 pod 中,如下所示:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: apollo-mysql
namespace: sre
spec:
selector:
matchLabels:
app: apollo-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: apollo-mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: gfwge4LucnXwfefewegLwAd29QqJn4
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: apollo-mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: apollo-mysql-persistent-storage
nfs:
server: 192.168.64.237
path: "/nfs"
您不需要存储类、PVC 和 PV。您需要的一切都在 pod 中,并且在外部您拥有 nfs 服务器。
推荐阅读
- php - 阻止 SQL 插入重复项 (php)
- python - Python Blackjack game: Issues with dictionary for values
- jquery - jqgrid远程数据+冻结列+内联动作按钮=动作按钮无响应?
- scala - Spark:用 Spark 绘制模型的学习曲线
- reactjs - 如何将scss文件作为变量导入与打字稿反应
- android - RecyclerView 不能在 onBindViewHolder() 中使用 setText()
- php - 在php中解析为SimpleXML后XML字符串为空
- git - 只获取已经合并到 master/develop 的远程分支
- android - WebView onKeyListener 不起作用
- vba - 条件满足时在 Excel 中复制和粘贴行而不覆盖