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

无法为pod挂载卷

司寇祖鹤
2023-03-14

编辑:我有一个OpenShift集群,有一个主节点和两个节点。我已经在节点上的主客户端和 NFS 客户端上安装了 NFS。我遵循了 NFS 的 wordpress 示例: https://github.com/openshift/origin/tree/master/examples/wordpress

我在我的主机上执行了以下操作:oc login-u system:admin:

mkdir /home/data/pv0001
mkdir /home/data/pv0002

chown -R nfsnobody:nfsnobody /home/data

chmod -R 777 /home/data/

# Add to /etc/exports
/home/data/pv0001 *(rw,sync,no_root_squash)
/home/data/pv0002 *(rw,sync,no_root_squash)

# Enable the new exports without bouncing the NFS service
exportfs -a

所以exportfs显示:

/home/data/pv0001
        <world>
/home/data/pv0002
        <world>

$ setsebool -P virt_use_nfs 1


# Create the persistent volumes for NFS.
# I did not change anything in the yaml-files
$ oc create -f examples/wordpress/nfs/pv-1.yaml
$ oc create -f examples/wordpress/nfs/pv-2.yaml
$ oc get pv

NAME      LABELS    CAPACITY     ACCESSMODES   STATUS      CLAIM     REASON
pv0001    <none>    1073741824   RWO,RWX       Available             
pv0002    <none>    5368709120   RWO           Available    

这也是我得到的。然后我要去我的节点:

oc login
test-admin

我创建了一个wordpress项目:

oc new-project wordpress

# Create claims for storage in my project (same namespace).
# The claims in this example carefully match the volumes created above.
$ oc create -f examples/wordpress/pvc-wp.yaml 
$ oc create -f examples/wordpress/pvc-mysql.yaml
$ oc get pvc

NAME          LABELS    STATUS    VOLUME
claim-mysql   map[]     Bound     pv0002
claim-wp      map[]     Bound     pv0001

这对我来说看起来一模一样。

启动MySQL pod。

oc create -f examples/wordpress/pod-mysql.yaml
oc create -f examples/wordpress/service-mysql.yaml
oc create -f examples/wordpress/pod-wordpress.yaml
oc create -f examples/wordpress/service-wp.yaml

oc get svc
NAME            LABELS                                    SELECTOR         IP(S)            PORT(S)
mysql           name=mysql                                name=mysql       172.30.115.137   3306/TCP
wpfrontend      name=wpfrontend                           name=wordpress   172.30.170.55    5055/TCP

所以实际上一切似乎都有效!但是当我询问我的pod状态时,我得到了以下信息:

[root@ip-10-0-0-104 pv0002]# oc get pod
NAME        READY     STATUS                                                              RESTARTS   AGE
mysql       0/1       Image: openshift/mysql-55-centos7 is ready, container is creating   0          6h
wordpress   0/1       Image: wordpress is not ready on the node                           0          6h

pod处于挂起状态,在webconsole中出现以下错误:

12:12:51 PM     mysql   Pod     failedMount     Unable to mount volumes for pod "mysql_wordpress": exit status 32 (607 times in the last hour, 41 minutes)
12:12:51 PM     mysql   Pod     failedSync  Error syncing pod, skipping: exit status 32 (607 times in the last hour, 41 minutes)
12:12:48 PM     wordpress   Pod     failedMount     Unable to mount volumes for pod "wordpress_wordpress": exit status 32 (604 times in the last hour, 40 minutes)
12:12:48 PM     wordpress   Pod     failedSync  Error syncing pod, skipping: exit status 32 (604 times in the last hour, 40 minutes)

无法挂载超时。但是当我转到我的节点并执行以下操作时(test 是我的节点上创建的目录):

mount -t nfs -v masterhostname:/home/data/pv0002 /test

我在我的节点上的/test中放置了一些文件,而不是在我的主节点上的/home/data/pv0002中显示的文件,所以这似乎有效。它无法在OpenShift中装载的原因是什么?我已经坚持了一段时间了。

日志:

Oct 21 10:44:52 ip-10-0-0-129 docker: time="2015-10-21T10:44:52.795267904Z" level=info msg="GET /containers/json"
Oct 21 10:44:52 ip-10-0-0-129 origin-node: E1021 10:44:52.832179    1148 mount_linux.go:103] Mount failed: exit status 32
Oct 21 10:44:52 ip-10-0-0-129 origin-node: Mounting arguments: localhost:/home/data/pv0002 /var/lib/origin/openshift.local.volumes/pods/2bf19fe9-77ce-11e5-9122-02463424c049/volumes/kubernetes.io~nfs/pv0002 nfs []
Oct 21 10:44:52 ip-10-0-0-129 origin-node: Output: mount.nfs: access denied by server while mounting localhost:/home/data/pv0002
Oct 21 10:44:52 ip-10-0-0-129 origin-node: E1021 10:44:52.832279    1148 kubelet.go:1206] Unable to mount volumes for pod "mysql_wordpress": exit status 32; skipping pod
Oct 21 10:44:52 ip-10-0-0-129 docker: time="2015-10-21T10:44:52.832794476Z" level=info msg="GET /containers/json?all=1"
Oct 21 10:44:52 ip-10-0-0-129 docker: time="2015-10-21T10:44:52.835916304Z" level=info msg="GET /images/openshift/mysql-55-centos7/json"
Oct 21 10:44:52 ip-10-0-0-129 origin-node: E1021 10:44:52.837085    1148 pod_workers.go:111] Error syncing pod 2bf19fe9-77ce-11e5-9122-02463424c049, skipping: exit status 32

共有1个答案

戚俊美
2023-03-14

日志显示< code > 10月21日10:44:52 IP-10-0-0-129 origin-node:Output:mount . NFS:装载localhost:/home/data/pv0002时被服务器拒绝访问

所以它在本地主机上安装失败。为了创建我的持久卷,我执行了这个 yaml:

{
  "apiVersion": "v1",
  "kind": "PersistentVolume",
  "metadata": {
    "name": "registry-volume"
  },
  "spec": {
    "capacity": {
        "storage": "20Gi"
        },
    "accessModes": [ "ReadWriteMany" ],
    "nfs": {
        "path": "/home/data/pv0002",
        "server": "localhost"
    }
  }
}

所以我正在安装到/home/data/pv0002,但是这个路径不在localhost上,而是在我的主服务器上(即ose3-master.example.com。所以我用错误的方式创建了我的PV。

{
  "apiVersion": "v1",
  "kind": "PersistentVolume",
  "metadata": {
    "name": "registry-volume"
  },
  "spec": {
    "capacity": {
        "storage": "20Gi"
        },
    "accessModes": [ "ReadWriteMany" ],
    "nfs": {
        "path": "/home/data/pv0002",
        "server": "ose3-master.example.com"
    }
  }
}

这也是在培训环境中进行的。建议在集群外部安装NFS服务器。

 类似资料:
  • 我试图使用kubernetes在spark cluster模式下从服务器读取一个文件,所以我将我的文件放在所有workers上,并使用< br> val conf = new SparkConf()挂载驱动程序卷。setAppName("sparksetuptest ")。set(" spark . kubernetes . driver . volumes . host path . host

  • 问题内容: 我正在运行一个Jenkins集群,其中在Master和Slave中,它们都作为Docker容器运行。 主机是在MacOS上运行的最新的boot2docker VM。 为了使Jenkins能够使用Docker执行部署,我将docker.sock和docker客户端从主机安装到Jenkins容器,如下所示: 在将卷装载到Jenkins容器中运行的Docker容器时,我遇到了问题。例如,如果

  • 当我尝试使用读取此pod的日志时,它不会返回任何内容。如何查看日志以了解状态为“挂起”的原因?

  • 我们正在尝试通过服务主体创建从Azure Database ricks到ADLS Gen2的挂载点。该服务主体具有适当的资源级别和数据级别访问权限。尽管我们已确认可以通过访问密钥访问ADLS Gen2,但尚未创建挂载点。已使用Azure Database ricks VNet注入。 装载点失败,并出现一个不可描述的错误。有一个防火墙正在审查来自数据块的所有流量,所以我们的假设是装载点所需的一些东西

  • 当我的吊舱试图查询任何kubeletendpoint(任何端口)时,它们立即得到一个。 编辑:以上情况发生在任何端口上,而不仅仅是4194 ServiceMonitor:

  • 我尝试以配置yaml文件作为参数运行opentelemetry docker映像: