我有下面的PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
storageClassName: fask和部署
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:
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]发布于 2018-06-08 14:44:23
但是,如果我有两个以上的副本,它将无法创建第二个PV。
然后,您可能应该在其中使用StatefulSet和volumeClaimTemplates,而不是Deployment和PersistentVolumeClaim。
在您的示例中,每个部署都有相同的PersistentVolumeClaim (即ReadWriteOnly,不能在第二个请求时挂载),而对于volumeClaimTemplates,每个副本都有不同的配置。
发布于 2022-04-06 13:24:04
我知道我参加聚会很晚了,但我不同意批准的答案。这取决于你在努力实现什么(就像编码生活中的大多数事情一样)。
当您需要拥有完全独立的副本时,StatefulSets和volumeClaimTemplates是非常有用的,这些副本可以通过某种应用程序级的实现机制相互通信,同时仍然以独立的身份存在。我在考虑诸如Cassandra这样的分布式数据库:不同的db节点,每个节点一个荚,不同的持久化存储,每个PV。卡桑德拉的流言蜚语机制将使数据在各卷中保持同步。
我认为,如果您主要将Kubernetes用于微服务和复制应用程序,则这是一个可以避免的情况。当您需要进行滚动更新或升级您的Kubernetes版本时,StatefulSets非常麻烦,因为它们不太容易扩展。
无论副本的数量如何,部署都会挂载一个持久卷:相同部署的10个荚将尝试为读写操作安装相同的卷。您所面临的困难是,大多数卷提供程序都不允许多个节点挂载卷。这是你需要经验的时候。
如果您只需要(从模板上看)通过与多个荚共享相同的源来公开冗余的网站,以便在不停机的情况下实现滚动更新,则可以使用deploy和volumeClaim (而不是volumeClaimTemplates):您可以通过一个部署在几个荚上安装相同的卷,您只需要确保所有的部署都分配给同一个节点。PodAffinity会为你做这份工作的。
https://stackoverflow.com/questions/50761264
复制相似问题