Автоматичне горизонтальне масштабування екземплярів нод кластера
🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
1. Принцип автоматичного горизонтального масштабування под OKD кластера
Об‘єкт HPA (Horizontal Pod Autoscaler) — це об‘єкт, який відповідає за автоматичне створення або видалення екземплярів под при досягненні мінімальних чи максимальних заданих граничних значень ресурсів, таких як CPU та/або Memory.
В об’єкті HPA задається мінімальна та максимальна кількість реплік подів, до якої може бути розширено чи звужено значення запущених екземплярів подів. Також в об’єкті HPA вказуються граничні значення ресурсів, при досягненні яких відбувається додавання або видалення екземплярів под.
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 з повідомленням про те, що відсутні екземпляри нод, на яких може бути запущений под.
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.
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 об‘єкту.
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, що групує екземляри нод кластера по заданим параметрам.
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
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 кластері.