Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В этой статье мы рассмотрим самые важные обновления платформы Deckhouse версий 1.45 — 1.47 — всё то, что появилось за последние три месяца.
Deckhouse 1.45: поддержка K8s 1.26 и модуль loki
Версия Deckhouse 1.45 на канале обновлений Stable появилась 17 мая этого года. Из ключевых изменений можно выделить прекращение поддержки Kubernetes 1.21 и добавление поддержки Kubernetes 1.26, появление нового модуля хранилища логов и включение поддержки ALT Linux. Рассмотрим их подробнее.
В платформе появился новый модуль loki. Он позволяет развернуть хранилище логов на базе Grafana Loki и настроить Deckhouse на работу с ним.
Прекращена поддержка Kubernetes 1.21 и добавлена поддержка Kubernetes 1.26.
В Enterprise Edition добавлена поддержка ALT Linux (p 10, 10.1).
Улучшен механизм обновления Nginx Ingress-контроллера с помощью использования AdvancedDaemonSet из состава OpenKruise. OpenKruise — это расширенный набор компонентов Kubernetes, который специализируется на автоматизации обновления, развертывания и других операций в кластере. Использование его компонентов позволяет получить больший контроль над обновлением подов, чем при использовании DaemonSet.
Добавлен NGINX Ingress Controller версии 1.6, а nginx в нем обновлен до версии 1.21.6. Кроме того, изменились наименования метрик Prometheus, а для повышения безопасности исключены директивы nginx
root
иalias
. Подробности — в нашем GitHub и в чейнджлоге контроллера.Для повышения безопасности в компонентах Deckhouse при указании образа контейнера используется контрольная сумма, а не тег образа. Это позволяет избежать случаев подмены образа с похожим тегом и гарантирует использование только доверенных образов.
Добавлена возможность включения или отключения модуля через Deckhouse Controller. Пример: kubectl -ti -n d8-system exec deploy/deckhouse -- deckhouse-controller module disable deckhouse-web
. Ранее для этого приходилось вручную создавать или редактировать Custom Resource с описанием нужного модуля.
Другие важные изменения
Появился удобный интерфейс для работы с модулем descheduler — custom resource Descheduler. Теперь можно гибко настраивать стратегии для разных компонентов, запускать несколько экземпляров descheduler на разных группах узлов. Текущая конфигурация будет сконвертирована автоматически. Этот модуль каждые 15 минут вытесняет поды, которые удовлетворяют включенным в CR Descheduler стратегиям, что приводит к принудительному запуску процесса планирования в отношении вытесненных подов.
В модуле log-shipper появилась возможность использовать буфер, rate limit, а также произвольный regex-шаблон для парсинга многострочных логов (параметр
spec.multilineParser.custom
в ClusterLoggingConfig и PodLoggingConfig). Этот модуль запускает агенты log-shipper на узлах кластера. Они предназначены для отправки с минимальными задержками логов дальше из кластера. Каждый агент — отдельный vector, конфигурацию для которого сгенерировал Deckhouse.
С помощью rate limit можно настраивать ограничения потока событий, передаваемых в хранилище. Это позволяет защитить хранилище логов от перегрузки в случае непредвиденного увеличения количества отправляемых логов — так, у одного из наших пользователей в облачное хранилище по ошибке лилось очень много логов, и он получил пугающий счет от провайдера.rateLimit: linesPerMinute: 500
В модуль Grafana добавлен новый дашборд для Cilium, на котором отображаются основные параметры этого сетевого инструмента: использование памяти, ошибки, количество дескрипторов открытых файлов и так далее.
Полный список изменений версии 1.45.
Deckhouse 1.46: просмотр алертов без веб-интерфейса Prometheus
Версия платформы 1.46 вышла на канале Stable 21 июня. Среди основных изменений можно выделить возможность просмотра алертов прямо в кластере, без веб-интерфейса Grafana и появление на сайте раздела «Подготовка к production», в котором описано, как подготовить кластера для реальной работы.
Если у вас есть доступ только к API-серверу кластера, а к веб-интерфейсу Grafana или Prometheus доступа нет, новая фича будет очень полезна. В этом случае просмотреть список алертов можно следующей командой:
# kubectl get clusteralerts
NAME ALERT SEVERITY AGE LAST RECEIVED STATUS
086551aeee5b5b24 ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing
226d35c886464d6e ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing
235d4efba7df6af4 D8SnapshotControllerPodIsNotReady 8 5d4h 44s firing
27464763f0aa857c D8PrometheusOperatorPodIsNotReady 7 5d4h 43s firing
ab17837fffa5e440 DeadMansSwitch 4 5d4h 41s firing
Также можно подробно изучить каждый алерт:
kubectl get clusteralerts <ALERT_NAME> -o yaml
Эта команда выведет содержимое алерта:
alert:
description: |
The recommended course of action:
1. Retrieve details of the Deployment: `kubectl -n d8-snapshot-controller describe deploy snapshot-controller`
2. View the status of the Pod and try to figure out why it is not running: `kubectl -n d8-snapshot-controller describe pod -l app=snapshot-controller`
labels:
pod: snapshot-controller-75bd776d76-xhb2c
prometheus: deckhouse
tier: cluster
name: D8SnapshotControllerPodIsNotReady
severityLevel: "8"
summary: The snapshot-controller Pod is NOT Ready.
apiVersion: deckhouse.io/v1alpha1
kind: ClusterAlert
metadata:
creationTimestamp: "2023-05-15T14:24:08Z"
generation: 1
labels:
app: prometheus
heritage: deckhouse
name: 235d4efba7df6af4
resourceVersion: "36262598"
uid: 817f83e4-d01a-4572-8659-0c0a7b6ca9e7
status:
alertStatus: firing
lastUpdateTime: "2023-05-15T18:10:09Z"
startsAt: "2023-05-10T13:43:09Z"
Другие важные изменения
Раньше в Deckhouse были только ClusterAuthorizationRule, которые позволяли управлять RBAC на уровне всего кластера. Теперь у пользователей появилась возможность управлять правами на уровне namespace c помощью нового custom resource AuthorizationRule.
Домен для документации изменен с
deckhouse
наdocumentation
. Модуль deckhouse-web также переименован в documentation. Он позволяет получить доступ к самой свежей документации Deckhouse прямо из кластера — по пути, указанному в шаблоне publicDomainTemplate (например,documentation.company.my
).В Security Grafana добавлен дашборд со сводным отчетом о соответствии кластера практикам CIS Kubernetes Benchmark и с возможностью получить детальную информацию о проблемах безопасности. CIS Kubernetes Benchmark — это стандарт от Center for Internet Security. В него входят четкие инструкции о том, как сделать кластер безопасным (вплоть до указания конкретных флагов у API-сервера), и описания правильной настройки control plane, конфигурации, worker-узлов, политик и так далее.
Вот так выглядит дашборд полностью успешной проверки:
Посмотреть все узлы, не прошедшие проверку на соответствие стандарту, можно командой:
kubectl get clustercompliancereports.aquasecurity.github.io cis -ojson | jq '.status.detailReport.results | map(select(.checks | map(.success) | all | not))'
Также можно рассмотреть узлы, не прошедшие конкретную CIS compliance-проверку.
За счет статической сборки компонентов Kubernetes, используемых в Deckhouse, потенциально уменьшена вероятностью возникновения проблем при работе в различных дистрибутивах.
Полный список изменений версии 1.46.
Deckhouse 1.47: Istio доступен для сообщества
Дата выхода стабильного релиза 1.47 — 11 июля. В нем прекращена поддержка Debian 9 и Ubuntu 18.04.
Другие важные изменения
Модуль Istio стал доступен в CE-редакции. В нем реализованы:
механизм управления версией control-plane, включая плавное обновление с одновременным запуском нескольких версий;
инструмент для обеспечения observability Kiali, дашборды для Grafana и расширенный мониторинг потенциальных опасностей;
средства публикации приложений для внешних пользователей: упрощённый нативный ingressgateway и возможность добавить сайдкар к существующему ingress-nginx с сохранением всех преимуществ этого контроллера.
Добавлен новый ресурс Module. Он доступен только для чтения и позволяет посмотреть полный список доступных модулей в кластере и их статус.
Отобразить можно список всех модулей:$ kubectl get modules --sort-by='{.properties.weight}' NAME WEIGHT STATE SOURCE common 0 Disabled Embedded priority-class 1 Enabled Embedded deckhouse 2 Enabled Embedded deckhouse-config 3 Enabled Embedded external-module-manager 5 Enabled Embedded ... operator-trivy 500 Disabled Embedded upmeter 500 Disabled Embedded delivery 502 Disabled Embedded namespace-configurator 600 Enabled Embedded secret-copier 600 Enabled Embedded flant-integration 600 Disabled Embedded runtime-audit-engine 650 Disabled Embedded documentation 810 Enabled Embedded deckhouse-ui 900 Enabled External: deckhouse
И список конкретных модулей:
# kubectl get modules -l module.deckhouse.io/cni NAME WEIGHT STATE SOURCE cni-cilium 21 Enabled Embedded cni-flannel 35 Disabled Embedded cni-simple-bridge 35 Disabled Embedded
Также можно посмотреть детальную информацию о каждом из модулей:
# kubectl get module cloud-provider-aws -o yaml apiVersion: deckhouse.io/v1alpha1 kind: Module metadata: creationTimestamp: "2023-05-02T17:12:22Z" generation: 2 labels: module.deckhouse.io/cloud-provider: "" name: cloud-provider-aws resourceVersion: "105360675" uid: 65c70396-c9cc-437c-a78b-b08a653383d1 properties: weight: 30 state: Disabled source: Embedded
Добавлена возможность изменять адрес container registry в кластере с помощью
deckhouse-controller
. Сделать это можно с помощью следующей команды:kubectl exec -ti -n d8-system deploy/deckhouse -- deckhouse-controller helper change-registry \ --user my-user --password my-password registry.example.com/deckhouse
В Linstor добавлена поддержка работы на узлах с включенным SELinux. Ранее при включенном SELinux в модуле linstor возникали проблемы с отсутствием необходимых прав.
В целях стандартизации и повышения безопасности, ряд компонентов (kube-dns, kube-proxy, ingress-nginx и других) переведен на сборку с использованием Distroless-образов. Distroless образы — это образы, в которые включены только нужные для выполнения конкретной задачи файлы. А файлы дистрибутива, которые не используются, из контейнера убираются. Это позволяет уменьшить размер образа и снизить количество потенциальных векторов атаки. Вместо нескольких сотен или даже тысяч ненужных для работы файлов остаются только те, которые используются приложением.
containerd на узлах настроен на работу с параметром discard_unpacked_layers. Благодаря этому, место для хранения образов можно сократить до 35%. Параметр discard_unpacked_layers позволяет GC удалять слои из хранилища после успешной распаковки этих слоев.
Полный список изменений версии 1.47.
P.S.
Для знакомства с платформой Deckhouse рекомендуем изучить раздел «Быстрый старт» (доступен на русском и английском языках).
Полезные ссылки на ресурсы проекта:
основной GitHub-репозиторий;
официальный Twitter-аккаунт (на английском);
русскоязычный Telegram-чат.
Читайте также в нашем блоге:
«Как устроена разработка Kubernetes-платформы Deckhouse (обзор и видео доклада)»;
«Kubernetes-платформа Deckhouse сертифицирована для работы с «Ред ОС», Astra Linux и AlterOS»;
«Стандарты безопасности в Kubernetes (обзор и видео доклада)».