Transformation de données avec Python, Docker et Kubernetes
par Andrew Backes et Allen Fung
Nous avons récemment créé une application pour transformer des fichiers de données pour un jour donné, les concaténer, et les télécharger sur un serveur FTP. Plus précisément, voici ce que fait l'application.
- Télécharge les fichiers GZ individuels de S3 pour un jour donné.
- Les déCompresse
- Transforme le JSON en format délimité par un tuyau
- Concatène toutes les données pour une journée entière en un seul fichier
- Compresse ce fichier
- Le télécharge via FTP
Il ya quelques choses intéressantes sur cette application. Tout d'abord, alors que nous avons traditionnellement utilisé des scripts shell pour ces types d'applications, nous avons choisi python cette fois. Cette langue rend l'application plus maintenable, car elle supporte facilement les tests unitaires. Python prend également en charge un style de programmation plus fonctionnel, que nous commençons à utiliser plus souvent dans l'ensemble de l'organisation.
Une autre chose intéressante au sujet de l'application est qu'il s'exécute dans un conteneur de docker. Un avantage important de l'utilisation de docker est que notre environnement de développement est exactement le même que notre environnement de production. Par conséquent, nous n'avons pas eu de problèmes tels que des versions python incorrectes ou des modules python manquants pendant le déploiement. Cela nous a permis de terminer le déploiement initial à la production en quelques minutes par rapport aux jours qu'il aurait pris dans notre environnement Legacy.
Pour déployer l'application dans un cluster de serveurs, nous avons utilisé Kubernetes. Plus précisément, nous avons utilisé la commande "kubectl Create". L'entrée de cette commande est un fichier YAML, qui contient l'image du docker, les ressources CPU et les ressources de mémoire à utiliser. Bien que cette application est conçue pour fonctionner dans un seul conteneur, Kubernetes le rend très facile à l'échelle de plusieurs conteneurs en quelques secondes. Voici un exemple de la façon de le faire.
$ kubectl échelle RC My-application-répliques = 5
Comme les options des réplicas sont définies sur cinq, cela signifie que nous sommes à l'échelle de cinq conteneurs. Notez que nous avons également construit des outils au-dessus de Kubernetes pour aider à gérer plusieurs clusters. Avec cet outil, nous spécifions l'emplacement à déployer et le système détecte automatiquement les variables d'environnement correctes pour l'emplacement spécifié.
Comme vous l'avez vu, Python, docker, et Kubernetes nous aide à écrire du code plus propre et itérer plus rapidement, ce qui conduit à de meilleurs produits. À l'avenir, nous espérons pouvoir faire passer plus d'applications héritées à cet environnement. Restez à l'écoute pour les messages blog à ce sujet.
Si vous êtes intéressé à résoudre des problèmes comme celui-ci nous serions ravis de vous avoir Rejoignez notre équipe!