Razee est un projet open source développé par IBM pour automatiser et gérer le déploiement des ressources Kubernetes sur des clusters, des environnements et des fournisseurs de cloud, et pour visualiser les informations de déploiement de vos ressources afin que vous puissiez surveiller le processus de déploiement et trouver les problèmes de déploiement. plus rapidement.
Consultez les liens suivants pour démarrer avec Razee :
Passez en revue les fonctionnalités clés de Razee et comment vous pouvez les exploiter pour gérer le déploiement des ressources Kubernetes pour vos clusters.
Razee se compose de trois modules, RazeeDash, RazeeDeployables et RazeeDeploy, qui sont faiblement couplés et peuvent être utilisés indépendamment. Avec RazeeDash, vous pouvez créer dynamiquement un inventaire en direct de vos ressources Kubernetes et utiliser les puissantes capacités de filtrage et d'alerte pour visualiser les informations de configuration et résoudre plus rapidement les problèmes de votre processus de déploiement. Les composants RazeeDeploy sont conçus pour simplifier les déploiements multiclusters en modélisant les ressources Kubernetes, en regroupant les ressources et les clusters et en définissant des règles pour ces groupements afin que vous puissiez créer une configuration flexible appliquée à travers les clusters, les environnements et les cloud.
Composant | Description |
---|---|
Gardien de la montre | Watch Keeper est chargé de récupérer les informations de configuration des ressources Kubernetes et d'envoyer ces données à l'API RazeeDash. Pour utiliser Watch Keeper, installez simplement ce composant dans votre cluster et ajoutez l'étiquette razee/watch-resource à toutes les ressources que vous souhaitez surveiller. Après avoir ajouté l'étiquette, Watch Keeper récupère les informations de configuration du serveur API Kubernetes et envoie immédiatement ces données à l'API RazeeDash. Ce processus se répète une fois toutes les heures. De plus, Watch Keeper ajoute un observateur d'événements Kubernetes à votre ressource afin que Watch Keeper soit averti par Kubernetes lorsque la configuration de votre ressource change. |
API RazeeDash | L'API RazeeDash est un service qui reçoit les configurations de ressources Kubernetes et les définitions de ressources de Watch Keeper. Les données envoyées à l'API RazeeDash sont automatiquement stockées dans MongoDB. |
RazeeDash | RazeeDash visualise les données récupérées par Watch Keeper et crée dynamiquement un inventaire de vos ressources Kubernetes dans votre cluster. Vous pouvez utiliser les capacités de filtrage et d'alerte intelligentes pour analyser ces données et identifier et résoudre rapidement les problèmes dans votre processus de déploiement. |
Abonnement au cluster | ClusterSubscription est un déploiement Razee qui surveille les abonnements dans Razee pour vérifier si des abonnements actifs pour un cluster existent. Si un abonnement est trouvé, la version associée de la ressource Kubernetes est extraite de Razee et automatiquement appliquée dans le cluster. |
Composant | Description |
---|---|
Noyau RazeeDeploy | RazeeDeploy Core est un outil de livraison continue qui s'exécute dans votre cluster et que vous pouvez utiliser pour configurer les CustomResourceDefinitions (CRD), les contrôleurs Kubernetes et les dépendances des composants RazeeDeploy. |
RazeeDeploy Delta | RazeeDeploy Delta est un composant de RazeeDeploy Core qui s'exécute dans votre cluster et maintient à jour les définitions de ressources personnalisées et les contrôleurs Kubernetes des composants RazeeDeploy. |
RemoteResource et ressource distante S3 | RemoteResource et RemoteResourceS3 sont des définitions de ressources personnalisées et des contrôleurs que vous pouvez utiliser pour déployer automatiquement les ressources Kubernetes stockées dans un référentiel source. Plutôt que d'appliquer manuellement ces fichiers YAML dans chaque cluster, environnement ou dans les cloud à chaque fois qu'une mise à jour est effectuée, définissez simplement le référentiel source dans votre ressource distante et créez la ressource distante dans votre cluster. Le contrôleur de ressources distant se connecte automatiquement à votre référentiel source, télécharge le fichier de configuration Kubernetes et applique le fichier à votre cluster. |
Modèle de moustache | MoustacheTemplate est une définition de ressource personnalisée et un contrôleur permettant de définir des variables d'environnement que vous pouvez utiliser pour remplacer des éléments de fichier YAML dans d'autres fichiers YAML Kubernetes. Par exemple, utilisez les variables d'environnement de votre modèle moustache pour créer l'URL de votre ressource distante afin de pouvoir pointer vers la version de l'application que vous souhaitez déployer. |
FeatureFlagSetLD | FeatureFlagSetLD est une définition de ressource personnalisée et un contrôleur permettant de récupérer automatiquement les valeurs des indicateurs de fonctionnalité à partir de Launch Darkly. Grâce aux indicateurs de fonctionnalités, vous pouvez contrôler le code déployé sur votre cluster et gérer plusieurs versions de ressources Kubernetes sur des clusters, des environnements ou des cloud. |
Ensemble géré | ManagedSet est une définition de ressource personnalisée et un contrôleur permettant de regrouper les ressources Kubernetes que vous souhaitez créer et appliquer au cluster en même temps. |
Utilitaires Kubernetes | Les utilitaires Kubernetes sont un package npm que vous pouvez utiliser pour simplifier la communication avec Kubernetes. |
Pour déployer Razee dans votre cluster, votre cluster doit répondre aux exigences suivantes :
Installez d'abord razeedeploy-delta sur votre client en exécutant :
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedeploy.yaml
Exemple de sortie :
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
Installez les composants RazeeDash dans votre cluster. Pour stocker les données envoyées à l'API RazeeDash, vous devez configurer une instance MongoDB. Vous pouvez choisir de configurer RazeeDash et une seule instance MongoDB à l'aide du fichier razeedash-all-in-one.yaml
fourni ou de configurer RazeeDash avec une instance MongoDB existante qui s'exécute dans votre cluster. Remarque : Si vous disposez déjà d'une instance en cours d'exécution de RazeeDash dans l'un de vos clusters et que vous souhaitez simplement ajouter un autre cluster à votre liste d'inventaire, vous pouvez ignorer cette étape et continuer l'installation du composant Watchkeeper dans votre cluster.
Pour installer RazeeDash et une seule instance MongoDB :
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedash-all-in-one.yaml
Exemple de sortie :
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
Pour utiliser une instance MongoDB existante :
Créez le secret razeedash pour le mongo_url. Remplacez la commande ci-dessous par le nom d'utilisateur et le mot de passe réels ainsi que 3 instances d'hôte pour mongo-0, mongo-1 et mongo-3 ainsi que les ports corrects. Assurez-vous que la fin de l'URL mongo contient /razeedash?ssl=true
.
Exemple :
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
Attendez la fin du déploiement razeedash-api
. Si vous avez choisi de créer RazeeDash à l'aide du fichier razeedash-all-in-one.yaml
fourni à l'étape précédente, une instance de MongoDB est créée dans votre cluster et connectée à l'instance d'API RazeeDash. La configuration de MongoDB prend quelques minutes et peut entraîner des erreurs MongoNetworkError
intermittentes dans votre déploiement d'API RazeeDash. Lorsque MongoDB est entièrement configuré, Kubernetes termine automatiquement la configuration de votre instance d'API RazeeDash.
kubectl logs deploy/razeedash-api -n razee
Exemple de résultat si MongoDB n'est pas encore configuré :
> [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.
Exemple de résultat si l'API RazeeDash est entièrement configurée :
> [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}
Récupérez l'adresse IP externe de vos services d'équilibrage de charge razeedash-lb
et razeedash-api-lb
qui sont automatiquement créés lors de la configuration de l'API RazeeDash. razeedash-lb
sert de point de terminaison public pour votre instance RazeeDash, et razeedash-api-lb
sert de point de terminaison public pour votre instance d'API RazeeDash. En utilisant les adresses IP publiques qui ont été attribuées, vous pouvez créer les URL publiques que vous utilisez pour accéder aux composants RazeeDash et l'API RazeeDash. Pour terminer la configuration de RazeeDash, les deux URL doivent être stockées dans la carte de configuration RazeeDash. Utilisez les commandes Bash suivantes pour récupérer les adresses IP publiques, créer les URL publiques et stocker les URL dans la carte de configuration RazeeDash. Vous pouvez également exécuter le script Bash bin/kc_create_razeedash_config.sh
. Notez que vous devez inclure le /
à la fin de root_url
et razeedash_api_url
dans votre carte de configuration 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/
Vérifiez que tous les composants Razee sont déployés et affichent 1/1
dans la colonne PRÊT de votre sortie CLI.
kubectl get deployments -n razee
Exemple de sortie :
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
Ouvrez l'écran de bienvenue de RazeeDash.
open http:// " ${RAZEEDASH_LB} " :8080
Créez une application OAuth
pour RazeeDash dans GitHub, GitHub Enterprise ou Bitbucket.
Depuis l'écran d'accueil de RazeeDash, sélectionnez la vignette de l'outil dans lequel vous souhaitez créer l'application OAuth
.
Suivez les instructions dans la fenêtre contextuelle pour créer l'application OAuth
.
Cliquez sur Enregistrer la configuration .
Depuis l'écran de bienvenue de RazeeDash, cliquez sur Connectez-vous avec <integration_tool> .
Suivez les instructions dans la fenêtre contextuelle pour accorder à RazeeDash l'accès à l'outil d'intégration que vous avez choisi.
Si vous devez réinitialiser l'une des informations d'identification OAuth
, vous pouvez recommencer en ouvrant un shell mongo sur votre instance et en exécutant
> use razeedash
> db.meteor_accounts_loginServiceConfiguration.remove({})
Installez Watch Keeper dans chaque cluster que vous souhaitez surveiller. Le cluster sur lequel vous installez Watch Keeper peut être un cluster différent de celui sur lequel vous avez installé RazeeDash.
Depuis la console RazeeDash, cliquez sur S'inscrire .
Cliquez sur Gérer .
Copiez la commande Install Razee Agent kubectl
.
Exécutez la commande dans le cluster que vous souhaitez surveiller pour créer les composants Watch Keeper. Si vous installez Watch Keeper dans le même cluster où vous avez installé RazeeDash, vous voyez des messages indiquant que certains des composants Watch Keeper existent déjà dans votre cluster. Vous pouvez ignorer ces messages.
kubectl create -f http:// < razeedash-api-lb_external_IP > :8081/api/install/cluster ? orgKey=orgApiKey- < org_api_key >
Exemple de sortie pour un cluster sur lequel RazeeDash est installé :
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
Exemple de sortie pour un cluster sur lequel RazeeDash n'est pas installé :
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
Attendez la fin du déploiement de Watch Keeper.
kubectl get deployment -n razee | grep watch-keeper
Exemple de sortie :
watch-keeper 1/1 1 1 2m5s
Depuis la console RazeeDash, cliquez sur RazeeDash pour ouvrir la page de détails de RazeeDash et vérifiez que vous pouvez voir les informations de déploiement de votre pod Watch Keeper.
Une fois Watch Keeper configuré dans votre cluster, vous pouvez récupérer les informations de déploiement pour les autres ressources Kubernetes que vous souhaitez surveiller. Les données sont automatiquement envoyées à l'API RazeeDash et vous pouvez accéder, surveiller et analyser ces données avec RazeeDash.
Décidez quelles informations vous souhaitez que Watch Keeper récupère en choisissant parmi les niveaux de détail des informations suivants :
lite
: récupère la section metadata
et status
de la configuration de vos ressources Kubernetes.detail
: récupère toutes les données de configuration d'une ressource Kubernetes, mais laisse de côté les variables d'environnement et la section data
des cartes de configuration et des secrets.debug
: récupère toutes les données de configuration d'une ressource Kubernetes, y compris les variables d'environnement et les data
. section des cartes de configuration et des secrets. Ces informations peuvent inclure des informations sensibles, utilisez donc cette option avec prudence. Ajoutez l'étiquette razee/watch-resource
à la section des étiquettes de toutes les ressources Kubernetes que vous souhaitez surveiller et spécifiez le niveau de détail des informations. Par exemple, si vous souhaitez surveiller un déploiement Kubernetes, utilisez la commande suivante. Après avoir ajouté l'étiquette à votre ressource, Watch Keeper analyse automatiquement votre ressource et envoie les données à l'API RazeeDash. Ensuite, votre ressource est analysée une fois toutes les heures. De plus, Watch Keeper ajoute un observateur d'événements Kubernetes à votre ressource afin que Watch Keeper soit averti par Kubernetes lorsque la configuration de votre ressource change.
kubectl edit deployment < deployment_name >
Exemple de fichier 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