当前位置: 首页 > 知识库问答 >
问题:

Kubernetes Hostpath外部供应器-PVC挂起

堵雅健
2023-03-14
[root@umeshworkstation hostpath-provisioner]# kubectl get pods -n kube-system
NAME                                        READY     STATUS    RESTARTS   AGE
calico-etcd-n988r                           1/1       Running   10         6h
calico-node-n1wmk                           2/2       Running   10         6h
calico-policy-controller-1777954159-bd8rn   1/1       Running   0          6h
etcd-umeshworkstation                       1/1       Running   1          6h
kube-apiserver-umeshworkstation             1/1       Running   1          6h
kube-controller-manager-umeshworkstation    1/1       Running   1          6h
kube-dns-3913472980-2ptjj                   0/3       Pending   0          6h
kube-proxy-1d84l                            1/1       Running   1          6h
kube-scheduler-umeshworkstation             1/1       Running   1          6h

然后,我从Kubernetes-孵化器下载了Hostpath外部供应器代码,并在同一节点上本地构建了它。为provisioner构建的docker映像已经成功,我甚至可以在相同的位置使用pod.yaml实例化provisioner pod。豆荚运行良好:

[root@umeshworkstation hostpath-provisioner]# kubectl describe pod hostpath-provisioner
Name:           hostpath-provisioner
Namespace:      default
Node:           umeshworkstation/172.17.24.123
Start Time:     Tue, 09 May 2017 23:44:41 -0400
Labels:         <none>
Annotations:    <none>
Status:         Running
IP:             192.168.8.65
Controllers:    <none>
Containers:
  hostpath-provisioner:
    Container ID:       docker://c600cfa7a2f5f958ad24e83372a1276a91b41cb67773b9605af4a0ae021ec914
    Image:              hostpath-provisioner:latest
    Image ID:           docker://sha256:f6def41ba7c096701c65bf0c0aba6ff31e030573e1a900e378432491ecc5c556
    Port:
    State:              Running
      Started:          Tue, 09 May 2017 23:44:45 -0400
    Ready:              True
    Restart Count:      0
    Environment:
      NODE_NAME:         (v1:spec.nodeName)
    Mounts:
      /tmp/hostpath-provisioner from pv-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-7wwvj (ro)
Conditions:
  Type          Status
  Initialized   True
  Ready         True
  PodScheduled  True
Volumes:
  pv-volume:
    Type:       HostPath (bare host directory volume)
    Path:       /tmp/hostpath-provisioner
  default-token-7wwvj:
    Type:       Secret (a volume populated by a Secret)
    SecretName: default-token-7wwvj
    Optional:   false
QoS Class:      BestEffort
Node-Selectors: <none>
Tolerations:    node.alpha.kubernetes.io/notReady=:Exists:NoExecute for 300s
                node.alpha.kubernetes.io/unreachable=:Exists:NoExecute for 300s
Events:         <none>

然后,我按照project home的说明创建了存储类,存储类创建得很好:

[root@umeshworkstation hostpath-provisioner]# kubectl describe sc example-hostpath
Name:           example-hostpath
IsDefaultClass: No
Annotations:    <none>
Provisioner:    example.com/hostpath
Parameters:     <none>
Events:         <none>

下一步是从相同的位置使用claim.yaml创建PVC,但是PVC仍然处于挂起状态,并且description显示它无法找到供应者example.com/hostpath:

[root@umeshworkstation hostpath-provisioner]# kubectl describe pvc
Name:           hostpath
Namespace:      default
StorageClass:   example-hostpath
Status:         Pending
Volume:
Labels:         <none>
Annotations:    volume.beta.kubernetes.io/storage-class=example-hostpath
                volume.beta.kubernetes.io/storage-provisioner=example.com/hostpath
Capacity:
Access Modes:
Events:
  FirstSeen     LastSeen        Count   From                            SubObjectPath   Type            Reason                  Message
  ---------     --------        -----   ----                            -------------   --------        ------                  -------
  2h            11s             874     persistentvolume-controller                     Normal          ExternalProvisioning    cannot find provisioner "example.com/hostpath", expecting that a volume for the claim is provisioned either manually or via external software

共有1个答案

勾裕
2023-03-14

我已经解决了这个问题。感谢@jaxxstorm帮助我朝着正确的方向前进。

当我检查provisioner pod日志时,我可以看到它无法访问API服务器以列出StorageClass、PVC或PVs,因为它是用默认服务帐户创建的,该帐户没有访问这些API的权限。

解决方案是创建一个单独的服务帐户、pod安全策略、群集角色和群集角色绑定,正如这里对NFS外部供应者所解释的那样

[root@umeshworkstation hostpath-provisioner]# kubectl get pvc
NAME       STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS       AGE
hostpath   Bound     pvc-8179c8d6-36db-11e7-9ed4-005056a21a50   1Mi        RWX           example-hostpath   1m

[root@umeshworkstation hostpath-provisioner]# ls /tmp/hostpath-provisioner/
pvc-8179c8d6-36db-11e7-9ed4-005056a21a50
 类似资料:
  • 我正在寻找关于如何正确使用Kubernetes本地存储PVC的帮助。 我们在Ubuntu上提供了一个kubespray集群,并启用了本地存储提供器。 我们做错了什么?

  • 我正在尝试在kubernetes上部署nginx,kubernetes版本是V1.5.2,我已经部署了3个副本的nginx,下面是YAML文件, 现在我要在节点的端口30062上公开它的端口80,为此我在下面创建了一个服务,

  • 上节课我们学习了 PV 的使用,但是在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在 Node 上而已,所以这节课我们就来给大家讲解下 PVC 的使用方法。 准备工作 在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上,比如我们这里: $ kubectl get nodes NAME STATUS

  • 问题内容: 我当然缺少有关喷油器的一些基本知识,但是我无法理解为什么 还有这个 按预期工作,而这 会抛出 错误:[$ injector:unpr]未知提供程序:$ provideProvider <-$ provide 如下所述,与提供者有一些特殊的关系,而与实例打交道时,我不确定使块如此特别的东西。 结果,是否没有办法到达外部块,例如,使用(尽管似乎也获得了提供者实例)? 除了好奇心外,这个问题

  • 还在回家的路上,绝影就发短信把辞职的事情告诉了大爷,原以为大爷在四川等自己辞职等了这么久,收到消息肯定欣喜若狂。但事情往往就是这样,你没有女朋友的时候想有个女朋友,但当你费尽千辛万苦台词排练了几百遍终于半骗半哄有了一个女朋友的时候,你才发现有个女朋友也不过就是那个样子,甚至有时候还不如一个人单身过。 大爷还是用那副面孔对着绝影:“辞了?” “辞了。那天谈判,我第一句话就是‘陈董,我决定离开公司’。

  • 4.3.1.4 创建/使用内部内容供应器 内部内容供应器禁止除内部应用以外的应用使用。 下面展示了如何实现内部内容供应器的示例代码。 要点(创建内容供应器): 定义内部签名权限。 需要内部签名权限。 将导出属性显式设置为true。 验证内部签名权限是否由内部应用定义。 验证参数的安全性,即使这是来自内部应用的请求。 由于请求应用是内部的,因此可以返回敏感信息。 导出 APK 时,请使用与请求应用相