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

以声明方式(在yaml中)自动缩放谷歌云endpoint后端部署?

那谦
2023-03-14

我已经成功地遵循这里和这里的文档,将API规范和GKE后端部署到云endpoint。

这给我留下了一个这样的deployment.yaml:

apiVersion: v1
kind: Service
metadata:
  name: esp-myproject
spec:
  ports:
  - port: 80
    targetPort: 8081
    protocol: TCP
    name: http
  selector:
    app: esp-myproject
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: esp-myproject
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: esp-myproject
    spec:
      containers:
      - name: esp
        image: gcr.io/endpoints-release/endpoints-runtime:1
        args: [
          "--http_port=8081",
          "--backend=127.0.0.1:8080",
          "--service=myproject1-0-0.endpoints.myproject.cloud.goog",
          "--rollout_strategy=managed",
        ]
        ports:
        - containerPort: 8081
      - name: myproject
        image: gcr.io/myproject/my-image:v0.0.1
        ports:
        - containerPort: 8080

这将在后端创建应用程序的单个副本。到目前为止,很好。。。

我现在想更新yaml文件,以声明方式指定自动缩放参数,以便在endpoint流量超过一个时,使应用的多个副本能够彼此并行运行。

我读过周围(O'Reilly书:库伯内特斯起来

  1. 我已经读了很多次关于HorizontalPodAutoscaler的文章,我不清楚部署是否必须使用它来享受自动缩放的好处?
  2. 如果是这样,我在文档中看到了如何定义yaml中HorizontalPodAutoscaler规范的示例,如下所示-但是我如何将其与我现有的deployment.yaml?

HorizontalPodAutoscaler示例(来自文档):

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

提前感谢任何能为我解释这一点的人。

共有2个答案

涂玉韵
2023-03-14

我也面临着同样的问题

如果您在GKE上并且面临启用API的问题

autoscaling/v1
autoscaling/v2beta1

虽然GKE版本大约是1.12到1.14,但您无法应用autoscaling/v2beta2的清单,但是您可以应用类似的东西

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: core-deployment
  namespace: default
spec:
  maxReplicas: 9
  minReplicas: 5
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: core-deployment
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageValue: 500m

如果你想根据利用率

    apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    metadata:
      name: core-deployment
      namespace: default
    spec:
      maxReplicas: 9
      minReplicas: 5
      scaleTargetRef:
        apiVersion: extensions/v1beta1
        kind: Deployment
        name: core-deployment
      metrics:
      - type: Resource
        resource:
          name: cpu
          targetAverageUtilization: 80
公羊灿
2023-03-14
  1. 我已经读了很多关于HorizontalPodAutoscaler的书,但我不清楚部署是否必须利用它来享受自动缩放的好处

不需要,但这是推荐的,而且已经内置了。你可以建立自己的自动化系统,可以上下扩展,但问题是为什么,因为HPA已经支持它了。

这应该是直截了当的。您基本上在HPA定义中引用了您的部署:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-esp-project-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: esp-myproject  <== here
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
 类似资料:
  • 我尝试过将deendpoint与云SQL和Hibernate集成。但是,每次都有错误。跟随我的测试: 1 -源文件夹中的persistence . XML:http://imgur.com/hKjf8Cs给我错误:http://imgur.com/QJe8rvq 2-资源文件夹中的persistence.xml给我错误: ServletInitializationParameters.java:5

  • 我有一个来自endpoint原始数据存储API的endpoint模型,称为资源,我使用Resource.query(). fetch(10)请求10个项目。 问题是它返回一个资源数组,但根据“创建endpointAPI”的文档,我需要返回一个消息数组。 https://cloud.google.com/appengine/docs/python/endpoints/create_api 使用Goo

  • 我正在使用这个链接构建一个使用GCM的简单聊天应用程序,我发现了这个伟大的特性“Google Cloud Endpoints”,它使事情变得更容易。但我不敢依赖它,因为我注意到它仍然是试验性的。我可以信任它还是应该使用Java servlet?

  • 云-endpoint。 我正在学习Udacity教程。我对请求和响应的流程有点混淆,下面是我的理解 endpoint应该用注释,endpoint方法应该用注释,这些方法不应该返回原始数据类型。下面是一个endpoint方法 下面是我的ProfileForm和Profile类

  • 尝试运行本地开发服务器时 我正在尝试解决打开zip文件或JAR清单时出错:C:\Program 但是我应该在哪里以及如何改变默认的-javaAgent:?

  • 我正在尝试使用foreign拨打Rest电话。 我如何用Java以非声明的方式使用Feign client builder进行Gzip压缩,因为我没有application.yml来以传统方式进行压缩。 有没有办法使用编码器或拦截器的假装客户端构建器的方法来做同样的事情?