gpt4 book ai didi

kubernetes - 为 Kubernetes Deployment 中的每个副本绑定(bind)不同的 Persistent Volume

转载 作者:行者123 更新时间:2023-12-04 14:08:28 30 4
gpt4 key购买 nike

我正在使用具有 ReadWriteOnce 访问模式的 PVC,它由 logstash 部署使用,该部署将运行有状态应用程序并使用此 PVC。部署中的每个 pod 将尝试绑定(bind)到相同的持久卷声明。如果replicas > 1,它将失败(因为它支持ReadWriteOnce,只有第一个能够成功绑定(bind))。如何指定每个 pod 绑定(bind)到单独的 PV。

我不想为每个 logstash 副本/实例定义 3 个单独的 yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
spec:
replicas: 3
template:
metadata:
labels:
app: logstash
spec:
containers:
image: "logstash-image"
imagePullPolicy: IfNotPresent
name: logstash
volumeMounts:
- mountPath: /data
name: logstash-data
restartPolicy: Always
volumes:
- name: logstash-data
persistentVolumeClaim:
claimName: logstash-vol

需要一种方法将不同的 PV 卷挂载到不同的 pod 副本。

最佳答案

使用部署,您无法正确执行此操作。您应该使用带有 PVC 模板的 StatefulSet 来实现您的目标。 StatefulSet YAML 代码片段的一部分可能如下所示:

...
volumeClaimTemplates:
- metadata:
name: pv-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5G

假设你有 3 个副本,你会看到 Pod 是按顺序一个一个创建的,并且在 Pod 创建过程中请求 PVC。

PVC被命名为 volumeClaimTemplate name + pod-name + ordinal number结果,您将获得新创建的 PVC 的列表:
pv-data-<pod_name>-0
pv-data-<pod_name>-1
pv-data-<pod_name>-N

StatefulSet 使您的 Pod 的名称(不仅仅是实际上的名称)静态并根据副本数增加它们,这就是为什么每个 Pod 将分别匹配自己的 PVC 和 PV

Note: this is called dynamic provisioning. You should be familiar with configuring kubernetes control plane components (like controller-manager) to achieve this, because you will need configured persistent storage (one of them) providers and understand the retain policy of your data, but this is completely another question...

关于kubernetes - 为 Kubernetes Deployment 中的每个副本绑定(bind)不同的 Persistent Volume,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997598/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com