htps://boosty.
to/stravnik
Kubernetes
Оркестрация контейнеров
Словарь
Kubernetes (K8s) — оркестратор контейнеров, позволяющий автоматизировать развертывание,
масштабирование и управление приложениями в контейнерах.
Контейнер — легковесный, упакованный, портативный компонент, содержащий все, что
необходимо для запуска приложения, включая код, среду выполнения, библиотеки и настройки.
Под (Pod) — минимальная и простейшая единица в Kubernetes, представляющая собой один или
несколько контейнеров, которые размещаются вместе на одном узле.
Узел (Node) — физический или виртуальный сервер, на котором запущен Kubernetes и на котором
размещаются контейнеры.
Кластер (Cluster) — набор узлов, на которых запускается Kubernetes, обеспечивающий среду для
развертывания и управления приложениями.
Контроллер развертывания (Deployment) — компонент, который управляет процессом
развертывания приложений, обеспечивая заданное состояние приложений и их
масштабирование.
Сервис (Service) — компонент, который обеспечивает постоянный доступ к приложениям через
сетевой адрес, несмотря на перезапуск подов.
Пространство имен (Namespace) — виртуальное разделение в кластере Kubernetes, позволяющее
группировать ресурсы по логическим блокам для удобства управления и изоляции.
Репликасет (ReplicaSet) — компонент Kubernetes, который поддерживает заданное количество
копий подов, обеспечивая их постоянное количество в кластере.
kubectl — командная строка (CLI) для взаимодействия с кластерами Kubernetes. Это основной
инструмент для управления ресурсами и компонентами кластера Kubernetes.
Minikube — инструмент, позволяющий локально запускать Kubernetes на вашем компьютере. Это
удобно для разработки и тестирования приложений, предназначенных для работы в Kubernetes.
Контейнерный оркестратор — система для автоматизации развертывания, управления,
масштабирования, сетевых взаимодействий и мониторинга контейнеризированных приложений.
Материалы
Статьи
1. Что такое оркестрация контейнеров
2. Kubernetes для начинающих
3. Установка Kubernetes с помощью Minikube
htps://[Link]/stravnik
htps://[Link]/stravnik
Вопросы для самопроверки
1. Какой инструмент позволяет локально запускать Kubernetes для тестирования и
разработки?
2. Какая команда используется для взаимодействия с кластером Kubernetes из командной
строки?
3. Как называется минимальная единица развертывания в Kubernetes?
4. Какой объект Kubernetes позволяет обеспечить постоянный доступ к подам через сеть?
5. Какой компонент в архитектуре Kubernetes отвечает за назначение подов на ноды?
6. Где хранится состояние кластера Kubernetes?
Задание для выполнения
В этом задании предлагаем вам:
• Развернуть minikube локально
• Создать и развернуть в кластере объект типа Deployment со следующими
характеристиками:
o Число реплик: 2
o Контейнерный образ: nginx
Сеть, управление доступами
Словарь
Pod Network — сеть для работы Pods (поды), которая позволяет им общаться друг с другом.
Kubernetes не назначает IP-адреса подам, этим занимаются сетевые плагины.
Service — абстракция, которая определяет логический набор подов и политику доступа к ним,
позволяя обращаться к подам с использованием постоянного IP-адреса или DNS-имени.
Ingress — объект, который управляет доступом к сервисам в кластере снаружи, предоставляя HTTP
и HTTPS маршруты к сервисам.
CNI (Container Network Interface) — спецификация и библиотеки для написания плагинов,
обеспечивающих настройку сетевых интерфейсов в Linux-контейнерах.
Calico, Weave, Flannel — реализации CNI, предоставляющие различные сетевые плагины для
Kubernetes.
RBAC (role based access control) — система контроля доступа, в которой авторизация основана на
доступах группы. При этом пользователь является неотъемлемой частью группы.
Role — объект в Kubernetes, определяющий набор правил, которые указывают, какие действия
разрешены над ресурсами в определенном Namespace (пространстве имен).
ClusterRole — объект, схожий с Role, но применяющийся на уровне всего кластера, а не
конкретного Namespace. Это позволяет определять разрешения на ресурсы, которые не привязаны
к конкретному Namespace.
RoleBinding — объект, связывающий Role с конкретными пользователями, группами или
сервисными аккаунтами внутри Namespace, предоставляя указанные разрешения этим субъектам.
htps://[Link]/stravnik
htps://[Link]/stravnik
ClusterRoleBinding — объект, схожий с RoleBinding, но применяется на уровне всего кластера.
Связывает ClusterRole с пользователями, группами или сервисными аккаунтами на уровне всего
кластера.
Service Account — аккаунт, используемый приложениями и подами для взаимодействия с
Kubernetes API. Каждый Service Account связан с одним или несколькими Secret объектами,
содержащими учетные данные для аутентификации.
Пространство имен (Namespace) — виртуальное разделение в кластере Kubernetes, позволяющее
группировать ресурсы по логическим блокам для удобства управления и изоляции.
Resource — объекты, с которыми взаимодействуют пользователи и системы в Kubernetes,
например, Pods, Services, Deployments.
Verb — действия, которые могут быть выполнены над ресурсами, такие как get, list, create, edit,
delete.
Материалы
Статьи
1. Kubernetes NodePort vs LoadBalancer vs Ingress? Когда и что использовать?
2. Kubernetes Networking: сервисы, Ingress и Network Policies
3. Пользователи и авторизация RBAC в Kubernetes
4. Понимаем RBAC в Kubernetes
Вопросы для самопроверки
1. Что такое Service в Kubernetes?
2. Что определяет объект Role в Kubernetes RBAC?
3. Какова основная функция Service типа NodePort в Kubernetes?
4. Что такое CNI в контексте Kubernetes?
5. Какова роль Ingress в Kubernetes?
6. Что делает Service типа LoadBalancer в Kubernetes?
Задание для выполнения
1. Создайте сервис типа NodePort для пода в кластере. Для этого:
1. Запустите новый под командой:
kubectl run nginx --image=nginx --labels=app=nginx
2. Создайте для этого пода сервис типа NodePort, который должен открыть порт 30010 на
нодах кластера.
Для проверки запустите команду curl на IP адрес одной из нод кластера.
Напоминаем, что IP адреса нод кластера вы можете узнать командой: kubectl get nodes -o wide.
Адрес для minikube — [Link] .
Поэтому после выполнения команды curl htp://[Link]:30010 вы должны увидеть ответ
nginx.
2. Создайте в кластере новый Service Account с именем sa-secrets-reader, создайте роль с правом
get на ресурс secrets в namespace default и назначьте эту роль на этот Service Account.
htps://[Link]/stravnik
htps://[Link]/stravnik
Helm, CI/CD
Словарь
Helm — менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам
упаковывать, конфигурировать и управлять приложениями Kubernetes.
Чарты (Charts) — пакеты helm, которые содержат всю необходимую информацию для установки
приложения или сервиса на Kubernetes. Чарт может включать предопределенные Kubernetes
ресурсы, такие как Deployments, Services или Ingresses.
Репозитории (Repositories) — место хранения чартов Helm. Репозитории могут быть публичными
или приватными, и они позволяют пользователям делиться чартами с сообществом или в рамках
своей организации.
Релизы (Releases) — экземпляр чарта, запущенный в Kubernetes кластере. Каждый раз, когда чарт
устанавливается в кластер, создается новый релиз. Helm управляет развертыванием и
обновлением релизов.
Tiller (компонент устарел) — в предыдущих версиях Helm (до 3.x), Tiller был серверной частью
helm, работающей внутри кластера Kubernetes для управления релизами helm. С версии Helm 3,
Tiller был удален, улучшив безопасность и упростив архитектуру.
Файл параметров (Values) — параметры, которые можно передать в чарт при его установке или
обновлении, позволяющие пользователю настраивать конфигурацию приложения.
Шаблоны (Templates) — файлы, входящие в состав чарта, использующие язык шаблонов Go,
которые описывают ресурсы Kubernetes, необходимые для запуска приложения. Шаблоны
используют значения для генерации конфигурации Kubernetes.
Материалы
Статьи
1. Практическое руководство по созданию Helm чарта или как избавиться от рутины при
работе с YAML манифестами
2. Основы работы с Helm чартами и темплейтами
3. Helm Best Prac�ces (Part 1)
4. Установка GitLab Agent
Вопросы для самопроверки
1. Что такое релиз в контексте Helm?
2. Какую роль играют шаблоны в Helm?
3. Как Helm 3 улучшил безопасность по сравнению с предыдущими версиями?
4. Что представляют собой чарты в Helm?
5. Для чего используются репозитории в Helm?
6. Какая команда используется для установки чарта в Helm?
Задание для выполнения
В этом задании предлагаем вам:
• Установить helm на локальный компьютер
htps://[Link]/stravnik
htps://[Link]/stravnik
• Установить в кластер готовый чарт Prometheus из
ar�[Link]: htps://ar�[Link]/packages/helm/prometheus-community/prometheus
• Заменить кодовое слово “#замени_меня” в шаблоне деплоймента на валидную helm-
конструкцию. Например “name: #замени_меня” в исправленном виде будет выглядеть так:
“name: {{ .[Link] }}”
Шаблон:
apiVersion: apps/v1
kind: Deployment
metadata:
name: #замени_меня
labels:
app: #замени_меня
spec:
replicas: #замени_меня
selector:
matchLabels:
app: #замени_меня
template:
metadata:
labels:
app: #замени_меня
spec:
containers:
- name: nginx
image: #замени_меня
ports:
- containerPort: #замени_меня
В качестве файла параметров используйте следующие значения:
deployment:
name: billing-service
label: billing
replicas: 1
image:
htps://[Link]/stravnik
htps://[Link]/stravnik
repository: nginx
tag: 1.14.2
port:
containerPort: 80
Мониторинг, хранение данных, логирование
Словарь
Prometheus — система мониторинга и оповещения с открытым исходным кодом,
предназначенная для наблюдения за работой приложений и инфраструктуры в реальном
времени.
Grafana — платформа для визуализации данных, которая используется вместе с Prometheus для
создания интерактивных и настраиваемых дашбордов. Grafana поддерживает интеграцию с
различными источниками данных и позволяет визуализировать метрики в реальном времени.
Persistent Volume (PV) — абстракция для управления постоянным хранилищем в Kubernetes. PV
предоставляет хранилище, которое выходит за пределы жизненного цикла подов и может быть
использовано повторно.
Persistent Volume Claim (PVC) — запрос на использование Persistent Volume в Kubernetes. PVC
позволяет пользователям запрашивать хранилище определенного размера и типа, которое будет
связано с подом.
Loki — система для управления логами, разработанная Grafana Labs. Loki оптимизирован для
работы с Kubernetes и поддерживает поиск и визуализацию логов с низкими требованиями к
ресурсам.
EmptyDir — volume, создаваемый в момент запуска пода и живущий до его удаления. EmptyDir
полезен для временного хранения данных, таких как промежуточные результаты вычислений.
Данные в EmptyDir теряются при удалении пода.
HostPath — volume, который монтируется в под из файловой системы узла (нод). Это позволяет
контейнерам в поде совместно использовать файлы с хостом. Использование HostPath требует
осторожности, так как может повлиять на безопасность и изоляцию контейнеров.
ConfigMap — объект Kubernetes, который позволяет хранить конфигурационные данные в виде
пар ключ-значение. Эти данные могут быть смонтированы в контейнер как том, предоставляя
конфигурационные файлы или переменные окружения.
Secret — объект Kubernetes для хранения конфиденциальной информации, такой как пароли,
токены и ключи. Секреты могут быть смонтированы в контейнеры как тома или использованы в
качестве переменных окружения.
Volume — абстракция хранения данных в Kubernetes, которая предоставляет способ совместного
использования и хранения данных между контейнерами в поде. В отличие от стандартного
хранения контейнера, томы не зависят от жизненного цикла контейнера, что позволяет сохранять
данные, даже если контейнеры перезапускаются.
htps://[Link]/stravnik
htps://[Link]/stravnik
Материалы
Статьи
1. Мониторинг сервисов с Prometheus
2. Основы работы с хранилищами в Kubernetes
3. Собираем логи с Loki
4. Grafana: инструмент для удобной визуализации метрик мониторинга
Вопросы для самопроверки
1. Для чего используется Persistent Volume Claim (PVC)?
2. Что такое Persistent Volume (PV)?
3. Для чего используется Grafana?
4. Как Loki интегрируется с Grafana?
5. Что такое Prometheus?
6. Что такое Loki?
Задание для выполнения
Пришло время самостоятельно на практике отработать полученные знания. В этом блоке вас ждут
5 небольших заданий. Выполните их последовательно.
Задание 1
1. Перед вами манифесты PV и PVC:
Persistent Volume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-volume
spec:
storageClassName: "my-sc"
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/volume1"
Persistent Volume Claim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
storageClassName: "my-sc"
accessModes:
- ReadWriteOnce
resources:
htps://[Link]/stravnik
htps://[Link]/stravnik
requests:
storage: 100Gi
2. Отредактируйте манифест PVC так, чтобы PersistentVolume test-volume стал ему подходить.
Задание 2
1. Добавьте отредактированный в предыдущем задании PVC к поду со следующим манифестом:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- image: nginx
name: web-server
volumeMounts:
- mountPath: /cache
name: ...
volumes:
#добавлять PVC сюда
Задание 3
1. Установите в кластер Prometheus и Grafana из следующих helm репозиториев:
• prometheus
• grafana
Задание 4
1. Подключите Prometheus к Grafana в качестве DataSource.
Задание 5
1. Создайте Grafana дашборд с одной панелью типа TimeSeries для метрики:
go_memstats_alloc_bytes{job="prometheus"}.
2. Чтобы на графике корректно отображались единицы измерения, в качестве Unit
выберите bytes(IEC).
htps://[Link]/stravnik