====== Мат часть ====== {{ :k8s:снимок_экрана_2024-08-15_в_15.23.10.png?direct&600 |}} **Docker**\\ ПО для автоматизации развертывания и управления приложениями в средах с поддержкой контейнеризации (cgroup в ядре)\\ Изначально использовал LXC, в последствии собственная библиотека. libcotainer\\ **Kubernetes**\\ ПО для автоматизации развертывания, масштабирования контейнерных приложений и управления ими. Поддерживает основные технологии контейнеризации, включая Докер, Rkt, так же возможна поддержка аппаратной виртуализации\\ **OpenShift**\\ Платформа облачной разработки как услуга (PaaS), разработанная Red Hat.\\ Позволяет разрабатывать и развертывать свои приложения в облачной инфраструктуре. В целом это семейство ПО для контейнеризации, разработанного Red Hat\\ **Контейнеризация** (контейнеризация на уровне ОС, контейнерная виртуализация, зонная виртуализация)\\ Метод виртуализации, при котором ядро ОС поддерживает несколько изолированных экземпляров пространств пользователя вместо одного.\\ Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга\\ **Виртуализация**\\ Предоставление набора вычислительных ресурсов или их логического объединения, абстрагированное от аппаратной реализации и обеспечивающее при этом логическую изоляцию друг от друга вычислительных процессов\\ **Эмуляция**\\ Комплекс программных, аппаратных средств или их сочетание, для копирования (или эмулирования) функции одной системы на другую\\ **chroot**\\ Операция изменения корневого каталога. Программа будет иметь доступ только к файлам содержащимся внутри этого каталога\\ ==== Docker ==== **Docker-клиент**\\ Программа docker, главный интерфейс к Docker. Получает команды от пользователя и взаимодействует с Docker-демоном\\ **Docker-образ**\\ Read-only шаблон. Образы используются для создания контейнеров\\ **Docker-реестр** (registry)\\ Хранит образы Есть публичные и приватные реестры\\ **Контейнеры**\\ В контейнерах содержится все что нужно для работы приложения. Каждый контейнер создается из образа.\\ **CGroup (Control Groups)**\\ Докер активно использует контрольные группы. Ключ в работе приложений в изоляции, предоставление ему только тех ресурсов, которые вы хотите предоставить. Контролировать разделение ресурсов\\ === Namespaces === При создании контейнера, Докер, для каждого контейнера создает набор пространств имен, для организации работы\\ Такие как, pid (изоляция процесса), net (управление сетевыми интерфейсами), inc (управление IPC ресурсами), mnt (управление точками монтирования), utc (для изолирования ядра и контроля генерации версий)\\ ==== Kubernetes ==== Открытое ПО для автоматизации развертывания, масштабирования контейнеризированных приложений и управления ими\\ Управление кластером контейнеров Linux как единой системой. Управляет и запускает контейнеры Докер на большом кол-ве хостов, а так же обеспечивает совместное размещение и репликация большого кол-ва контейнеров\\ Преследует две цели: как масштабировать и запускать контейнеры сразу на большом кол-ве хостов а так же выполнять их балансировку. В проекте предлагается высокоуровневый API, определяющий логическое группирование контейнеров, позволяющий определять пулы контейнеров, балансировать нагрузку, а так же задавать их размещение.\\ Основные возможности: * Мониторинг и распределение нагрузки * Оркестрация хранилища * Авто-развертывание и откаты. Описывается желаемое состояние * Автораспределение нагрузки, указывается объем ресурсов доступных контейнеру * Самоконтроль состояния контейнеров * Управление конфиденциальной инфой Kubernetes это не монолитное решение, поэтому возможности являются дополнительными и подключаемыми\\ Kubernetes это не просто система оркестрации, фактически он устраняет необходимость в этом.\\ Технически оркестрами это выполнение определенного рабочего процесса: сначала А, затем Б, потом С. Напротив, Куб содержит набор независимых, компонуемых процессов управления, которые непрерывно переводят текущее состояние к предполагаемому.\\ Неважно как добраться от А до С. Не требуется так же централизованный контроль.\\ === Архитектура === {{ :k8s:снимок_экрана_2024-08-15_в_16.11.54.png?direct&600 |}} Куб как правило развертывается в кластере, кластер состоит из нескольких машин, т.н. Узлы (ноды), которые запускают контейнеризированные приложения. Кластер имеет как минимум один рабочий узел\\ В рабочих узлах размещены Поды, являющиеся компонентами приложения. \\ Еще есть некая «плоскость управления»\\ == Плоскость управления == Компоненты панели управления отвечают за основные операции кластера, а так же обрабатывают события кластера (запуск нового Пода при replicas Low)\\ Может быть запущена на любой машине в кластере, рекоммендуется отдельная\\ == kube-apiserver == Компонент который предоставляет API Kubernetes == etcd == Состояние мастера хранится в etcd. Это высоконадежное и распределенное хранилище данных в формате «ключ-значение». Используется в качестве основного хранилища всех данных кластера\\ == kube-scheduler == Привязывает незапушенные Поды к нодам. Отслеживает созданные Поды без привязанного узла и выбирает узел на котором они должны крутится\\ == kube-controller-manager == Все остальные функции уровня кластера представлены в Controller Manager. В него входят такие как: Node Controller, Replication Controller, Endpoints Controller, Account & Token Controllers\\ == cloud-controller-manager == Контроллеры которые взаимодействуют с основными облачными провайдерами\\ == Компоненты узла == Т.е. Работают на каждом узле, поддерживая работу годов и среды выполнения куба:\\ **kubelet** - Агент, следит чтобы контейнеры были запущены в Поде. Kubelet управляет Подами, из контейнерами, образами, разделами и т.д.\\ **kube-proxy** - На каждой ноте запускается простой прокси-балансировщик. Может выполнять простейшее перенаправление потоков TCP и UDP между набором бекендов\\ Конфигурирует правила сети на узлах, при помощи них разрешаются сетевые подключения к вашим подам изнутри и снаружи кластера\\ == Дополнения == **DNS** - кластерный ДНС сервер, наряду с другими ДНС серверами в вашем окружении, обновляет ДНС записи в кубе\\ Каждый контейнер в кубе автоматически подключает этот ДНАС сервер\\ ==== Openshift ==== {{ :k8s:снимок_экрана_2024-08-15_в_17.42.02.png?direct&600 |}} === Типы ресурсов === == Deployment == Описывает желаемое состояние конкретного компонента приложения, в воде Pod. С помощью деплойментов создаются ReplicaSet, которые являются экземплярами приложений (Подами)\\
:!: Example apiVersion: apps/v1 kind: Deployment metadata: name: hello-openshift spec: replicas: 1 selector: matchLabels: app: hello-openshift template: metadata: labels: app: hello-openshift spec: containers: - name: hello-openshift image: openshift/hello-openshift:latest ports: - containerPort: 80
== ConfigMap == Содержит пары ключ-значение конфигурационных данных, которые могут использоваться при запуске подов с приложением или для хранения конфигурационных данных для системных компонент\\
:!: Example kind: ConfigMap apiVersion: v1 metadata: creationTimestamp: 2016-02-18T19:14:38Z name: example-config namespace: default data: example.property.1: hello example.property.2: world example.property.file: |- property.1=value-1 property.2=value-2 property.3=value-3
== Service конфиг == Служит в качестве внутреннего балансировка нагрузки. Идентифицирует набор репетированных модулей (подов), для того чтобы проксировать соединения, которые он получает, к ним\\ Поды могут быть добавлены или удалены, а service продолжает быть постоянно доступным, позволяя ссылаться н него по внутреннему адресу\\
:!: Example apiVersion: v1 kind: Service metadata: name: docker-registry spec: selector: docker-registry: default ports: - nodePort: 0 port: 5000 protocol: TCP targetPort: 5000
===== Консоль WSL ===== Для двухфакторной авторизации через браузер, помогает утилита [[https://wslutiliti.es/wslu/install.html|wslu]] ([[https://superuser.com/questions/1262977/open-browser-in-host-system-from-windows-subsystem-for-linux|info]])\\