首页 文章

Kubernetes pod自动调度与Instance Group自动调节不同步

提问于
浏览
2

我有一个简单的wordpress网站由 ReplicationControllerService 定义如下 . 一旦应用程序部署并快乐地运行,我就通过转到GCE控制台并使用相同的设置启用自动扩展(max 5,cpu 10),在Kubernetes创建的实例组上启用了自动扩展 .

自动调整实例和pod似乎工作得不够好,只是它们彼此不同步 . RC自动缩放从CE实例中删除了pod,但实例没有任何反应,因此它们会在LB运行状况检查失败并将其删除之前启动请求失败 .

有没有办法让kubernetes扩展pods ASWELL作为扩展它们运行的实例,所以这不会发生?或者有没有办法让它们保持同步?

我的流程如下:

创建群集

$ gcloud container clusters create wordpress -z us-central1-c -m f1-micro

创建rc

$ kubectl create -f rc.yml

创建服务

$ kubectl create -f service.yml

自动缩放rc

$ kubectl autoscale rc frontend --max 5 --cpu-percent=10

然后我在控制台中启用了自动扩展,并为服务器加载了它们以进行扩展 .

rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: custom-wordpress-image
        name: wordpress
        ports:
          - containerPort: 80
            hostPort: 80

service.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    name: frontend
  name: frontend
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    name: wordpress

Update for more information

如果我不使用kubernetes autoscaler,而是将副本设置为与实例组autoscaler max instance count相同的数字,我似乎得到了所需的结果 . 当实例添加到实例组时,kubernetes会对它们进行配置,因为它们会相应地删除kubernetes更新 . 此时我想知道kubernets autoscaler的目的是什么 .

3 回答

  • 3

    随着Kubernetes 1.3 autoscaling的新增加,我现在可以让Kubernetes自动缩放我的群集和我的pod .

    使用GCP's create command我现在可以使用 --enable-autoscaling--min-nodes--max-nodes--num-nodes 轻松添加自动缩放的群集 .

  • 4

    TLDR;

    在你的用例中,kubernetes只会给你带来开销 . 您正在实例组中的每个实例上运行1个pod(docker container) . 您也可以将Docker容器部署到App Engine灵活(以前的托管VM)https://cloud.google.com/appengine/docs/flexible/custom-runtimes/,然后让实例组的自动扩展处理它 .

    更长的答案

    (尚未)将实例缩放链接到k8s中的pod缩放 . 这是因为它们是两个独立的问题 . k8s的HPA意味着具有(小)容器扩展以扩展群集(大型机器)上的负载,因此它们将因负载增加而扩展 .

    如果您没有定义任何限制(每台计算机1个容器),您可以将最大容量设置为群集的最大扩展,从而有效地将所有这些容器设置为 pending 状态,直到另一个实例旋转为止 .

    如果你希望你的pod让你的节点扩展,那么最好的方法(我们发现)就是让它们“过度拥挤”一个实例,这样实例组扩展就可以了 . 我们通过设置相当低的内存/ CPU要求来实现这一点 . 我们的pod和上限,有效地允许它们突破实例的总可用CPU /内存 .

    resources:
      requests:
        cpu: 400m
        memory: 100Mi
      limits:
        cpu: 1000m
        memory: 1000Mi
    
  • 0

    根据我的理解,kubernetes autoscaler功能主要用于RCs和部署具有为其子级定义的cpu限制的情况 . 您可以定义具有最小和最大pod数以及pod的目标CPU使用率的自动缩放器,并且它将根据这些限制扩展群集中的pod,而不管群集大小如何 . 如果pod没有限制,那么您可能希望扩展群集并为每个其他节点安排一个额外的pod,尽管我能够运行.'m not sure that aligns with best practices for containerized services because any node in a cluster running an unlimited pod can be dominated which might adversely limit other pods'能够运行 . 这是相对不可预测的 .

相关问题