AWS 中的 Kubernetes PersistentVolumeClaim 问题

标签 kubernetes

我们根据项目要求成功创建了 Pod、服务和复制 Controller 。现在我们计划使用 Kubernetes 在 AWS 中设置持久存储。我已经创建了 YAML 文件来在 AWS 中创建 EBS 卷,它按预期工作正常。我能够声明卷并成功挂载到我的 Pod(这仅适用于单个副本)。

但是当我尝试创建更多单一副本时,我的 pod 没有创建成功。当我尝试创建卷时,它仅在一个可用区中创建。如果我的 pod 是在不同的区域节点中创建的,由于我的卷已经在不同的区域中创建,因此我的 pod 未创建成功。如何为同一应用程序在不同区域创建卷?如何使其成功并复制?如何创建我的持久卷声明?

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mongo-pvc
  labels:
    type: amazonEBS
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mongo-pp
  name: mongo-controller-pp
spec:
  replicas: 2
  template:
    metadata:
      labels:
        name: mongo-pp
    spec:
      containers:
      - image: mongo
        name: mongo-pp
        ports:
        - name: mongo-pp
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
        - mountPath: "/opt/couchbase/var"
          name: mypd1
      volumes:
      - name: mypd1
        persistentVolumeClaim:
          claimName: mongo-pvc

最佳答案

当您使用 ReadWriteOnce 卷(无法同时挂载到多个 Pod 的卷)时,简单的 PV/PVC 创建将无法解决问题。

PV 和 PVC 在某种程度上都非常“单一”,如果您在 Deployment 中引用特定的声明名称,您的 pod 都会尝试获取相同的一个声明以及绑定(bind)到该声明的相同的 pv,从而导致一种竞争条件,其中只有一个 pod 是第一个并且只允许安装该 RWO 存储。

为了缓解这种情况,您不应该直接使用 PVC,而是通过volumeClaimTemplates 来为每个缩放的新 Pod 动态创建 PVC,如下所示:

 volumeClaimTemplates:
  - metadata:
      name: claimname
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

关于AWS 中的 Kubernetes PersistentVolumeClaim 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456540/

相关文章:

Azure AKS 'Kube-Proxy' Kubernetes 节点日志文件位置?

kubernetes - ReplicationControllerStatus.replicas 下集群 API 返回的 Pod 的状态是什么

docker - 在 Kubernetes pod 中为 docker-in-docker 容器使用 hosts 文件

kubernetes - 创建简单 minikube 时出错 : `Error updating cluster: generating kubeadm cfg: parsing kubernetes version`

kubernetes - 具有服务类型节点端口的 EKS Elastic IP

docker - 将 Kubernetes 集群与 Docker 网络互连

azure - 如何在从 Azure Key Vault 更新 secret 时自动重新启动 Pod/部署

amazon-web-services - ELB 后面的 EKS 节点停止服务

azure - kubernetes 500 内部服务器故障排除

kubernetes - 如何从 yaml 文件访问 kubernetes 命名空间