# mysql.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv1
spec:
capacity:
storage: 5Gi
storageClassName: mysql-5-7-volume-storage
accessModes:
- ReadWriteMany
nfs:
server: 172.16.200.230
path: "/docker/mysql_5_7"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-5-7
labels:
name: mysql-5-7
spec:
serviceName: mysql-5-7
replicas: 1
selector:
matchLabels:
app: mysql-5-7-service
template:
metadata:
labels:
app: mysql-5-7-service
spec:
terminationGracePeriodSeconds: 0
containers:
- name: mysql-5-7-service
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
protocol: TCP
volumeMounts:
- name: mysql-5-7-volume
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
volumeClaimTemplates:
- metadata:
name: mysql-5-7-volume
spec:
accessModes: [ "ReadWriteMany" ]
resources:
requests:
storage: 5Gi
storageClassName: mysql-5-7-volume-storage
# 输入命令查看
kubectl describe pods mysql-5-7-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/mysql-5-7-0 to base-node01
Warning FailedScheduling <unknown> default-scheduler persistentvolumeclaim "mysql-5-7-volume-mysql-5-7-0" not found
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "mysql-5-7-0": pod has unbound immediate PersistentVolumeClaims
Warning FailedScheduling <unknown> default-scheduler error while running "VolumeBinding" filter plugin for pod "mysql-5-7-0": pod has unbound immediate PersistentVolumeClaims
Normal Created 5m43s kubelet, base-node01 Created container mysql-5-7-service
Normal Started 5m43s kubelet, base-node01 Started container mysql-5-7-service
Normal Pulled 5m43s kubelet, base-node01 Container image "mysql:5.7" already present on machine
# 查看pv
[root@base-master scripts]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv1 5Gi RWX Retain Bound default/mysql-5-7-volume-mysql-5-7-0 mysql-5-7-volume-storage 5m15s
# 查看pvc
[root@base-master scripts]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-5-7-volume-mysql-5-7-0 Bound mysql-pv1 5Gi RWX mysql-5-7-volume-storage 6m7s
# describe pv
[root@base-master scripts]# kubectl describe pv mysql-pv1
Name: mysql-pv1
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"mysql-pv1"},"spec":{"accessModes":["ReadWriteMany"],"cap...
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: mysql-5-7-volume-storage
Status: Bound
Claim: default/mysql-5-7-volume-mysql-5-7-0
Reclaim Policy: Retain
Access Modes: RWX
VolumeMode: Filesystem
Capacity: 5Gi
Node Affinity: <none>
Message:
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 172.16.200.230
Path: /docker/mysql_5_7
ReadOnly: false
Events: <none>
# describe pvc
[root@base-master scripts]# kubectl describe pvc mysql-5-7-volume-mysql-5-7-0
Name: mysql-5-7-volume-mysql-5-7-0
Namespace: default
StorageClass: mysql-5-7-volume-storage
Status: Bound
Volume: mysql-pv1
Labels: app=mysql-5-7-service
Annotations: pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 5Gi
Access Modes: RWX
VolumeMode: Filesystem
Mounted By: mysql-5-7-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 9m17s persistentvolume-controller storageclass.storage.k8s.io "mysql-5-7-volume-storage" not found
这个错误好像是因为pvc没有正常执行造成的,但是pvc为什么会报一个
storageclass.storage.k8s.io "mysql-5-7-volume-storage" not found 的错误?
硬盘空间是足够的。nfs也通过测试,完全可用。
另外不仅仅是mysql,其他一切需要有状态服务,都会碰到类似的问题,比如mongodb, pgsql。都因为这个问题无法安装。
求解....
https://kubernetes.io/zh/docs...
补充楼上答案,
StorageClass
是kubernetes用来管理磁盘动态分配的. 为什么需要StorageClass
呢.因为 pvc 通常是跟云厂商以及集群本地磁盘挂钩的. 假设你固定声明了 pvc. 那么可能造成你的服务在阿里云的集群上运行没问题, 可万一迁移到了其他云厂商, 你就得修改pvc. 所以如果使用StorageClass. 集群就会通过对应的StorageClass规则来自动帮你分配磁盘以及创建pvc.
以上只是个人观点,如有不足欢迎补充.
那么回到现在
mysql-5-7-volume-storage not found
这个错误. 题主有两个选择.StorageClass
.storageClassName: mysql-5-7-volume-storage
. 然后自行创建对应的pvc