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

无法跨n个部署副本装入只读Kubernetes持久卷

邹俊拔
2023-03-14
apiVersion: v1
kind: PersistentVolume
metadata:
    name: ferret-pv-1
spec:
    capacity:
    storage: 500Gi
    accessModes:
      - ReadOnlyMany
    persistentVolumeReclaimPolicy: Retain
    gcePersistentDisk:
      pdName: data-1
      partition: 1
      fsType: ext4
$ kubectl get pv
NAME          CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                    REASON    AGE
ferret-pv-1   500Gi      ROX           Retain          Bound     default/ferret-pvc             5h

然后,我创建一个Kubernetes只读多个持久化卷声明,如下所示:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ferret-pvc
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 500Gi

它绑定到我在上面创建的只读PV:

$ kubectl get pvc
NAME         STATUS    VOLUME        CAPACITY   ACCESSMODES   AGE
ferret-pvc   Bound     ferret-pv-1   500Gi      ROX           5h

然后,我使用我刚才创建的PVC创建了一个包含2个副本的Kubernetes部署,如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ferret2-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        name: ferret2
    spec:
      containers:
      - image: us.gcr.io/centered-router-102618/ferret2
        name: ferret2
        ports:
        - name: fjds
          containerPort: 1004
          hostPort: 1004
        volumeMounts:
          - name: ferret-pd
            mountPath: /var/ferret
            readOnly: true
      volumes:
          - name: ferret-pd
            persistentVolumeClaim:
              claimName: ferret-pvc
$ kubectl get deployments
NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
ferret2-deployment   2         2         2            1           4h
$ kubectl get pods
NAME                                  READY     STATUS              RESTARTS   AGE
ferret2-deployment-1336109949-2rfqd   1/1       Running             0          4h
ferret2-deployment-1336109949-yimty   0/1       ContainerCreating   0          4h
$ kubectl describe pod ferret2-deployment-1336109949-yimty

Events:
  FirstSeen     LastSeen        Count   From                            SubObjectPath   Type        Reason      Message
  ---------     --------        -----   ----                            -------------   --------        ------      -------
  4h        1m          128     {kubelet gke-sim-cluster-default-pool-e38a7605-kgdu}            Warning     FailedMount     Unable to mount volumes for pod "ferret2-deployment-1336109949-yimty_default(d1393a2d-9fc9-11e6-a873-42010a8a009e)": timeout expired waiting for volumes to attach/mount for pod "ferret2-deployment-1336109949-yimty"/"default". list of unattached/unmounted volumes=[ferret-pd]
  4h        1m          128     {kubelet gke-sim-cluster-default-pool-e38a7605-kgdu}            Warning     FailedSync      Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "ferret2-deployment-1336109949-yimty"/"default". list of unattached/unmounted volumes=[ferret-pd]
  4h        55s         145     {controller-manager }                           Warning     FailedMount     Failed to attach volume "ferret-pv-1" on node "gke-sim-cluster-default-pool-e38a7605-kgdu" with: googleapi: Error 400: The disk resource 'data-1' is already being used by 'gke-sim-cluster-default-pool-e38a7605-fyx4'
$ kubectl exec -ti ferret2-deployment-1336109949-2rfqd -- bash
root@ferret2-deployment-1336109949-2rfqd:/opt/ferret# mount | grep ferret
/dev/sdb1 on /var/ferret type ext4 (ro,relatime,data=ordered)

共有1个答案

乌杰
2023-03-14

PV/PVC存取模式仅用于绑定PV/PVC。

在pod模板中,确保将spec.volumes.persistentVolumeClaim.readonly设置为true。这可以确保卷以只读模式附加。

同样在pod模板中,确保将spec.containers.volumeMounts[x].readonly设置为true。这可以确保卷以只读模式挂载。

 类似资料:
  • 和库伯内特斯一起,我试图部署詹金斯的形象 所以,这是我对我的员工的责任: 还有我在这部分的数据 这里是我的yaml文件来部署它 我的持续音量 我坚持不懈的努力 还有我的部署 在执行命令后,一切看起来都很好: 在我的工人身上,这是我的容器 所以我在我的容器上启动一个shell,我可以在上看到我的数据: 我试图在我的中写入数据,但权限被拒绝 在我的中也是一样,我不能写数据 因此,我在部署yaml中尝试

  • 问题内容: 我在Kubernetes上部署Airflow时遇到错误(正是这个版本的Airflow https://github.com/puckel/docker- airflow/blob/1.8.1/Dockerfile )关于将权限写入文件系统。 窗格的日志中显示的错误是: 看来文件系统是只读的,但我不明白为什么会这样。我不确定这是否是 Kubernetes的错误配置 (我是否需要Pod专用

  • 现在我们已经将服务部署为具有多个副本的库伯内特斯部署。一旦服务器崩溃,库伯内特斯将其容器迁移到另一台可用的服务器,该服务器的任务约为3~5分钟。 迁移时,客户端可以访问部署服务,因为我们还有其他正在运行的副本。但有时请求会失败,因为负载均衡器重定向到死亡或迁移容器。 如果Kubernetes能够自动启动死副本,并在其他服务器上运行后添加它们,那就太好了。否则,我们需要像haproxy一样设置LB,

  • 我有一个连接到外部数据库的应用服务器的吊舱。为了冗馀,我希望运行多个POD,所以我使用rolingupdate策略将部署扩展到3个(MAXSURABE=1和MAXUNAVABLE=1)。 有时(大多数情况下)pods在第一次创建时失败,因为我使用的是liquibase,所有pods都试图同时锁定数据库。

  • 我想从配置文件中部署一个mongodb副本集,该副本集包含1个主副本和2个次副本,如下所示: 主节点的第一个配置文件 我也得到了同样的错误 我不知道我需要做什么esle配置来解决这个问题,请帮助我,非常感谢。

  • 我准备所有的入口清单文件,以保持最新的apiVersion(networking.k8s.io/v1)升级我的群集从1.19到1.22。 我正在删除以前的入口规则,然后重新创建: 不幸的是,入口是创建的,但使用的是apiVersion extensions/v1beta1,这与我清单上的内容不同: 下面是我正在使用的YAML的一个示例: Kubernetes版本: 入口控制器版本(我从0.41升级