我们成功地根据项目要求创建了 Pod、服务和复制控制器。现在,我们计划使用 Kubernetes 在 AWS 中设置持久性存储。我已经创建了 YAML 文件以在 AWS 中创建 EBS 卷,它按预期工作正常。我能够声明卷并成功装载到我的 pod(这仅适用于单个副本(。
我能够成功创建文件。卷也正在创建,但我的 Pod 将进入挂起状态,卷在 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 自动缩放吗?
水平容器自动缩放程序只能缩放部署、副本集或复制控制器。不能缩放有状态集。(参见 Kubernetes 文档了解更多详情(
主要原因是在有状态集中运行的大多数有状态应用程序(例如MongoDB(通常不像作为部署运行的无状态应用程序那样容易扩展/缩减。对于有状态应用,纵向扩展和缩减通常是非常复杂的过程,你不想仅基于自动缩放程序执行这些操作。它本身的应用程序中通常需要一些额外的支持逻辑。尤其是在缩减规模的情况下,也可能意味着数据存在风险。自动缩放对于负载的短期更改更有用。有状态集的扩展需要更长远的思考。由于复杂性,您不希望数据库每分钟都向上和向下扩展。