web-dev-qa-db-fra.com

Comment intégrer GitLab-Ci avec Azure Kubernetes + Kubectl + ACR pour les déploiements?

Notre précédent CI/CD basé sur GitLab utilisait une requête d'authentification authentifiée adressée à un point de terminaison API spécifique REST pour déclencher le redéploiement d'un conteneur mis à jour vers notre service, si vous utilisiez quelque chose de similaire pour votre déploiement basé sur Kubernetes, cette question vous était destinée.

Plus de fond

Nous exploitons un site/application de production (blog Ghost) sur un cluster Azure AKS. À l'heure actuelle, nous poussons manuellement nos conteneurs mis à jour vers un ACR privé (Azure Container Registry), puis nous mettons à jour à partir de la ligne de commande avec Kubectl.

Cela dit, nous avons précédemment utilisé Docker Cloud pour notre orchestration et le déploiement complet de nos services de production/de transfert à l'aide de GitLab-Ci.

L’intégration de GitLab-Ci est l’objectif et le pourquoi de cette question.

Ma question

Depuis que nous utilisions auparavant Docker Cloud (doh, nous aurions dû utiliser les K8 depuis le début), comment devrions-nous gérer le fait que GitLab-Ci était en mesure d'utiliser les secrets créés par Secrets, puis de s'authentifier auprès de l'API Docker Cloud pour déclencher des actions sur nos nœuds (c'est-à-dire redéployer avec de nouveaux conteneurs, etc.).

Bien que je pense que nous pouvons construire un conteneur (destiné à être utilisé par notre coureur GitLab-Ci) contenant Kubectl et la CLI Azure, je sais que Kubernetes possède également une API Reste similaire (au nuage de docker) que vous pouvez trouver ici ( https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster ) - spécifiquement la section qui parle de la connexion SANS Kubectl semble être pertinente (tout comme l'article sur HTTP REST API).

Ma question à toute personne se connectant à un service Azure (ou potentiellement à un autre service Kubernetes géré):

Comment votre serveur Ci/CD s'authentifie-t-il auprès du serveur d'administration de votre fournisseur de services Kubernetes, puis comment déclenchez-vous actuellement une mise à jour/redéploiement d'un conteneur/service mis à jour?

Si vous avez utilisé l'API HTTP Rest de Kubernetes pour redéployer un service, vos pensées sont particulièrement utiles!

Ressources Kubernetes que je révise

  1. Comment dois-je gérer les déploiements avec kubernetes
  2. Déploiements Kubernetes

Mettra à jour pendant que je travaille à travers le processus.

10
Necevil

Créer l'intégration

J'avais le même problème d'intégration de GitLab CI/CD à mon cluster Azure AKS Kubernetes. J'ai créé cette question parce que je rencontrais une erreur lorsque j'ai essayé d'ajouter mes informations Kubernetes cluester dans GitLab.

Comment les intégrer:

  1. Dans GitLab, allez dans le menu "Opérations"> "Kubernetes".
  2. Cliquez sur le bouton "Ajouter un cluster Kubernetes" en haut de la page.
  3. Vous devrez remplir des champs de formulaire, pour obtenir le contenu que vous devez y mettre, connectez-vous à votre compte Azure à partir de la CLI (vous devez installer Azure CLI sur votre PC) à l'aide de la commande az login, puis exécutez cette autre commande. obtenir les informations d'identification du cluster Kubernetes: az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
  4. La commande précédente va créer un fichier ~/.kube/config, ouvrir ce fichier, le contenu des champs que vous devez renseigner dans le formulaire "Ajouter un cluster Kubernetes" de GitLab se trouvent tous dans ce fichier .kube/config.

Ce sont les champs:

  1. Kubernetes nom du cluster: C'est le nom de votre cluster sur Azure, il se trouve également dans le fichier .kube/config
  2. API URL: C'est l'URL du champ server du fichier .kube/config.
  3. CA Certificate: C'est le champ certificate-authority-data du fichier .kube/config, mais vous devrez le décoder en base64.

Une fois que vous l'avez décodé, cela doit ressembler à ceci:

-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
  1. Token: C'est la chaîne de caractères hexadécimaux dans le champ token du fichier .kube/config (il faudra peut-être aussi le décoder en base 64?). Vous devez utiliser un jeton appartenant à un compte avec les privilèges cluster-admin. GitLab peut donc l'utiliser pour authentifier et installer des éléments sur le cluster. Le moyen le plus simple d'y parvenir est de créer un nouveau compte pour GitLab: créez un fichier YAML avec la définition du compte de service (un exemple peut être vu ici sous Créez un compte de service gitlab dans l'espace de nom par défaut) et appliquez-le à votre cluster à l'aide de kubectl apply -f serviceaccount.yml.
  2. Espace de noms de projet (facultatif, unique): Je le laisse vide, je ne sais pas encore pour quoi ni où cet espace de noms peut être utilisé.

Cliquez sur "Enregistrer" et c'est fait. Votre projet GitLab doit être connecté à votre cluster Kubernetes maintenant.

Déployer

Dans votre travail de déploiement (dans le pipeline), vous aurez besoin de certaines variables d'environnement pour accéder à votre cluster à l'aide de la commande kubectl. Voici une liste de toutes les variables disponibles:

https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables } _

Pour que ces variables soient injectées dans votre travail de déploiement, certaines conditions sont nécessaires:

  • Vous devez avoir ajouté correctement le cluster Kubernetes à votre projet GitLab, menu "Opérations"> "Kubernetes" et aux étapes décrites ci-dessus.
  • Votre travail doit être un "travail de déploiement". Dans GitLab CI, pour être considéré comme un travail de déploiement, votre définition de travail (dans votre .gitlab-ci.yml) doit avoir une clé environment (regardez la ligne 31 dans cet exemple ), et le nom de l'environnement doit correspondre au nom que vous avez utilisé dans le menu "Opérations"> "Environnements".

Voici un exemple de .gitlab-ci.yml avec trois étapes:

  • Build: il construit une image de menu fixe et le pousse dans le registre privé gitlab
  • Test: il ne fait rien encore, il suffit de mettre un exit 0 pour le changer plus tard
  • Deploy: téléchargez une version stable de kubectl, copiez le fichier .kube/config pour pouvoir exécuter les commandes kubectl dans le cluster et exécute un kubectl cluster-info pour vous assurer qu'il fonctionne. Dans mon projet, je n'ai pas fini d'écrire mon script de déploiement pour vraiment exécuter un déploiement. Mais cette commande kubectl cluster-info s'exécute correctement.

Astuce: pour examiner toutes les variables d'environnement et leurs valeurs (Jenkins a une page avec cette vue, mais pas GitLab CI), vous pouvez exécuter la commande env dans le script de votre étape de déploiement. Déboguer un travail aide beaucoup.

22
lmcarreiro

Je me suis connecté à notre backend GitLab-Ci aujourd'hui et j'ai vu un bouton 'Kubernetes' - avec une offre d'économiser 500 $ chez GCP. 

 $500 at GCP with GitLab-Ci Kubernetes

GitLab Kubernetes

L'URL à consulter sur la page Kubernetes GitLab de votre référentiel est la suivante: https://gitlab.com/^your-repo^/clusters

Pendant que je travaille sur le processus d’intégration, je vais mettre à jour cette réponse (mais aussi la bienvenue!).

Documents officiels sur l'intégration de GitLab Kubernetes

https://docs.gitlab.com/ee/user/project/clusters/index.html

0
Necevil