Многопользовательская поддержка Kubernetes с помощью Argo CD и Loft

Дэниел Олаогун

Kubernetes multi-tenancy — это режим работы Kubernetes, при котором несколько пользователей или рабочих нагрузок используют ресурсы кластера изолированно друг от друга. Пользователи/рабочие нагрузки называются арендаторами и являются независимыми друг от друга и в то же время интегрированными в кластер.

Управление ресурсами между рабочими нагрузками — это один из многих способов использования многопользовательской аренды в организациях. Например, если вы размещаете в кластере несколько связанных или различных приложений, со временем некоторые из них вырастут и начнут конкурировать за ресурсы с другими приложениями, что неизбежно скажется на их общей производительности.

Для обеспечения справедливого использования ресурсов архитектура multi-tenancy позволяет группировать приложения по пространствам имен или виртуальным кластерам (vclusters) и выделять им необходимые ресурсы. Это, в свою очередь, обеспечивает эффективную работу приложений без влияния других арендаторов в кластере. Это лишь один пример того, как важно реализовать многопользовательский подход.

Существует несколько способов реализации многопользовательского обслуживания в кластере, включая пространство имен, vclusters и т.д. Кроме того, существуют инструменты Kubernetes, такие как Loft и Argo CD, которые позволяют легко реализовать и управлять многопользовательскими ресурсами в вашем кластере Kubernetes. В этой статье вы узнаете о многопользовательстве, его преимуществах, а также о том, как Loft и Argo CD могут помочь вам достичь многопользовательства в вашем кластере.

Зачем нужна многопользовательская лицензия?

Помимо распределения ресурсов, существует множество других причин, по которым вам может понадобиться многопользовательская среда в вашем кластере.

Экономическая эффективность

Архитектура с множественной наделенностью лучше для экономии средств по сравнению с использованием нескольких кластеров.
Когда вы развертываете приложения на нескольких кластерах, вы тратите больше вычислительных ресурсов по сравнению с одним кластером с многопользовательской архитектурой, поскольку такие компоненты, как главные узлы, требуют дополнительных ресурсов. Вы также экономите накладные расходы на компоненты управления кластером, поскольку можете повторно использовать ресурсы всего кластера, включая балансировщики нагрузки, контроллеры входа и так далее.

Безопасность приложений

Когда приложение скомпрометировано в кластере с одним арендатором, оно имеет больше шансов скомпрометировать другие приложения, работающие в кластере, поскольку приложения используют общие ресурсы и могут взаимодействовать друг с другом. Поэтому, когда одно приложение скомпрометировано, оно может легко распространиться на другие приложения. Однако в многопользовательском кластере приложения изолированы друг от друга с помощью пространств имен, поэтому вероятность того, что взломанное приложение повлияет на другие приложения, меньше.

Эксплуатационные накладные расходы

Мультитенантность Kubernetes снимает операционные издержки, связанные с управлением несколькими кластерами. Управление несколькими кластерами сопряжено с большими сложностями, включая настройку кластеров (что может занять много времени), аутентификацию, обслуживание кластеров, авторизацию, внедрение средств мониторинга и протоколирования и многое другое. Однако в многопользовательском кластере эти операционные накладные расходы снижаются; например, вам не нужно настраивать новый кластер для нового приложения.

Как Loft и Argo CD могут помочь вам достичь многопользовательского кластера

Loft — это передовая платформа для реализации самообслуживания и многопользовательского доступа в кластере Kubernetes. Она реализует многопользовательскую принадлежность с помощью vclusters. Традиционно для достижения многопользовательского обслуживания используется пространство имен, что позволяет совместно использовать такие ресурсы, как хранилище ETCD и сервер API. В отличие от этого, Loft создает совершенно новый кластер в кластере хоста без каких-либо сложностей, связанных с созданием новых кластеров.

В Loft каждый кластер vcluster имеет свой собственный сервер API, менеджер контроллеров и ETCD. Однако важно отметить, что ресурсы vcluster будут работать на хост-кластере. Поскольку vcluster работает как полноценный кластер, запущенный на хост-кластере, вы не ограничены в создании определенных ролей для vcluster, создании пространства имен в кластере и многом другом.

Loft также дает вам свободу в использовании пользовательских конфигураций на ваших vclusters, что невозможно в namespacing. Например, при многопользовательской системе namespacing вы не можете использовать различные cert-manager для арендаторов в кластере, но каждый vcluster может иметь свой собственный выделенный cert-manager, использующий различные версии. Важно отметить, что vcluster не имеет таких же накладных расходов, как мультикластер, потому что управлять vcluster’ами намного проще, и они дешевле, чем мультикластеры.

Argo CD — инструмент непрерывной доставки GitOps для Kubernetes в рамках проекта Cloud Native Computing Foundation (CNCF) — это инструмент, который дополняет Loft в достижении многопользовательского обслуживания в вашем кластере. Argo CD использует принцип GitOps в непрерывной доставке и развертывании приложений в вашем кластере. Инструмент Argo CD устанавливается на вашем кластере Kubernetes, затем подключается к репозиторию Git, который следит за изменениями в назначенной ветке. Когда он замечает какие-либо изменения в ветке, он извлекает код из ветки и применяет его в вашем кластере Kubernetes.

Использование Argo CD с Git также имеет ряд существенных преимуществ: благодаря использованию концепции Git о запросах на вытягивание, члены команды могут просматривать изменения кода/конфигурации, а также ограничивать круг лиц, которые могут утверждать их в кластере перед применением. Это означает, что только одобренные конфигурации или приложения могут быть извлечены и применены на вашем кластере, а также вы можете легко узнать, чья конфигурация вызвала определенные изменения, и даже косвенно реализовать контроль доступа на вашем кластере.

Изображение любезно предоставлено компанией Argo CD

Реализация многопользовательского доступа к Kubernetes с помощью Loft и Argo CD

Чтобы реализовать многопользовательский доступ с помощью Loft и Argo CD, необходимо сначала установить оба инструмента в кластере Kubernetes. Начать следует с установки Loft; процесс зависит от операционной системы, которую вы используете для доступа к кластеру Kubernetes.

Установка Loft

В ** Mac Terminal ** и ** Linux Bash **:

curl -s -L "https://github.com/loft-sh/loft/releases/latest" | sed -nE 's!.*"([^"]*loft-darwin-amd64)".*!https://github.com1!p' | xargs -n 1 curl -L -o loft && chmod +x loft;
sudo mv loft /usr/local/bin;
Войдите в полноэкранный режим Выйдите из полноэкранного режима

В ** Windows Powershell**:

md -Force "$Env:APPDATAloft"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
Invoke-WebRequest -UseBasicParsing ((Invoke-WebRequest -URI "https://github.com/loft-sh/loft/releases/latest" -UseBasicParsing).Content -replace "(?ms).*`"([^`"]*loft-windows-amd64.exe)`".*","https://github.com/`$1") -o $Env:APPDATAloftloft.exe;
$env:Path += ";" + $Env:APPDATA + "loft";
[Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::User);
Войти в полноэкранный режим Выйти из полноэкранного режима

Важно, чтобы после установки Loft CLI через Powershell вы добавили папку %APPDATA%loft в переменную окружения PATH. Как только вы это сделаете, перезагрузите компьютер.

Затем выполните следующую команду после установки:

loft start
Войти в полноэкранный режим Выйти из полноэкранного режима

Команда запросит вашу электронную почту администратора. После выполнения команды будет сгенерирован случайный пароль, который вы сможете сбросить. Затем в другом терминале войдите в систему, используя приведенную ниже команду:

loft login https://localhost:9898  --insecure 
Войти в полноэкранный режим Выйти из полноэкранного режима

Для производственных целей необходимо настроить выделенный домен для службы Loft. Более подробную информацию об этом можно найти в разделе Процесс настройки Loft.

Создать vcluster очень просто: выполните следующую команду в терминале:

loft create vcluster [vcluster-name]
Войти в полноэкранный режим Выйти из полноэкранного режима

где «vcluster-name» — это имя vcluster.

Вы также можете использовать конфигурацию YAML-файла для создания vcluster, создав YAML-файл, который содержит следующее:

apiVersion: cluster.loft.sh/v1
kind: VirtualCluster
metadata:
  name: vcluster-name  # The name of your vcluster            
  namespace: vc-host-namespace  # The host namespace of the vcluster
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы перечислить все vcluster в кластере:

# Loft
loft list vcluster [vcluster-name]

# Kubectl
loft use space [space-name]   # [space-name] is the host namespace
kubectl get virtualclusters
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы удалить кластер в вашем кластере:

# Loft
loft delete vcluster [vcluster-name]

# Kubectl
kubectl delete vcluster [vcluster-name]
Войдите в полноэкранный режим Выйти из полноэкранного режима

Теперь, когда вы поняли процедуру установки Loft и как создать vcluster с помощью Loft, в следующем разделе описывается процесс установки Argo CD.

Установка Argo CD

Выполните следующую команду для установки Argo CD в кластере:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем установите Argo CD на хост-компьютер, который вы используете для доступа и управления кластером Kubernetes:

brew install argocd
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы можете загрузить Argo CD для Windows, перейдя на репозиторий GitHub и выбрав «argocd-windows-amd64.exe» в разделе v2.3.3.

Как и в случае с Loft, сервер API Argo CD также должен быть доступен; поэтому необходимо настроить выделенный домен в продакшене, используя контроллер ingress по вашему выбору.
Вы также можете изменить тип API-сервера на Load Balancer, выполнив следующую команду:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
Войти в полноэкранный режим Выйти из полноэкранного режима

или через переадресацию портов:

kubectl port-forward svc/argocd-server -n argocd 8080:443
Войти в полноэкранный режим Выйти из полноэкранного режима

Для входа в систему через CLI или пользовательский интерфейс вам потребуется пароль. При установке Argo CD он автоматически генерирует пароль, который вы можете получить, выполнив следующую команду:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
Войти в полноэкранный режим Выйти из полноэкранного режима

Важно, чтобы вы изменили пароль с помощью следующей команды:

argocd account update-password
Enter fullscreen mode Выйти из полноэкранного режима

Теперь вы можете войти в систему через пользовательский интерфейс или через CLI с помощью этой команды:

argocd login <ARGOCD_SERVER>
Enter fullscreen mode Выйти из полноэкранного режима

где «ARGOCD_SERVER» — это выделенный домен или IP балансировщика нагрузки или localhost:8080, который доступен через перенаправление портов.

Наконец, чтобы развернуть приложения на vcluster, созданный на вашем кластере с помощью Loft, зарегистрируйте кластер на Argo CD, чтобы он мог его распознать.

Сначала зарегистрируйте все кластеры в конфигурации kube, в которую также входит кластер:

kubectl config get-contexts -o name
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Затем добавьте кластеры:

argocd cluster add <CONTEXTNAME>
Войти в полноэкранный режим Выход из полноэкранного режима

где «CONTEXTNAME» — это имя кластера vcluster.

Настройка развертывания приложений в вашем кластере из репозитория Git

Создайте файл с именем вашего приложения и следующим содержимым:

#ApplicationName.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: application-name    # The name of the application 
  namespace: argocd   
spec:
  project: default
  source:
    repoURL: https://github.com/example-project/example-app.git     # The git repository containing all the application YAML file
    targetRevision: HEAD
    path: example-directory    # The directory within the repo where you want Argo CD to watch
  destination:
    server: https://kubernetes.default.svc # The API server of your vclusters
    namespace: app_namespace   # The namespace where you want the application to be developed. If this namespace is not available, Argo CD automatically creates this namespace
Вход в полноэкранный режим Выйти из полноэкранного режима

Затем примените этот файл в своем кластере.

Теперь, когда вы настроили Argo CD на отслеживание изменений в example-directory в Git-репозитории через ApplicationName.yaml, создайте файл с именем example-app в example-directory с помощью предпочитаемого вами редактора кода и переместите этот каталог; Argo CD автоматически извлечет код из Git-репозитория и применит его в вашем кластере.

Таким образом, с помощью Argo CD вы можете автоматически создать новое пространство имен и развернуть изменения конфигурации или приложения в кластере, как только они будут одобрены и объединены в основной ветке Git.

Кроме того, для беспрепятственного процесса рассмотрения изменений кода в вашем Git-репозитории вы можете реализовать функцию CODEOWNERS, которая позволяет назначать части вашей кодовой базы ответственным администраторам. Эта функция может быть полезна, если вы являетесь главным администратором кластера репозитория, содержащего несколько каталогов, которые обозначают несколько кластеров vclusters в вашем кластере, и вы хотите автоматически назначить рецензентов для каждого из этих каталогов, чтобы гарантировать, что нужный администратор просматривает изменения кода других пользователей.

С помощью функции CODEOWNERS вы можете назначить различные каталоги соответствующим администраторам. Затем, когда в этих директориях происходят изменения кода и создается запрос на извлечение, соответствующие администраторы получают уведомление о необходимости просмотреть код.

Сочетание Loft и Argo CD создает надежную и динамичную систему, которая автоматизирует многие сложные задачи и одновременно повышает безопасность вашего кластера. Она обеспечивает тщательную проверку файлов приложений перед их применением в кластере Kubernetes. Она также позволяет ограничить количество людей, имеющих прямой доступ к вашему серверу API Kubernetes.

Заключение

В заключение следует отметить, что архитектура Kubernetes с множественной арендой является хорошим вариантом, когда необходимо изолировать приложения друг от друга без накладных расходов и операций по созданию отдельного кластера для каждого приложения. Кластеры vclusters в Loft позволяют реализовать многопользовательский подход в вашем кластере, позволяя вам организовать несколько «виртуальных» кластеров в одном «хост-кластере».

Кроме того, дополнив Loft инструментом непрерывной доставки Kubernetes GitOps Argo CD, вы можете автоматизировать развертывание приложений в vclusters с помощью Git, что способствует созданию надежной и динамичной системы.

Фото Amira El Fohail on Unsplash

Оцените статью
devanswers.ru
Добавить комментарий