Prog Academy
RU UA
DevOps та хмари

Що таке Kubernetes (K8s)?

Kubernetes — система оркестрації контейнерів: вона сама запускає потрібну кількість контейнерів на групі серверів, перезапускає ті, що впали, розподіляє навантаження й викочує оновлення без зупинки сервісу.

Docker розвʼязує задачу «запустити один контейнер». Kubernetes розвʼязує задачу «керувати сотнями контейнерів на десятках серверів»: де саме їх розмістити, що робити при відмові вузла, як масштабувати під навантаження.

Робота будується декларативно: ви описуєте бажаний стан — «пʼять екземплярів цього сервісу, ось такі ресурси, така адреса», — а кластер постійно приводить реальність до цього опису. Звідси самовідновлення та плавні оновлення.

Kubernetes дає багато, але й коштує дорого у складності. Для невеликого проєкту з парою сервісів він найчастіше надлишковий.

Де застосовується

Kubernetes ставлять там, де сервісів багато і простій неприпустимий: маркетплейси, фінтех, телеком, великі SaaS-продукти. Він тримає потрібну кількість копій кожного сервісу, переносить їх при відмові вузла, розподіляє трафік і викочує нову версію поступово, щоб користувачі не помітили оновлення.

Власними силами кластер піднімають рідко — частіше беруть керований варіант у хмарного провайдера. У вакансіях DevOps і SRE Kubernetes входить до числа найчастіших вимог, а звʼязка з Terraform і GitOps-підходом стала фактичним стандартом експлуатації.

Приклад

Уночі один із серверів кластера виходить з ладу. Kubernetes помічає це за секунди, піднімає втрачені копії сервісів на решті вузлів і перенаправляє на них трафік. Інженер дізнається про подію зі сповіщення моніторингу, а не від користувачів.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.example.com/api:1.4.2
          ports:
            - containerPort: 3000
Опис розгортання: три копії сервісу, ліміти ресурсів — кластер сам підтримує цей стан.

Часті запитання

Чи потрібен Kubernetes невеликому проєкту?

Найчастіше ні. Для одного-двох сервісів він додає складності більше, ніж користі: кластер треба налаштовувати, оновлювати і вміти лагодити. Починають зазвичай зі звичайного сервера з контейнерами або керованого хостингу застосунків, а до Kubernetes приходять у міру зростання.

Чи складно вивчити Kubernetes?

Поріг входу помітно вищий, ніж у Docker: треба розуміти мережі, сховища, права доступу і саму модель обʼєктів кластера. Розумний порядок — спершу впевнено опанувати контейнери, потім Kubernetes. Без досвіду експлуатації сервісів багато його концепцій виглядають немотивованими.

Що таке под (pod)?

Мінімальна одиниця, якою керує Kubernetes: один або кілька тісно повʼязаних контейнерів зі спільною мережевою адресою і томами. Зазвичай у поді один контейнер застосунку, а сусідні додають допоміжні функції — збір логів чи проксіювання трафіку.

Kubernetes безплатний?

Сам проєкт має відкритий вихідний код і безплатний. Платити доводиться за інфраструктуру, на якій він працює, і за керований сервіс у хмарного провайдера, якщо ви не хочете обслуговувати керуючі вузли самі. Основна стаття витрат зазвичай — самі сервери.

Повʼязані терміни