Backend
October 12, 2023

Развертывание и масштабирование приложений с Kubernetes

Кubernetes - это как игровой уровень для приложений. Вместо того, чтобы беспокоиться об инфраструктуре, вы можете сосредоточиться на создании крутых приложений. Это система для запуска и масштабирования контейнеризованных приложений. Она позволяет легко развертывать приложения, распределять нагрузку между серверами и масштабироваться при необходимости.

Представьте Kubernetes как игровой уровень из Супер Марио. В игре есть платформы, лестницы, препятствия, враги. Вы как игрок не задумываетесь как все это работает. Вы просто играете по уровню и концентрируетесь на цели.

Kubernetes также предоставляет "игровое поле" для ваших приложений. Он запускает их, балансирует нагрузку, перезапускает в случае сбоя и масштабирует количество экземпляров. Так что вы можете сосредоточиться на разработке, а не на инфраструктуре.

Основы Kubernetes

Но для начала давайте разберемся с контейнерами.

Контейнер - это изолированное окружение для запуска приложений, похожее на легковесную виртуальную машину. Популярная технология контейнеров - Docker.

Контейнер содержит приложение и все зависимости, необходимые для запуска. Это позволяет приложению работать одинаково на любом компьютере.

Kubernetes - это оркестратор контейнеров. Он автоматизирует развертывание, масштабирование и управление контейнеризованными приложениями.

Например, вы можете использовать Kubernetes, чтобы:

  • Запустить 3 копии вашего веб-приложения на разных серверах для надежности.
  • Автоматически перезапустить контейнеры при сбое.
  • Добавить больше копий приложения, если нагрузка увеличилась.

Так Kubernetes позволяет эффективно управлять контейнерами в больших масштабах.

Установка Kubernetes

Давайте установим Kubernetes на ваш компьютер, чтобы попробовать его в действии.

Существует много способов установки Kubernetes. Мы воспользуемся инструментом minikube, который запустит одноузловой Kubernetes кластер прямо на компьютере.

Чтобы установить minikube:

  • Установите kubectl - инструмент командной строки для управления Kubernetes:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
  • Установите minikube:
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin
  • Запустите кластер Kubernetes:
minikube start

После запуска кластера можно проверить его статус командой:

kubectl get nodes

Это нам необходимо для дальнейших экспериментов с Kubernetes!

Развертывание приложения в Kubernetes

Теперь давайте развернем простое веб-приложение в Kubernetes кластере.

Создадим простой веб-сервер на Node.js:

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello Kubernetes!');
});

server.listen(3000);

Сохраните код в файл server.js.

Чтобы запустить это приложение в Kubernetes, нам нужно:

  • Запаковать приложение в Docker контейнер. Для этого создадим Dockerfile:
FROM node:12-alpine
COPY server.js .
CMD node server.js
  • Собрать Docker образ и запушить его в репозиторий:
docker build -t my-app .
docker push my-app
  • Описать приложение в манифесте Kubernetes. Это конфигурационный файл, который определяет как запускать приложение.

Манифест my-app.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app

Здесь мы определили Deployment, который запустит 3 реплики нашего приложения из образа my-app.

  • Развернуть приложение в Kubernetes:
kubectl apply -f my-app.yaml

Готово! Теперь у нас запущено 3 копии приложения в Kubernetes. Мы можем их проверить:

kubectl get pods

Таким образом Kubernetes позволяет легко управлять запуском и масштабированием приложений!

Масштабирование приложения с Kubernetes

Одна из ключевых возможностей Kubernetes - это масштабирование приложений.

Если нагрузка на приложение увеличилась, мы можем горизонтально масштабировать его - добавить больше копий приложения на новых серверах.

К примеру, чтобы увеличить количество реплик нашего приложения до 5:

kubectl scale deployment my-app --replicas=5

Kubernetes автоматически развернет 2 новые копии приложения и распределит нагрузку между ними.

Вертикальное масштабирование - это увеличение ресурсов сервера (CPU, память). В Kubernetes это делается путем задания бОльших ресурсов для контейнеров.

Таким образом Kubernetes позволяет легко масштабировать приложения для обработки растущей нагрузки.

Преимущества и сложности Kubernetes

Основные преимущества Kubernetes:

  • Автоматизация развертывания и управления. Вам не нужно вручную настраивать сервера и развертывать приложения.
  • Отказоустойчивость. Kubernetes перезапустит контейнеры при сбое и распределит работу между узлами.
  • Простое горизонтальное масштабирование. Можно легко добавлять реплики приложений для растущей нагрузки.
  • Балансировка нагрузки. Kubernetes равномерно распределяет запросы между контейнерами.

Однако на начальном этапе Kubernetes может показаться сложным:

  • Много новых концепций и компонентов для изучения.
  • Требует понимания контейнеров и инфраструктуры.
  • Непривычный способ развертывания приложений через манифесты.

Но со временем Kubernetes становится интуитивно понятным и упрощает разработку приложений.

Заключение

Мы рассмотрели основы Kubernetes и как его использовать для развертывания и масштабирования приложений. Он решает множество задач по управлению приложениями, позволяя разработчикам сосредоточиться на коде. Хотя поначалу Kubernetes кажется сложным, со временем он значительно упрощает развертывание и эксплуатацию приложений.