Автоматичне горизонтальне масштабування екземплярів нод кластера

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

1. Принцип автоматичного горизонтального масштабування под OKD кластера

Об‘єкт HPA (Horizontal Pod Autoscaler) — це об‘єкт, який відповідає за автоматичне створення або видалення екземплярів под при досягненні мінімальних чи максимальних заданих граничних значень ресурсів, таких як CPU та/або Memory.

В об’єкті HPA задається мінімальна та максимальна кількість реплік подів, до якої може бути розширено чи звужено значення запущених екземплярів подів. Також в об’єкті HPA вказуються граничні значення ресурсів, при досягненні яких відбувається додавання або видалення екземплярів под.

Horizontal Autoscaling Definition
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
    name: image-registry
    namespace: default
spec:
    maxReplicas: 7
    minReplicas: 3
    scaleTargetRef:
        apiVersion: apps.openshift.io/v1
        kind: DeploymentConfig
        name: image-registry
    targetCPUUtilizationPercentage: 75
status:
    currentReplicas: 5
    desiredReplicas: 0

У разі необхідності, потрібно додати новий екземпляр поди, kube-scheduler приймає рішення, на якій із інстансів нод буде запущений новий екземпляр, базуючись на вільних ресурсах ноди, таких як CPU та Memory, та метаінформації про те, де додатковий екземпляр пода може бути запущений (taints, affinity та anti-affinity). Якщо жодна з існуючих екземплярів нод в кластері не відповідає вимогам для запуску екземпляру пода, буде створений Event з повідомленням про те, що відсутні екземпляри нод, на яких може бути запущений под.

Event example
0/2 nodes are available: 1 Insufficient memory, 1 node(s) had taints that the pod didn't tolerate.

2. Принцип автоматичного горизонтального масштабування нод OKD-кластера

Автоматичне горизонтальне масштабування нод (HNA) відбувається на основі подій (Events) в кластері про неможливість створити новий екземпляр Pod через відсутність екземплярів нод в кластері, що відповідають вимогам. HNA оперує трьома об‘єктами Kubernetes: ClusterAutoscaler, MachineAutoScaler і MachineSet.

ClusterAutoscaler - об‘єкт Kubernetes, в якому задається розмір OKD кластера для досягнення його поточних вимог розгортання. CPU і Memory - ресурси, якими оперує cluster autoscaler при масштабуванні екземплярів нод кластера. Cluster authoscaler збільшує розмір кластеру коли існують екземпляри подів, які не можуть бути запущені на жодній з існуючих екземплярів нод через відсутність необхідних ресурсів або невідповідність екземплярів нод вимогам розгортання. Cluster autoscaler не розширяє ресурси кластера за межі граничних лімітів, вказаних в Cluster Autoscaler definition.

ClusterAutoscaler Definition
apiVersion: "autoscaling.openshift.io/v1"
kind: "ClusterAutoscaler"
metadata:
  name: "default"
spec:
  podPriorityThreshold: -10
  resourceLimits:
    maxNodesTotal: 24
    cores:
      min: 8
      max: 128
    memory:
      min: 4
      max: 256
  scaleDown:
    enabled: true
    delayAfterAdd: 10m
    delayAfterDelete: 5m
    delayAfterFailure: 30s
    unneededTime: 5m

MachineAutoScaler - об‘єкт Kubernetes, що містить інформацію про граничні значення для масштабування екземплярів нод кластера та приналежність екземпляру ноди до відповідного MachineSet об‘єкту.

MachineAutoscaler Definition
apiVersion: "autoscaling.openshift.io/v1beta1"
kind: "MachineAutoscaler"
metadata:
  name: "worker-us-east-1a"
  namespace: "openshift-machine-api"
spec:
  minReplicas: 1
  maxReplicas: 12
  scaleTargetRef:
    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    name: worker-us-east-1a

MachineSet - об‘єкт Kubernetes, що групує екземляри нод кластера по заданим параметрам.

MachineSet Definition for AWS Cloud Provider
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
  name: <infrastructure_id>-<role>-<zone>
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <role>
        machine.openshift.io/cluster-api-machine-type: <role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone>
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/<role>: ""
      providerSpec:
        value:
          ami:
            id: ami-046fe691f52a953f9
          apiVersion: awsproviderconfig.openshift.io/v1beta1
          blockDevices:
            - ebs:
                iops: 0
                volumeSize: 120
                volumeType: gp2
          credentialsSecret:
            name: aws-cloud-credentials
          deviceIndex: 0
          iamInstanceProfile:
            id: <infrastructure_id>-worker-profile
          instanceType: m4.large
          kind: AWSMachineProviderConfig
          placement:
            availabilityZone: us-east-1a
            region: us-east-1
          securityGroups:
            - filters:
                - name: tag:Name
                  values:
                    - <infrastructure_id>-worker-sg
          subnet:
            filters:
              - name: tag:Name
                values:
                  - <infrastructure_id>-private-us-east-1a
          tags:
            - name: kubernetes.io/cluster/<infrastructure_id>
              value: owned
          userDataSecret:
            name: worker-user-data
Horizontal Node Autoscaling

horizontal node autoscaling

HPA - (Horisontal Pod Autoscaler) - об‘єкт Kubernetes, що автоматично обновляє робочий ресурс (такі як Deployment чи StatefulSet), з метою для автоматичного масштабування робочих ресурсів відповідно до вимог.

  • RC - (Replication Controller) - об‘єкт Kubernetes, який забезпечує що відповідна кількість реплік pod буде запущена в будь який момент. ReplicationController ensures that a specified number of pod replicas are running at any one time.

  • DC - (Deployment Configuration) - об‘єкт Kubernetes, який включає один або кілька Replication Controllers, що містить часовий стейт деплоймента, як темплейт для об‘єкта pod.

HNA - (Horisontal Node Autoscaler) - процес, що включає об‘єкти Kubernetes, які забезпечують автоматичне горизонтальне масштабування нод кластера.

  • ClusterAutoscaler - cluster autoscaler конфігурує розмір OKD кластера для досягнення його поточних deployment вимог.

  • MachineAutoscaler - machine autoscaler конфігурує кількість інстансів нод в MachinSet, що розгортаються в OKD кластері.