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.
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.
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!
Mettra à jour pendant que je travaille à travers le processus.
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:
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>
~/.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:
.kube/config
. server
du fichier .kube/config
.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-----
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
.Cliquez sur "Enregistrer" et c'est fait. Votre projet GitLab doit être connecté à votre cluster Kubernetes maintenant.
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:
.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:
exit 0
pour le changer plus tardkubectl
, 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.
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.
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!).