数字海洋(DigitalOcean)Pod存在未绑定的立即PersistentVolumeClaims。

15
我正在尝试在DigitalOcean的Kubernetes中运行Redis集群。作为poc,我只是尝试运行在线上找到的一个示例(https://github.com/sanderploegsma/redis-cluster/blob/master/redis-cluster.yml),当在minikube上本地运行时,它能够适当地启动pod。
但是,在Digital Ocean上运行时,我总是收到以下错误:
警告 FailedScheduling 3s (x8 over 17s) default-scheduler pod has unbound immediate PersistentVolumeClaims (repeated 4 times)
考虑到我没有改变任何内容,我不确定为什么这不起作用。有人有任何建议吗?
编辑:一些额外信息
$ kubectl describe pvc  
Name:          data-redis-cluster-0
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        
Labels:        app=redis-cluster
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
Events:
  Type       Reason         Age                     From                         Message
  ----       ------         ----                    ----                         -------
  Normal     FailedBinding  3m19s (x3420 over 14h)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set
Mounted By:  <none>

编辑:设置默认的存储类部分解决了问题!然而,节点现在无法找到可用的卷进行绑定:

kubectl描述pvc:

Name:          data-redis-cluster-0
Namespace:     default
StorageClass:  local-storage
Status:        Pending
Volume:        
Labels:        app=redis-cluster
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
Events:
  Type       Reason                Age                     From                         Message
  ----       ------                ----                    ----                         -------
  Normal     WaitForFirstConsumer  12m (x9 over 13m)       persistentvolume-controller  waiting for first consumer to be created before binding
  Normal     WaitForFirstConsumer  3m19s (x26 over 9m34s)  persistentvolume-controller  waiting for first consumer to be created before binding

使用kubectl命令查看redis-cluster-0的详细信息

....
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  16m (x25 over 17m)   default-scheduler  0/5 nodes are available: 1 node(s) had taints that the pod didn't tolerate, 4 node(s) didn't find available persistent volumes to bind.

kubectl describe sc

Name:                  local-storage
IsDefaultClass:        Yes
Annotations:           storageclass.kubernetes.io/is-default-class=true
Provisioner:           kubernetes.io/no-provisioner
Parameters:            <none>
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     WaitForFirstConsumer
Events:                <none>

Kubernetes 管理器 Pod 日志:

I1028 15:30:56.154131       1 event.go:221] Event(v1.ObjectReference{Kind:"StatefulSet", Namespace:"default", Name:"redis-cluster", UID:"7528483e-dac6-11e8-871f-2e55450d570e", APIVersion:"apps/v1", ResourceVersion:"2588806", FieldPath:""}): type: 'Normal' reason: 'SuccessfulCreate' create Claim data-redis-cluster-0 Pod redis-cluster-0 in StatefulSet redis-cluster success
I1028 15:30:56.166649       1 event.go:221] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"data-redis-cluster-0", UID:"76746506-dac6-11e8-871f-2e55450d570e", APIVersion:"v1", ResourceVersion:"2588816", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding
I1028 15:30:56.220464       1 event.go:221] Event(v1.ObjectReference{Kind:"StatefulSet", Namespace:"default", Name:"redis-cluster", UID:"7528483e-dac6-11e8-871f-2e55450d570e", APIVersion:"apps/v1", ResourceVersion:"2588806", FieldPath:""}): type: 'Normal' reason: 'SuccessfulCreate' create Pod redis-cluster-0 in StatefulSet redis-cluster successful
I1028 15:30:57.004631       1 event.go:221] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"data-redis-cluster-0", UID:"76746506-dac6-11e8-871f-2e55450d570e", APIVersion:"v1", ResourceVersion:"2588825", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding

你能发布 kubectl describe pvc 的输出吗?还有 kubectl describe sc - Rico
@Rico,我已经添加了描述 PVC。describe sc 没有返回任何内容。 - user3162649
1
给你提供了一些见解,希望能有所帮助。 - Rico
敲门。我在使用statefullset和VolumeBindingMode时遇到了完全相同的问题:WaitForFirstConsumer。如果您已经解决了这个问题,请分享一下。 - herm
2个回答

6

这个错误信息的意思是没有设置存储类。如果 kubectl describe sc 命令的输出为空,则表示没有存储类。

我建议安装 Digital Ocean 的CSI-driver。使用 Kubernetes CSI 接口,它将创建一个名为 do-block-storage 的存储类。

另一种选择是使用本地存储。可以使用 local 存储类:

$ cat <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
EOF | kubectl apply -f -

对于任一情况,如果您在 PVC 中未指定 storageClassName,则可能需要将其设置为默认存储类:

$ kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

或者

$ kubectl patch storageclass do-block-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

谢谢,这确实有所帮助!但是这并没有完全解决问题,因为Pod仍然无法调度,原因如下: 4m33s Warning FailedScheduling Pod 0/5 nodes are available: 1 node(s) had taints that the pod didn't tolerate, 4 node(s) didn't find available persistent volumes to bind.。 我已经在初始问题中更新了更多信息。 - user3162649
1
你有一个主节点和四个工作节点吗?似乎其中一个被污染的节点是主节点,并且它无法将卷绑定到其他节点。我怀疑权限问题,你能否在主节点上检查 kube-controller-manager 的日志?可以使用 docker logs <kube-controller-manager-containerid> 命令。 - Rico
是的,那是正确的。很抱歉,但我不确定如何获取这些日志。我尝试通过运行 kubectl get pods --all-namespaces 并从中获取 pod 名称来获取 <kube-controller-manager-containerid>,但似乎没有起作用。 - user3162649
1
在主节点上运行“docker ps”。 - Rico
没有额外的信息 - 我已经更新了原帖 - user3162649

1

这是一个使用PersistentVolumeClaims的有状态集合。

您需要在集群中配置一个默认的storageClass,以便PersistentVolumeClaim可以从该位置获取存储。

在minikube中已经有一个可用,因此可以成功运行而不出错:

C02W84XMHTD5:ucp iahmad$ kubectl get sc --all-namespaces 
NAME                 PROVISIONER                AGE
standard (default)   k8s.io/minikube-hostpath   7d

3
StorageClass不是_namespaced_对象。 - Ivan Aracki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接