Стратегии масштабирования в Kubernetes: развенчание мифов о maxSurge и maxUnavailable

Kubernetes — это мощная платформа оркестрации контейнеров, обеспечивающая эффективное масштабирование и развертывание приложений. Когда дело доходит до управления обновлениями и масштабированием, решающую роль играют два ключевых параметра: maxSurge и maxUnavailable. В этой статье мы углубимся в эти концепции, обсудим их значение и рассмотрим различные стратегии развертывания, использующие эти параметры. Итак, берите кофе и начнем!

Что такое maxSurge и maxUnavailable:

Чтобы понять значение терминов maxSurge и maxUnavailable, нам нужно сначала разобраться с чередующимися обновлениями в Kubernetes. Последовательное обновление позволяет нам обновлять развертывание Kubernetes без простоев. Это достигается за счет постепенного обновления экземпляров при сохранении заданного уровня доступности.

maxSurge: параметр maxSurge определяет максимальное количество модулей, которые могут быть созданы сверх желаемого количества реплик во время скользящего обновления. Это позволяет временно выделять избыточное количество модулей во время процесса обновления. Например, если вы установите для maxSurge значение 2, а желаемое количество реплик — 5, Kubernetes может временно создать до 7 модулей во время обновления.

maxUnavailable: С другой стороны, maxUnavailable определяет максимальное количество модулей, которые могут быть недоступны во время чередующегося обновления. Это гарантирует, что минимальное количество модулей всегда будет доступно во время процесса обновления. Например, если вы установите для maxUnavailable значение 1, а желаемое количество реплик — 5, Kubernetes гарантирует, что в любой момент времени во время обновления будет работать как минимум 4 модуля.

Стратегии развертывания:

  1. RollingUpdate. Стратегией развертывания по умолчанию в Kubernetes является RollingUpdate. Он использует параметры maxSurge и maxUnavailable, чтобы обеспечить плавный процесс обновления. Вот пример:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app:latest
  1. Развертывание «Синий-зеленый». При развертывании «Синий-зеленый» создаются две идентичные среды (синяя и зеленая). Новая версия развертывается в зеленой среде, а синяя среда продолжает обслуживать производственный трафик. Как только зеленая среда стабилизируется, трафик переключается с синего на зеленый. Вот пример того, как этого добиться с помощью maxSurge и maxUnavailable:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-green:latest
  1. Canary Deployment: Canary Deployment позволяет протестировать новую версию вашего приложения, постепенно направляя к ней небольшую часть трафика. Вот пример канареечного развертывания, использующего maxSurge и maxUnavailable:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 4
      maxUnavailable: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app:latest

В этой статье мы рассмотрели концепции maxSurge и maxUnavailable в Kubernetes и их значение для масштабирования приложений. Мы также обсудили три стратегии развертывания: RollingUpdate, сине-зеленое развертывание и развертывание Canary, а также предоставили примеры кода для каждой. Понимая и эффективно используя эти стратегии, вы можете обеспечить бесперебойное обновление и повышенную доступность ваших приложений Kubernetes.

Не забудьте учитывать конкретные требования ваших приложений и соответственно выбирать подходящую стратегию. Благодаря возможностям Kubernetes и этим стратегиям развертывания вы можете уверенно масштабировать свои приложения с минимальным временем простоя и максимальной эффективностью.