Razee — это проект с открытым исходным кодом, разработанный IBM для автоматизации и управления развертыванием ресурсов Kubernetes в кластерах, средах и облачных провайдерах, а также для визуализации информации о развертывании ваших ресурсов, чтобы вы могли отслеживать процесс развертывания и находить проблемы с развертыванием. быстрее.
Чтобы начать работу с Razee, перейдите по следующим ссылкам:
Ознакомьтесь с ключевыми функциями Razee и тем, как вы можете использовать их для управления развертыванием ресурсов Kubernetes в ваших кластерах.
Razee состоит из трех модулей: RazeeDash, RazeeDeployables и RazeeDeploy, которые слабо связаны и могут использоваться независимо. С помощью RazeeDash вы можете динамически создавать оперативную инвентаризацию ваших ресурсов Kubernetes и использовать мощные возможности фильтрации и оповещений для визуализации информации о конфигурации и более быстрого устранения проблем в процессе развертывания. Компоненты RazeeDeploy предназначены для упрощения многокластерного развертывания за счет шаблонизации ресурсов Kubernetes, группировки ресурсов и кластеров и определения правил для этих группировок, чтобы вы могли создать гибкую конфигурацию, которая будет применяться ко всем кластерам, средам и облакам.
Компонент | Описание |
---|---|
Хранитель часов | Watch Keeper отвечает за получение информации о конфигурации ресурсов Kubernetes и отправку этих данных в API RazeeDash. Чтобы использовать Watch Keeper, просто установите этот компонент в свой кластер и добавьте метку razee/watch-resource ко всем ресурсам, которые вы хотите отслеживать. После добавления метки Watch Keeper получает информацию о конфигурации с сервера API Kubernetes и немедленно отправляет эти данные в API RazeeDash. Этот процесс повторяется раз в час. Кроме того, Watch Keeper добавляет к вашему ресурсу наблюдатель событий Kubernetes, чтобы Kubernetes уведомлял Watch Keeper об изменении конфигурации вашего ресурса. |
РазиДаш API | RazeeDash API — это сервис, который получает конфигурации и определения ресурсов Kubernetes от Watch Keeper. Данные, отправляемые в API RazeeDash, автоматически сохраняются в MongoDB. |
РазиДэш | RazeeDash визуализирует данные, полученные Watch Keeper, и динамически создает инвентаризацию ваших ресурсов Kubernetes в вашем кластере. Вы можете использовать возможности интеллектуального фильтра и оповещений для анализа этих данных, а также быстрого выявления и устранения проблем в процессе развертывания. |
КластерПодписка | ClusterSubscription — это развертывание Razee, которое отслеживает подписки в Razee, чтобы проверить, существуют ли активные подписки для кластера. Если подписка найдена, соответствующая версия ресурса Kubernetes извлекается из Razee и автоматически применяется в кластере. |
Компонент | Описание |
---|---|
RazeeDeploy Core | RazeeDeploy Core — это инструмент непрерывной доставки, который работает в вашем кластере и который вы можете использовать для настройки CustomResourceDefinitions (CRD), контроллеров Kubernetes и зависимостей для компонентов RazeeDeploy. |
РазиДеплой Дельта | RazeeDeploy Delta — это компонент RazeeDeploy Core, который работает в вашем кластере и поддерживает актуальность определений пользовательских ресурсов и контроллеров Kubernetes компонентов RazeeDeploy. |
RemoteResource и удаленный ресурс S3 | RemoteResource и RemoteResourceS3 — это пользовательские определения ресурсов и контроллеры, которые можно использовать для автоматического развертывания ресурсов Kubernetes, хранящихся в исходном репозитории. Вместо того, чтобы вручную применять эти файлы YAML в каждом кластере, среде или в облаках каждый раз при создании обновления, просто определите исходный репозиторий в своем удаленном ресурсе и создайте удаленный ресурс в своем кластере. Контроллер удаленных ресурсов автоматически подключается к вашему исходному репозиторию, загружает файл конфигурации Kubernetes и применяет его к вашему кластеру. |
УсыШаблон | MustacheTemplate — это настраиваемое определение ресурса и контроллер для определения переменных среды, которые можно использовать для замены частей файла YAML в других файлах YAML Kubernetes. Например, используйте переменные среды вашего шаблона усов, чтобы создать URL-адрес удаленного ресурса, чтобы вы могли указать на версию приложения, которое хотите развернуть. |
FeatureFlagSetLD | FeatureFlagSetLD — это настраиваемое определение ресурса и контроллер для автоматического получения значений флагов функций из Launch Darkly. С помощью флагов функций вы можете контролировать, какой код развертывается в вашем кластере, и управлять несколькими версиями ресурсов Kubernetes в кластерах, средах или облаках. |
Управляемый набор | ManagedSet — это настраиваемое определение ресурса и контроллер для группировки ресурсов Kubernetes, которые вы хотите создать и одновременно применить к кластеру. |
Утилиты Kubernetes | Утилиты Kubernetes — это пакет npm , который можно использовать для упрощения взаимодействия с Kubernetes. |
Чтобы развернуть Razee в вашем кластере, ваш кластер должен соответствовать следующим требованиям:
Сначала установите razeedeploy-delta в свой кластер, выполнив:
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedeploy.yaml
Пример вывода:
namespace/razeedeploy created
serviceaccount/razeedeploy-sa created
clusterrole.rbac.authorization.k8s.io/razeedeploy-admin-cr configured
clusterrolebinding.rbac.authorization.k8s.io/razeedeploy-rb configured
job.batch/razeedeploy-job created
kubectl get deploy -n razeedeploy
NAME READY UP-TO-DATE AVAILABLE AGE
remoteresource-controller 1/1 1 1 56s
Установите компоненты RazeeDash в свой кластер. Чтобы хранить данные, отправляемые в API RazeeDash, вам необходимо настроить экземпляр MongoDB. Вы можете настроить RazeeDash и один экземпляр MongoDB, используя предоставленный файл razeedash-all-in-one.yaml
, или настроить RazeeDash с существующим экземпляром MongoDB, который работает в вашем кластере. Примечание . Если у вас уже есть работающий экземпляр RazeeDash в одном из ваших кластеров и вместо этого вы хотите просто добавить еще один кластер в свой список инвентаря, вы можете пропустить этот шаг и продолжить установку компонента Watchkeeper в свой кластер.
Чтобы установить RazeeDash и один экземпляр MongoDB :
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedash-all-in-one.yaml
Пример вывода:
persistentvolume/mongo-pv-volume created
persistentvolumeclaim/mongo-pv-claim created
deployment.apps/mongo created
service/mongo created
secret/razeedash-secret created
remoteresource.deploy.razee.io/razeedash created
service/razeedash-lb created
service/razeedash-api-lb created
Чтобы использовать существующий экземпляр MongoDB :
Создайте секрет razeedash для mongo_url. Замените в приведенной ниже команде фактическое имя пользователя и пароль, а также 3 экземпляра хоста для mongo-0, mongo-1 и mongo-3, а также правильные порты. Убедитесь, что в конце URL-адреса mongo есть /razeedash?ssl=true
.
Пример :
kubectl -n razee create secret generic razeedash-secret --from-literal " mongo_url=mongodb://username:password@mongo‑0:27017,mongo‑1:27017,mongo‑2:27017/razeedash?ssl=true "
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedash.yaml
Дождитесь завершения развертывания razeedash-api
. Если вы решили создать RazeeDash с использованием предоставленного файла razeedash-all-in-one.yaml
на предыдущем шаге, в вашем кластере создается экземпляр MongoDB и подключается к экземпляру API RazeeDash. Установка MongoDB занимает несколько минут и может привести к периодическим ошибкам MongoNetworkError
при развертывании API RazeeDash. Когда MongoDB полностью настроен, Kubernetes автоматически завершает настройку вашего экземпляра API RazeeDash.
kubectl logs deploy/razeedash-api -n razee
Пример вывода, если MongoDB еще не настроен:
> [email protected] start /usr/src
> node app/index.js
(node:16) UnhandledPromiseRejectionWarning: MongoNetworkError: getaddrinfo
ENOTFOUND mongo
at Socket. < anonymous > (/usr/src/node_modules/mongodb-core/lib/connection/connect.js:287:16)
at Object.onceWrapper (events.js:284:20)
at Socket.emit (events.js:196:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
(node:16) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch (). (rejection id: 1)
(node:16) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Пример вывода, если RazeeDash API полностью настроен:
> [email protected] start /usr/src
> node app/index.js
{ " name " : " apollo/subscription " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Apollo streaming servic e is configured on redisUrl: redis://redis-service:6379/0 " , " time " : " 2020-06-03T21:57:16.021Z " , " v " :0}
{ " name " : " apollo/subscription " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Apollo streaming is ena bled on redis endpoint redis-service:6379 " , " time " : " 2020-06-03T21:57:17.062Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new collection users index users " , " time " : " 2020-06-03T21:57:17.222Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new View clusterStatsView " , " time " : " 2020-06-03T21:57:17.239Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new View resourceStatsView " , " time " : " 2020-06-03T21:57:17.241Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections r eceived modelName=resources for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.284Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections r eceived modelName=orgs for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.295Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections:c lusters - received modelName=clusters for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.297Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Initialize apollo application for default auth " , " time " : " 2020-06-03T21:57:17.298Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " [] Apollo server c ustom plugin are loaded. " , " time " : " 2020-06-03T21:57:17.299Z " , " v " :0}
{ " name " : " razeedash-api " , " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " ? razeedash-api listening on port 3333/api " , " time " : " 2020-06-03T21:57:17.723Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " ? Apollo server listening on http://[::]:3333/graphql " , " time " : " 2020-06-03T21:57:17.734Z " , " v " :0}
Получите внешний IP-адрес ваших служб балансировки нагрузки razeedash-lb
и razeedash-api-lb
, которые автоматически создаются во время настройки API RazeeDash. razeedash-lb
служит общедоступной конечной точкой для вашего экземпляра RazeeDash, а razeedash-api-lb
служит общедоступной конечной точкой для вашего экземпляра RazeeDash API. Используя назначенные общедоступные IP-адреса, вы можете создавать общедоступные URL-адреса, которые вы используете для доступа к компонентам RazeeDash и API RazeeDash. Чтобы завершить настройку RazeeDash, два URL-адреса должны быть сохранены в карте конфигурации RazeeDash. Используйте следующие команды Bash для получения общедоступных IP-адресов, создания общедоступных URL-адресов и сохранения URL-адресов в карте конфигурации RazeeDash. Вы также можете выполнить сценарий Bash bin/kc_create_razeedash_config.sh
. Обратите внимание, что вы должны включить завершающий /
в конце root_url
и razeedash_api_url
в вашу карту конфигурации RazeeDash.
# Amazon EKS uses host names, IBM Cloud Kubernetes Service uses Ingress IP addresses. This handle both.
RAZEEDASH_LB_IP= $( kubectl get service razeedash-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].ip} " )
RAZEEDASH_API_LB_IP= $( kubectl get service razeedash-api-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].ip} " )
RAZEEDASH_LB_HOSTNAME= $( kubectl get service razeedash-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].hostname} " )
RAZEEDASH_API_LB_HOSTNAME= $( kubectl get service razeedash-api-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].hostname} " )
RAZEEDASH_LB= ${RAZEEDASH_LB_HOSTNAME} && [[ " ${RAZEEDASH_LB_IP} " != " " ]] && RAZEEDASH_LB= ${RAZEEDASH_LB_IP}
RAZEEDASH_API_LB= ${RAZEEDASH_API_LB_HOSTNAME} && [[ " ${RAZEEDASH_API_LB_IP} " != " " ]] && RAZEEDASH_API_LB= ${RAZEEDASH_API_LB_IP}
kubectl create configmap razeedash-config -n razee
--from-literal=root_url=http:// " ${RAZEEDASH_LB} " :8080/
--from-literal=razeedash_api_url=http:// " ${RAZEEDASH_API_LB} " :8081/
Убедитесь, что все компоненты Razee развернуты и в столбце ГОТОВО вывода вашего CLI указано 1/1
.
kubectl get deployments -n razee
Пример вывода:
NAME READY UP-TO-DATE AVAILABLE AGE
featureflagsetld-controller 1/1 1 1 53m
managedset-controller 1/1 1 1 53m
mongo 1/1 1 1 34m
mustachetemplate-controller 1/1 1 1 53m
razeedash 1/1 1 1 25m
razeedash-api 1/1 1 1 25m
razeedeploy-delta 1/1 1 1 53m
remoteresource-controller 1/1 1 1 53m
remoteresources3-controller 1/1 1 1 53m
Откройте экран приветствия RazeeDash.
open http:// " ${RAZEEDASH_LB} " :8080
Создайте приложение OAuth
для RazeeDash в GitHub, GitHub Enterprise или Bitbucket.
На экране приветствия RazeeDash выберите плитку инструмента, в котором вы хотите создать приложение OAuth
.
Следуйте инструкциям во всплывающем окне, чтобы создать приложение OAuth
.
Нажмите Сохранить конфигурацию .
На экране приветствия RazeeDash нажмите «Войти с помощью <integration_tool>» .
Следуйте инструкциям во всплывающем окне, чтобы предоставить RazeeDash доступ к выбранному вами инструменту интеграции.
Если вам нужно сбросить какие-либо учетные данные OAuth
, вы можете начать все сначала, открыв оболочку mongo для своего экземпляра и запустив
> use razeedash
> db.meteor_accounts_loginServiceConfiguration.remove({})
Установите Watch Keeper в каждом кластере, который вы хотите отслеживать. Кластер, в котором вы устанавливаете Watch Keeper, может отличаться от кластера, в котором вы установили RazeeDash.
В консоли RazeeDash нажмите «Зарегистрироваться» .
Нажмите «Управление» .
Скопируйте команду Install Razee Agent kubectl
.
Запустите команду в кластере, который вы хотите отслеживать, чтобы создать компоненты Watch Keeper. Если вы устанавливаете Watch Keeper в том же кластере, где вы установили RazeeDash, вы увидите сообщения о том, что некоторые компоненты Watch Keeper уже существуют в вашем кластере. Вы можете игнорировать эти сообщения.
kubectl create -f http:// < razeedash-api-lb_external_IP > :8081/api/install/cluster ? orgKey=orgApiKey- < org_api_key >
Пример вывода для кластера, где установлен RazeeDash:
deployment.apps/remoteresource-controller created
configmap/watch-keeper-config created
secret/watch-keeper-secret created
remoteresource.deploy.razee.io/watch-keeper-rr created
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : namespaces
" razee " already exists
Error from server (AlreadyExists): customresourcedefinitions.
apiextensions.k8s.io " remoteresources.deploy.razee.io " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : namespaces
" razee " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : serviceaccounts
" razeedeploy-sa " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : clusterroles.
rbac.authorization.k8s.io " razeedeploy-admin-cr " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " :
clusterrolebindings.rbac.authorization.k8s.io " razeedeploy-rb " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : configmaps
" razeedeploy-delta-resource-uris " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : deployments.apps
" razeedeploy-delta " already exists
Пример вывода для кластера, где RazeeDash не установлен:
configmap/watch-keeper-config created
secret/watch-keeper-secret created
clusterrole.rbac.authorization.k8s.io/cluster-reader created
serviceaccount/watch-keeper-sa created
clusterrolebinding.rbac.authorization.k8s.io/watch-keeper-rb created
networkpolicy.networking.k8s.io/watch-keeper-deny-ingress created
deployment.apps/watch-keeper created
Error from server (AlreadyExists): namespaces " razee " already exists
Дождитесь завершения развертывания Watch Keeper.
kubectl get deployment -n razee | grep watch-keeper
Пример вывода:
watch-keeper 1/1 1 1 2m5s
В консоли RazeeDash щелкните RazeeDash , чтобы открыть страницу сведений о RazeeDash, и убедитесь, что вы видите информацию о развертывании вашего модуля Watch Keeper.
Установив Watch Keeper в вашем кластере, вы можете получать информацию о развертывании для других ресурсов Kubernetes, которые вы хотите отслеживать. Данные автоматически отправляются в API RazeeDash, и вы можете получать доступ, отслеживать и анализировать эти данные с помощью RazeeDash.
Решите, какую информацию вы хотите, чтобы Watch Keeper получал, выбрав один из следующих уровней детализации информации:
lite
: извлекает раздел metadata
и status
вашей конфигурации ресурсов Kubernetes.detail
: извлекает все данные конфигурации ресурса Kubernetes, но не учитывает переменные среды и раздел data
карт конфигурации и секретов.debug
: извлекает все данные конфигурации ресурса Kubernetes, включая переменные среды и data
. раздел конфигурационных карт и секретов. Эта информация может включать конфиденциальную информацию, поэтому используйте эту опцию с осторожностью. Добавьте метку razee/watch-resource
в раздел меток всех ресурсов Kubernetes, которые вы хотите отслеживать, и укажите уровень детализации информации. Например, если вы хотите отслеживать развертывание Kubernetes, используйте следующую команду. После того, как вы добавите метку к своему ресурсу, Watch Keeper автоматически сканирует ваш ресурс и отправляет данные в API RazeeDash. Затем ваш ресурс сканируется раз в час. Кроме того, Watch Keeper добавляет к вашему ресурсу наблюдатель событий Kubernetes, чтобы Kubernetes уведомлял Watch Keeper об изменении конфигурации вашего ресурса.
kubectl edit deployment < deployment_name >
Пример файла YAML:
apiVersion : extensions/v1beta1
kind : Deployment
metadata :
annotations :
deployment.kubernetes.io/revision : " 1 "
kubectl.kubernetes.io/last-applied-configuration : |
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"myapp"},"name":"expandpvc","namespace":"default"},"spec":{"selector":{"matchLabels":{"app":"myapp"}},"template":{"metadata":{"labels":{"app":"myapp"}},"spec":{"con