使用Pod Autoscaling在AWS中发生Kubernetes PersistentVolumeClaim问题

时间:2018-01-29 13:43:21

标签: kubernetes statefulset volume-claim-template

我们根据项目要求成功创建了pod,服务和复制控制器。现在我们计划使用Kubernetes在AWS中设置持久性存储。我创建了YAML文件以在AWS中创建EBS卷,它按预期正常工作。我可以声明音量并成功安装到我的pod(这仅适用于单个副本)。

我能够成功创建file.Volume也创建但我的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 Autoscaling。我已经看到pod autoscaling用于部署和ReplicationContoller。我是否知道我们是否可以为Stateful set实现pod自动缩放?

1 个答案:

答案 0 :(得分:2)

Horizo​​ntal Pod Autoscaler只能扩展部署,副本集或复制控制器。您无法扩展有状态集。 (见Kubernetes Docu for more details

主要原因是,在状态集(例如MongoDB)中运行的大多数有状态应用程序通常不像向Deployments运行的无状态应用程序那样容易扩展/缩小。对于有状态应用程序来说,向上和向下扩展通常是非常复杂的过程,您不希望仅基于自动定标器。它通常在应用程序中需要一些额外的支持逻辑。特别是随着缩小规模,它也可能意味着您的数据风险。自动缩放对于负载的短期更改更有用。扩展有状态集需要更长远的思考。由于复杂性,您不希望您的数据库每分钟都在扩展和缩小。