首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署和PVCs

部署和PVCs
EN

Stack Overflow用户
提问于 2018-06-08 13:02:44
回答 2查看 3.9K关注 0票数 1

我有下面的PersistentVolumeClaim

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 256Mi
  storageClassName: fask

部署

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        volumeMounts:
        - name: data
          mountPath: "/var/www/html"
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: nginx-pvc

如果我使用单个副本部署运行,那么vsphere StorageClass将动态创建PV。

但是,如果我有两个以上的副本,它将无法创建第二个PV:

代码语言:javascript
复制
AttachVolume.Attach failed for volume "pvc-8facf319-6b1a-11e8-935b-00505680b1b8" : Failed to add disk 'scsi0:1'.
Unable to mount volumes for pod "nginx-deployment-7886f48dcd-lzms8_default(b0e38764-6b1a-11e8-935b-00505680b1b8)": timeout expired waiting for volumes to attach or mount for pod "default"/"nginx-deployment-7886f48dcd-lzms8". list of unmounted volumes=[data]. list of unattached volumes=[data default-token-5q7kr]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 14:44:23

但是,如果我有两个以上的副本,它将无法创建第二个PV。

然后,您可能应该在其中使用StatefulSetvolumeClaimTemplates,而不是DeploymentPersistentVolumeClaim

在您的示例中,每个部署都有相同的PersistentVolumeClaim (即ReadWriteOnly,不能在第二个请求时挂载),而对于volumeClaimTemplates,每个副本都有不同的配置。

票数 6
EN

Stack Overflow用户

发布于 2022-04-06 13:24:04

我知道我参加聚会很晚了,但我不同意批准的答案。这取决于你在努力实现什么(就像编码生活中的大多数事情一样)。

当您需要拥有完全独立的副本时,StatefulSets和volumeClaimTemplates是非常有用的,这些副本可以通过某种应用程序级的实现机制相互通信,同时仍然以独立的身份存在。我在考虑诸如Cassandra这样的分布式数据库:不同的db节点,每个节点一个荚,不同的持久化存储,每个PV。卡桑德拉的流言蜚语机制将使数据在各卷中保持同步。

我认为,如果您主要将Kubernetes用于微服务和复制应用程序,则这是一个可以避免的情况。当您需要进行滚动更新或升级您的Kubernetes版本时,StatefulSets非常麻烦,因为它们不太容易扩展。

无论副本的数量如何,部署都会挂载一个持久卷:相同部署的10个荚将尝试为读写操作安装相同的卷。您所面临的困难是,大多数卷提供程序都不允许多个节点挂载卷。这是你需要经验的时候。

如果您只需要(从模板上看)通过与多个荚共享相同的源来公开冗余的网站,以便在不停机的情况下实现滚动更新,则可以使用deploy和volumeClaim (而不是volumeClaimTemplates):您可以通过一个部署在几个荚上安装相同的卷,您只需要确保所有的部署都分配给同一个节点。PodAffinity会为你做这份工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50761264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档