Давайте изучим архитектуру Kubernetes подробно.
- Kube API server
- controller
- scheduler
- etcd
- kubelet
- kube-proxy
- container runtime
Мастер нода
Мастер нода управляет кластером Kubernetes и является точкой входа для всех административных задач.
Вы можете общаться с главным узлом через CLI, GUI или API.
Для достижения отказоустойчивости в кластере может быть более одного главного узла.
Когда у нас более одного главного узла, будет режим высокой доступности и одна нода будет выполнять все операции.
Все остальные главные узлы будут последователями этого ведущего узла.
Кроме того, для управления состоянием кластера Kubernetes использует etcd.
Все главные узлы подключаются к etcd, который является распределенным хранилищем значений ключей.
API Server
Scheduler
Controller Manager
Незаходящие контуры управления, которые регулируют состояние кластера Kubernetes, управляются controller manager, т.е. диспетчером управления.
Теперь каждый из этих циклов управления знает о желаемом состоянии объекта, которым он управляет, и затем они смотрят на свое текущее состояние через серверы API.
Если желаемое состояние в контуре управления не соответствует текущему состоянию объекта, управляющим контуром предпринимаются корректирующие шаги для приведения текущего состояния в соответствие с желаемым.
Таким образом, диспетчер контроллеров гарантирует, что ваше текущее состояние совпадает с желаемым.
etcd
Etcd – это распределенное хранилище значений ключей, которое используется для хранения состояния кластера.
Таким образом, либо он должен быть частью мастера Kubernetes, либо вы также можете настроить его внешне.
etcd записан на goLang и основан на алгоритме согласования Raft.
Raft позволяет собирать машины в единую группу, которая может пережить неудачи некоторых ее членов.
Даже если некоторые члены не работают, этот алгоритм может работать в любой момент времени.
Один из узлов в группе будет ведущим, а остальные будут ведомыми.
Может быть только один мастер, и все другие мастера должны следовать за этим мастером.
Помимо сохранения состояния кластера, etcd также используется для хранения деталей конфигурации, таких как подсети и config map.
Что такое config map в Kubernetes?
☸️ Kubectl Шпаргалка всех необходимых команд Kubernetes часть 1
Рабочая нода ( worker )
Рабочий узел – это виртуальный или физический сервер, который запускает приложения и управляется главным узлом.
Поды запланированы на рабочих узлах, которые имеют необходимые инструменты для их запуска и подключения.
Поды – это не что иное, как набор контейнеров.
А чтобы получить доступ к приложениям из внешнего мира, вы должны подключаться к рабочим узлам, а не к мастер узлам.
Давайте рассмотрим компоненты рабочего узла.
Container Runtime
Container runtime в основном используется для запуска и управления непрерывным жизненным циклом на рабочем узле.
Некоторые примеры выполнения контейнеров, которые я могу вам предоставить, это контейнеры rkt, lxc и т. д.
Часто отмечается, что docker также называется container runtime, но, если быть точным, позвольте мне сказать вам, что docker – это платформа, которая использует контейнеры как container runtime.
Kubelet
Kubelet – это агент, который работает на каждом рабочем узле и взаимодействует с главным узлом.
Итак, если у вас есть десять рабочих узлов, то kubelet запускается на каждом рабочем узле.
Он получает определение пода различными способами и запускает контейнеры, связанные с портом.
Он также гарантирует, что контейнеры, которые являются частью пода, всегда в порядке.
Kubelet подключается к среде выполнения контейнера с использованием фреймворка gRPC.
Kubelet подключается к интерфейсу среды выполнения контейнера (CRI) для выполнения контейнеров и операций с образами.
Служба образов отвечает за все операции с ними, а служба времени выполнения отвечает за все операции с подами и контейнерами.
Эти две службы выполняют две разные операции.