当前位置: 首页 > 知识库问答 >
问题:

Kubernetes:如何将自动缩放吊舱的访问模式更改为重新缩放?

黄俊智
2023-03-14

我正在尝试HPA:https://kubernetes.io/docs/tasks/run-application/hosteral-pod-autoscale/

apiVersion: v1
kind: PersistentVolume
metadata:
  name: api-orientdb-pv
  labels:
    app: api-orientdb
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: api-orientdb-{{ .Values.cluster.name | default "testing" }}
    fsType: ext4
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: api-orientdb-pv-claim
  labels:
    app: api
spec:
  html" target="_blank">accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  selector:
    matchLabels:
      app: api-orientdb
  storageClassName: ""

HPA:

Name:                           api-orientdb-deployment
Namespace:                      default
Labels:                         <none>
Annotations:                        <none>
CreationTimestamp:                  Thu, 08 Jun 2017 10:37:06 +0700
Reference:                      Deployment/api-orientdb-deployment
Metrics:                        ( current / target )
  resource cpu on pods  (as a percentage of request):   17% (8m) / 10%
Min replicas:                       1
Max replicas:                       2
Events:                         <none>

并创建了新的吊舱:

NAME                                       READY     STATUS    RESTARTS   AGE
api-orientdb-deployment-2506639415-n8nbt   1/1       Running   0          7h
api-orientdb-deployment-2506639415-x8nvm   1/1       Running   0          6h

正如您所看到的,我使用的是GCEPersistentDisk,它不支持ReadWriteMany访问模式。

Name:        api-orientdb-deployment-2506639415-x8nvm
Containers:
    Mounts:
      /orientdb/databases from api-orientdb-persistent-storage (rw)
Volumes:
  api-orientdb-persistent-storage:
    Type:   PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  api-orientdb-pv-claim
    ReadOnly:   false

我发现了一些东西:没有什么可以确保新扩展的pod将与第一个pod运行在同一个节点上。因此,如果卷插件不支持ReadWriteMany,并且缩放的pod在另一个节点上运行,则它将无法挂载:

在节点“gke-testing-default-pool-7711f782-4p6f”上附加卷“api-orientdb-pv”时失败:googleapi:错误400:磁盘资源“projects/xx/zones/us-central1-a/disks/api-orientdb-testing”已被“projects/xx/zones/us-central1-a/instances/gke-testing-default-pool-7711f782-h7xv”使用

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes

重要!一个卷一次只能使用一种访问模式挂载,即使它支持多种访问模式。例如,GCEPersistentDisk可以被单个节点挂载为ReadWriteOnce或被许多节点挂载为ReadOnlyMany,但不能同时挂载。

如果是这样,确保HPA工作的唯一方法是卷插件必须支持readwriteMany访问模式?

2017年6月9日星期五14:28:30 ICT

你的问题我不清楚

让我解释一下:在自动伸缩的情况下,假设通过使用标签选择器,我可以确保新伸缩的pod最终位于同一个节点上,但是由于volume是以rw的形式挂载的,那么当我们有两个pod以rw的形式挂载一个卷时,它会破坏GCE PD吗?

首先,一般来说,如果您有一个具有副本的部署:1,您将不会同时有2个Pod运行(大多数情况下!!)

在HPA的情况下,它没有。更多细节请看我上面的更新。

如果出于任何原因,您确实有两个豆荚访问同一个挂载readWrite,那么将会发生什么完全取决于应用程序,而不是kubernetes特定的

最让我困惑的是:

ReadWriteOnce-卷可以由单个节点以读写方式装入

好的,节点,不是豆荚。但是在自动伸缩的情况下,如果在同一个节点上运行两个豆荚,并且两个豆荚都以rw的形式挂载卷,那么GCE PD是否支持它?如果是,它是如何工作的?

共有1个答案

蔡辰钊
2023-03-14

它正按预期工作。Once inReadWriteOnce指的是可以使用PVC的节点数,而不是POD数(HPA或无HPA)。

如果您希望只有一个Pod能够写入,那么创建两个部署。一个具有副本:1,另一个附加了自动缩放器(其中有readonly:true)。请注意,GCE PD只能由一个节点挂载,如果其中任何一个POD正在读写访问它。

 类似资料:
  • 我的要求是在自定义指标上扩展POD,如队列中的挂起消息,PODS必须增加以处理作业。在kubernetes,Scale up在普罗米修斯适配器和普罗米修斯操作员中工作得很好。 我在pods中有长时间运行的进程,但HPA检查自定义度量并试图缩小规模,因为这个进程杀死了操作的中间并丢失了消息。我如何控制HPA只杀死没有进程运行的自由豆荚。 序列查询:‘{namespace=“default”,serv

  • 我正在尝试在我的kubernetes集群中设置自动缩放。在部署heapster及其服务之后。我正面临以下错误。 Heapster成功地从pod中提取度量,可在 自动缩放(HPA)中的建议无法获取CPU消耗:无法将对象解封为[]V1ALPHA1类型的Go值。PodMetrics未解决此问题

  • 我们正在使用Docker 1.19运行库伯内特斯(1.18) Container是一个基于Java13的Spring启动应用程序(使用基本图像作为openjdk: 13-alpin),下面是内存设置。 豆荚: 内存-最小448M,最大2500M cpu-最小值0.1 容器: Xms:256M,Xmx:512M 当流量发送更长时间时,容器会突然重新启动;在Prometheus中,我可以看到Pod内存

  • 我正在尝试测试部署在AWS中的Kubernetes集群的水平吊舱自动缩放功能(使用EKS)。 我已将资源设置为“CPU”,将目标类型设置为“利用率”,并在 YAML 文件中将“平均利用率”设置为 15。 因此,从技术上讲,当CPU利用率达到15%的设置百分比时,Kubernetes集群应该自动水平扩展(自动添加pods)。这是YAML文件的重要部分: 我向Kubernetes集群注入了大量HTTP

  • 我的Java微服务正在AWS EC2实例上托管的k8s集群中运行。 我有大约30个微服务(nodejs和Java8的良好组合)在K8s集群中运行。我面临一个挑战,我的java应用程序pods意外重启,导致应用程序5xx数量增加。 为了调试它,我在pod和应用程序中启动了一个newrelic代理,并找到了以下图表: 在我可以看到的地方,我的Xmx值为6GB,我的用途最大为5.2GB。 这清楚地表明J