Статьи по теме - Kubernetes#

---

title: Kubernetes Architecture

---

classDiagram

class `Master Node`

`Master Node` : ETCD

`Master Node` : kube-scheduler

`Master Node` : Control Manager

`Master Node` : kube-apiserver()

  

`Master Node` <|..|> `Worker Node 01`

`Master Node` <|..|> `Worker Node 02`

  

class `Worker Node 01`

`Worker Node 01` : kubelet

`Worker Node 01` : kube-proxy

`Worker Node 01` : CRI

`Worker Node 01` : POD(01)

`Worker Node 01` : POD(02)

  

class `Worker Node 02`

`Worker Node 02` : kubelet

`Worker Node 02` : kube-proxy

`Worker Node 02` : CRI

`Worker Node 02` : POD(01)

`Worker Node 02` : POD(02)

Master Node#

Мастер нода представляет службы управления (Control Plane)

  • Кластер Etcd ведёт запись всех нод, размещённых на них контейнерах, запись иных данных - это СУБД для Kubernetes, заточенная на согласованности данных и их доступности;
  • Kube-scheduler: команды создания и переноса контейнеров на worker nodes. Считает число ресурсов на нодах и подбирает размещение pods на нодах в соответствии с профилем потребляемых ресурсов;
  • Kube API Server: служба обмена сообщениями в кластере k8s. Аутентификация отправителя сообщения, валидирует отправителя сообщений, регистрирует сообщения по интерфейсу API в базу Etcd; Это единственный компонент, который общается напрямую с Etcd;
  • Kube Controller Manager: содержит службы контроля Node Controller (следит за доступностью нод), Replication Controller (отслеживание распространения копий контейнеров в рамках группы репликации по нодам).

Worker Nodes#

Ноды-работники размещают у себя контейнеры через Container Runtime Interface (CRI) с поддержкой containerd (через него Docker, с версии k8s 1.24+) и Rocket:

  • Для приёма команд и передачи статистики по рабочей ноде используется kubelet, служба управления нодой;

Kubeadm не устанавливает автоматически Kubelet-ы. Они всегда ставятся вручную на worker nodes.

  • Для связи с нодой применяется служба Kube-proxy. Создаёт правила проброса потоков данных от служб к pods, на которых они размещены. Один из способов - создание правил iptables;

crictl#

Проверка и решение проблем с рабочими нодами. В отличие от утилит Docker, crictl понимает pods.

crictl images # список образов
circtl ps -a # список контейнеров
crictl exec -i -t 288023742....aaabb392849 ls # запуск команды в контейнере
crictl logs 288023742....aaabb392849 # посмотреть лог контейнера
crictl pods 

IDE#

Для написания YAML-файлов хорошо подходит редактор с плагином, понимающим k8s. Пример: VSCode + Red Hat YAML plugin

В свойствах плагина найти пункт Yaml: Schemas -> Edit in settings.json Добавить в конфиг:

{
    "yaml.schemas": {
        
    "kubernetes": "*.yaml"
    },
    "redhat.telemetry.enabled": true
}

Это позволит все файлы YAML редактировать с учётом полей, принятых для k8s.