Kubernetes PersistentVolumeClaim使用Pod自动缩放解决AWS中的问题

Kubernetes PersistentVolumeClaim使用Pod自动缩放解决AWS中的问题,kubernetes,statefulset,volume-claim-template,Kubernetes,Statefulset,Volume Claim Template,我们已根据项目要求成功创建了POD、服务和复制控制器。现在,我们计划使用Kubernetes在AWS中设置持久性存储。我已经创建了YAML文件来在AWS中创建一个EBS卷,它工作正常。我能够申请卷并成功装载到我的pod(这仅适用于单个副本) 我能够成功创建文件。卷也正在创建,但我的Pods将处于挂起状态,卷在aws中仍显示可用状态。我在那边看不到任何错误日志 存储文件: kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata:

我们已根据项目要求成功创建了POD、服务和复制控制器。现在,我们计划使用Kubernetes在AWS中设置持久性存储。我已经创建了YAML文件来在AWS中创建一个EBS卷,它工作正常。我能够申请卷并成功装载到我的pod(这仅适用于单个副本)

我能够成功创建文件。卷也正在创建,但我的Pods将处于挂起状态,卷在aws中仍显示可用状态。我在那边看不到任何错误日志

存储文件:

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: mongo-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
主文件:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
    name: web2
spec:
  selector:
    matchLabels:
      app: mongodb
  serviceName: "mongodb"
  replicas: 2
  template:
    metadata:
      labels:
        app: mongodb
      annotations:
         pod.alpha.kubernetes.io/initialized: "true"
    spec:
      containers:
      - image: mongo
        name: mongodb
        ports:
        - name: web2
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
        - mountPath: "/opt/couchbase/var"
          name: mypd1
  volumeClaimTemplates:
  - metadata:
      name: mypd1
      annotations:
        volume.alpha.kubernetes.io/storage-class: mongo-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

现在我正计划设置一个pod自动缩放。我见过pod为部署和复制容器自动缩放。我可以知道我们是否也可以为状态集实现pod自动缩放吗?

水平pod自动缩放器只能缩放部署、副本集或复制控制器。不能缩放有状态集。(见附件)


主要原因是,在有状态集(如MongoDB)中运行的大多数有状态应用程序通常不像部署时运行的无状态应用程序那样易于扩展/缩小。对于有状态的应用程序,放大和缩小通常是一个相当复杂的过程,而您不希望仅基于autoscaler进行此操作。在应用程序中,它通常需要一些额外的支持逻辑。尤其是随着规模的缩小,这也可能意味着数据的风险。自动缩放对于负载的短期变化更有用。有状态集的扩展需要更多的长期思考。由于复杂性,您不希望数据库每分钟都在上下伸缩。

谢谢您的回复。我同意你的观点。如果我使用部署和复制控制器,我们如何在AWS中管理卷?我们已经成功地根据项目要求创建了POD、服务和复制控制器。现在,我们计划使用Kubernetes在AWS中设置持久性存储。我已经创建了YAML文件来在AWS中创建一个EBS卷,它工作正常。我能够申请卷并成功装载到我的pod(这仅适用于单个副本)。我能够成功创建文件。卷也正在创建,但我的Pods将处于挂起状态,卷在aws中仍显示可用状态。我无法在StatefSet上看到任何错误日志,但我可以在不同的可用性区域以及我的POD中创建卷。如果我使用replication controller和deployment do autoscale,我的卷将如何创建?部署/复制控制器更适合于不使用永久磁盘的无状态进程。因此,问题在于,如果您需要部署/复制控制器创建的POD中的持久卷,那么您的体系结构是否“正确”。您真的需要一个持久卷吗?如果只是一些临时数据,您可以使用诸如emptyDir卷之类的工具,它可以与部署/复制控制器配合使用。感谢您的回复。我们的应用程序堆栈是Tomcat/JBoss、Kafka、Hivemq、postgress、Mongodb、EFS、持久性卷(Amazon EBS)、Redis、NFS/EFS(来自Amazon)等。假设如果计划设置每个pod 2副本,如何规划持久性卷?如果我使用“volumeMount”conecpt,我可以为每个POD附加一个卷。如果我的pod将尝试创建2个pod,则第2个卷将能够使用适合RC和部署的“volume Mont conect”创建。但是如果使用有状态集“using VolumeMount Template”,我可以在pod中创建卷的数量,但这只适用于增量
副本。它不应该工作吗?