Перейти к содержанию

Kubernetes

Описание

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

Используем клиент-серверную архитектуру (работает по REST)

Описывается как 5 бинарных файлов


Главные понятия

  • Cluster - вся управляемая Kubernetes система

  • Node - машина внутри кластера

  • Control plane - компоненты, принимающие решения об управлении кластером.

  • Worker node - машина, на которой запускаются приложения.

  • Pod - минимальная запускаемая единица Kubernetes, обычно содержит один основной контейнер

  • Deployment - управляет количеством Pod и обновлением приложения.

  • Service - предоставляет стабильный адрес для группы Pod.

Упращенная цепочка:


graph TD
A[Deployment]
--> B[ReplicaSet]
B --> C[Pods]
C --> D[Containers]

Важное отличие

  • Docker или другой container runtime запускает контейнер.

  • Kubernetes решает, где, когда и в каком количестве эти контейнеры должны работать.


Архитектура

Архитектура Kubernetes
Архитектура Kubernetes

Компоненты Control Plane

kube-apiserver

Описание

  • центральная точка входа; принимает запросы от kubectl и компонентов кластера.

etcd

Описание

  • база данных состояния кластера

kube-controller-manager

Описание

  • запускает контроллеры, которые сверяют желаемое и фактическое состояния.

kube-scheduller

Описание

  • выбирает Node для нового Pod

Компоненты Worker Node

kubelet

Описание

  • агент Node; следит, чтобы назначенные Pod работали

Container runtime

Описание

  • запускает контейнеры.

kube-proxy

Описание

  • помогает направлять сетевой трафик.

Логика работы

После выполнения команды kubectl apply -f deployment.yaml происходит примерно следующее:

1) kubectl направляет манифест API-серверу

2) API-сервер проверяет запрос и сохраняет состояние в etcd

3) Deployment-контроллер создает ReplicaSet

4) ReplicaSet создает необходимые Pod

5) Scheduler назначает каждому Pod подходящую Node

6) kubelet на этой Node запускает контейнер

7) Контроллеры продолжают следить, чтобы фактическое состояние совпадало с желаемым.


Манифест

Рассмотрим следующий пример:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - name: http
              containerPort: 80

apiVersion - версия Kubernetes API

kind - тип объекта, здесь Deployment

metadata.name - имя объекта

spec.replicas:3 - желаемое число Pod

selector - правило поиска принадлежащих Deployment Pod

template - шаблон создаваемых Pod

containers - контейнеры внутри каждого Pod