Ceci est notre environnement:
Mes questions:
Il existe également un outil tiers comme Keel mais il ne prend pas en charge Amazon ECR (problème Webhook avec ECR).
Toute aide serait appréciée.
J'ai un flux de travail similaire et j'espère que cela vous aide à obtenir des indications. J'utilise bitbucket pipeline pour CI, mais je suis sûr que Jenkins fonctionnera également correctement.
Voici ce que je fais dans mon flux de CI:
my-cntnr:12
my-cntnr:12
)Voici le script pour référence:
- composer install --no-interaction
- docker build -t cms .
- docker tag myrepo:latest 123456789.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER
- aws ecr get-login --no-include-email --region my-region >> login.sh
- sh login.sh
- docker Push 123456799.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER
- sh .docker/workload-update.sh // my curl script calling rancher API
remarque: depuis que j'utilise Rancher, je peux utiliser l'API Rancher pour mettre à jour les pods et leur configuration.
Maintenant, pour la partie des informations d'identification ECR pour Kubernetes, vous devez créer un secret (une entité réservée à Kubernetes). Ce secret est créé à l'aide de vos détails AWS ECR. Ensuite, vous pouvez utiliser ce secret dans votre pod.yml comme image-pull-secret. Cela indiquera à k8 d’utiliser le secret et de tirer l’image de la caisse enregistreuse électronique.
J'ai un script simple pour le faire rapidement.
#
# RUN me where kubectl is available,& make sure to replace account,region etc
#
ACCOUNT=123456789
REGION=my-region
SECRET_NAME=${REGION}-ecr-registry
[email protected] ( can be anything)
#
# Fetch token (which will expire in 12 hours)
#
TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2`
#
# Create or replace registry secret
#
kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"
Et voici comment vous pouvez l’utiliser dans votre pod.yml
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: my-app
spec:
containers:
- image: 123456789.dkr.ecr.my-region.amazonaws.com/my-repo
name: -cntnr
ports:
- containerPort: 8080
imagePullSecrets:
- name: my-secret-name ( this will be same as name of secret we created earlier)
J'ai également écrit un article détaillé sur le processus. Veuillez le trouver ici .
Si vous voulez savoir comment automatiser des CI/CD avec plusieurs environnements sur Kubernetes en utilisant GitOps pour la promotion entre environnements et Aperçu des environnements sur les demandes d'extraction, vous pouvez consulter ma récente conférence sur Jenkins X sur DevOxx UK où I faites une démonstration en direct sur GKE. Bien que Jenkins X fonctionne sur AWS, AKS et GKE et d’autres clusters de kubernetes .
Lorsque vous fusionnez une modification dans la branche principale, Jenkins X crée une nouvelle distribution sémantiquement versionnée de votre application (pom.xml, jar, image du menu fixe, graphique de barre). Le pipeline automatise ensuite la génération de demandes d'extraction afin de promouvoir votre application dans tous les environnements via GitOps. Vous pouvez ensuite décider de restaurer des versions une fois le pipeline de versions d'applications terminé (car il existe également un pipeline d'environnement).
Oui c'est possible. Vous pouvez utiliser Amazon ECR pour votre cluster Kubernetes, mais vous devez créer un secret avec des informations d'identification . Vous pouvez développer un pipeline pour Jenkins qui déploiera automatiquement les mises à jour de votre cluster Kubernetes. Pour cela, vous devez configurer un déclencheur, par exemple l'achèvement réussi du pipeline précédent qui construit votre image. Vous pouvez utiliser kubernetes-plugin pour développer votre pipeline, ou simplement appeler kubectl update avec une nouvelle balise image. Vous pouvez mettre à jour votre cluster à l'aide de la mise à jour par défaut pour le déploiement ou d'un outil tiers, par exemple helm .
* mises à jour
Il existe un bon document: Using AWS EC2 Container Registry. Pour Jenkins et Kubernetes, je peux vous conseiller d’utiliser kube2iam , cela permet d’éviter l’expiration des jetons d’autorisation. Créez des rôles personnalisés pour les nœuds Kubernetes et pour Jenkins, n’oubliez pas non plus d’ajouter l’autorisation d’attribution des rôles pour kube2iam.