Linux Kubernetes-本地存储-节点协作不工作
我试图让持久本地存储工作,我创建了以下PV、PVC和部署。但pod因错误而陷入挂起状态:Linux Kubernetes-本地存储-节点协作不工作,linux,kubernetes,Linux,Kubernetes,我试图让持久本地存储工作,我创建了以下PV、PVC和部署。但pod因错误而陷入挂起状态: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 63s (x7 over 8m8s) defaul
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 63s (x7 over 8m8s) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't find available persistent volumes to bind.
我有3个节点->1个主节点,2个工作节点
NAME STATUS ROLES AGE VERSION LABELS
elitedesk Ready master 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=elitedesk,kubernetes.io/os=linux,node-role.kubernetes.io/master=
optiplex Ready <none> 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=optiplex,kubernetes.io/os=linux
r720 Ready <none> 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=r720,kubernetes.io/os=linux
名称状态角色年龄版本标签
elitedesk Ready master 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=elitedesk,kubernetes.io/os=linux,node-role.kubernetes.io/master=
optiplex Ready 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=optiplex,kubernetes.io/os=linux
r720 Ready 40d v1.18.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=r720,kubernetes.io/os=linux
不知道我做错了什么。
PersistentVolume的路径只是一个目录,而不是装载的存储设备。我的问题是PersistentVolumeClaim的
选择器。
在PV中添加标签并在PVC中选择该标签修复了我的问题
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: plex-config-volume
labels:
storage-type: plex-config-volume
spec:
capacity:
storage: 400Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: standard
local:
path: /mnt/kube-storage/plex
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- r720
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: plex-config-claim
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
selector:
matchLabels:
storage-type: plex-config-volume
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- image: maersk/nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /config
name: config-nfs
- mountPath: /data
name: data-nfs
volumes:
- name: config-nfs
emptyDir: {}
- name: data-nfs
persistentVolumeClaim:
claimName: plex-config-claim
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: plex-config-volume
labels:
storage-type: plex-config-volume
spec:
capacity:
storage: 400Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: standard
local:
path: /mnt/kube-storage/plex
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- r720
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: plex-config-claim
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
selector:
matchLabels:
storage-type: plex-config-volume
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- image: maersk/nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /config
name: config-nfs
- mountPath: /data
name: data-nfs
volumes:
- name: config-nfs
emptyDir: {}
- name: data-nfs
persistentVolumeClaim:
claimName: plex-config-claim