Найти тему

Kubernetes простыми словами. Пошаговое руководство по K8s

Kubernetes (или K8s) — это система для автоматизации развёртывания, управления и масштабирования приложений.

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

Пример из жизни:

Представь, что ты открыл сеть ресторанов быстрого питания, и тебе нужно готовить и доставлять бургеры. У тебя есть несколько кухонь (серверов), на которых работают повара (приложения). Возникают вопросы:

  • Как убедиться, что на всех кухнях готовят одинаковое количество бургеров?
  • Что делать, если на одной кухне закончились повара? Нужно перекинуть заказы на другие кухни.
  • Как справиться с резким наплывом заказов? Нужно быстро нанять больше поваров или открыть больше кухонь.Kubernetes — это как менеджер, который управляет всеми твоими кухнями (серверами) и следит за тем, чтобы все заказы выполнялись равномерно и без перебоев.

Основные понятия:

1. Под (Pod) — это как один повар на твоей кухне. Внутри пода может быть одно или несколько приложений (например, бургер и картошка фри). Pod — это самая маленькая единица в Kubernetes.

2. Кластер (Cluster) — это все твои кухни (сервера), которые работают вместе. Kubernetes управляет этим кластером.

3. Ноды (Nodes) — это отдельные серверы (или виртуальные машины), на которых работают твои повара (Pods). На одном сервере может быть несколько поваров.

4. Деплоймент (Deployment) — это как инструкция для Kubernetes, где описано, сколько поваров нужно и что они должны делать. Например, ты говоришь Kubernetes: "Мне нужно 5 поваров, чтобы готовили бургеры". Если один повар уйдёт, Kubernetes автоматически наймёт нового.

5. Служба (Service) — это как входная дверь в ресторан. Она нужна для того, чтобы клиенты (пользователи) знали, куда им обращаться, чтобы получить бургеры. Служба распределяет запросы между поварами (Pods).

6. Масштабирование (Scaling) — если у тебя увеличивается количество клиентов, Kubernetes быстро добавляет больше поваров. Если клиентов становится меньше, он увольняет часть поваров, чтобы не тратить ресурсы зря.

Пример использования Kubernetes:

У тебя есть приложение, например, сайт для заказа еды. Оно состоит из нескольких частей:

  • Фронтенд (то, что видит пользователь)
  • Бэкэнд (логика сайта, обработка заказов)
  • База данных (где хранятся заказы)

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

1. Создать поды для каждой части приложения:

Один под для фронтенда.
Несколько подов для бэкэнда (чтобы обрабатывать больше заказов).
Один под для базы данных.

2. Настроить автоматическое масштабирование:

если на сайт заходит больше пользователей, Kubernetes добавит дополнительные поды с бэкэндом.

3. Обеспечить отказоустойчивость:

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

4. Настроить балансировку нагрузки:

если много пользователей хотят зайти на сайт, Kubernetes распределит запросы между всеми подами фронтенда.

Преимущества Kubernetes:

  • Автоматизация: Kubernetes сам следит за тем, чтобы все части приложения работали корректно. Если что-то «сломается», он сам это починит (например, перезапустит поды).
  • Масштабируемость: Kubernetes позволяет легко и быстро масштабировать приложение в зависимости от нагрузки.
  • Универсальность: можно запускать Kubernetes в облаке (например, в Google Cloud, AWS) или на своих серверах.
  • Мобильность: благодаря контейнерам (например, Docker), приложения могут легко переноситься между разными серверами и окружениями.

Итог:

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

Пошаговое руководство по Kubernetes

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

-2

Шаг 1: Установи необходимые инструменты

Прежде чем начать работать с Kubernetes, тебе нужно установить несколько инструментов:

1. Docker: Docker — это инструмент для создания контейнеров, в которых будут запускаться твои приложения. Kubernetes работает с контейнерами (например, Docker-контейнерами). Установка Docker: Инструкция по установке Docker

2. kubectl: Это командная утилита для управления Kubernetes-кластером. С её помощью ты сможешь взаимодействовать с кластером и управлять подами, сервисами и другими ресурсами. Установка kubectl: Инструкция по установке kubectl

3. Minikube (опционально): Если у тебя нет доступа к облачному Kubernetes-кластеру, ты можешь создать локальный кластер с помощью Minikube. Установка Minikube: Инструкция по установке Minikube

Шаг 2: Запусти Kubernetes-кластер

Если у тебя уже есть доступ к Kubernetes-кластеру, можешь пропустить этот шаг.

Создай локальный кластер с Minikube:

1. Запусти Minikube:

minikube start

2. Проверь, что кластер работает:

kubectl cluster-info

В выводе ты должен увидеть информацию о доступных компонентах кластера.

Шаг 3: Создай Docker-контейнер с приложением

Допустим, у тебя есть простое веб-приложение на Python с Flask. Давай создадим контейнер для этого приложения.

1. Создай файл app.py:

-3

2. Создай файл Dockerfile для сборки контейнера:

-4

3. Собери Docker-образ:

docker build -t my-flask-app .

4. Проверь, что контейнер работает локально:

docker run -p 5000:5000 my-flask-app

5. Открой браузер и перейди на http://localhost:5000, чтобы убедиться, что приложение работает.

Шаг 4: Загрузите Docker-образ в Kubernetes

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

1. Для Minikube: Используй образ напрямую, он уже доступен локально.

2. Для облачного кластера:
Загрузите образ в Docker Hub:

docker tag my-flask-app <твой-докерхаб-логин>/my-flask-app
docker push <твой-докерхаб-логин>/my-flask-app

Шаг 5: Создание деплоймента (Deployment)

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

1. Создай YAML-файл deployment.yaml:

-5

2. Примените деплоймент:

kubectl apply -f deployment.yaml

3. Проверь, что поды запущены:

kubectl get pods

Ты должен увидеть два пода, так как мы указали replicas: 2.

Шаг 6: Создание сервиса (Service)

Чтобы получить доступ к приложению извне, тебе нужно создать Kubernetes-сервис. Сервис будет балансировать трафик между подами.

1. Создай YAML-файл service.yaml:

-6

2. Примените сервис:

kubectl apply -f service.yaml

3. Проверь, что сервис работает:

kubectl get svc

Ты увидишь внешний порт (в нашем примере это 30000).

4. Доступ к приложению:
Если ты используешь Minikube, получи IP-адрес Minikube:

minikube ip
  • Перейди в браузере по адресу http://<Minikube-IP>:30000.
  • Если у тебя облачный кластер, используй IP-адрес ноды и порт 30000.

Шаг 7: Масштабирование приложения

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

1. Используй команду kubectl scale, чтобы увеличить количество реплик:

kubectl scale deployment flask-app-deployment --replicas=5

2. Проверь, что подов стало больше:

kubectl get pods

Теперь должно быть 5 подов.

Шаг 8: Мониторинг и управление

Ты можешь отслеживать состояние подов, сервисов и других ресурсов с помощью kubectl.

1. Посмотреть логи пода:

kubectl logs <имя-пода>

2. Получить подробную информацию о поде:

kubectl describe pod <имя-пода>

3. Удалить ресурсы, если они больше не нужны:

kubectl delete -f deployment.yaml
kubectl delete -f service.yaml

Заключение:

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

-7

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам