Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apprendre à équiper un cluster Kubernetes pour la production. Par Aymen Lamara et Aurélien Maury

WeScale
March 26, 2019

Apprendre à équiper un cluster Kubernetes pour la production. Par Aymen Lamara et Aurélien Maury

Au programme de cette nouvelle session des #WeSpeakCloud : Apprendre à équiper un cluster Kubernetes pour la production.

On vous propose d’analyser le projet Kubespray, outillage d’installation de Kubernetes en Ansible, et l’architecture qui va autour pour être à même de maintenir une plateforme complète en production, avec du monitoring, de la centralisation de logs, une gestion propre des utilisateurs et le chemin de déploiement pour les développeurs. Une session All-inclusive !

Un seul pré-requis pour profiter pleinement de ce rdv :
- Avoir un niveau intermédiaire sur Kubernetes

Mais les #WeSpeakCloud by WeScale késako ?
La transmission et le partage des connaissances font intégralement partie de nos valeurs chez WeScale.
C’est pour cela que nous avons décidé d'organiser les #WeSpeakCloud "et si nous parlions Cloud ?", une série d'évènements gratuits où nous pourrons apprendre et discuter ensemble sur des sujets actuels qui constituent les technologies et l'environnement Cloud.

WeScale

March 26, 2019
Tweet

More Decks by WeScale

Other Decks in Programming

Transcript

  1. Présentation Kubernetes meublé disponible de suite - WeSpeakCloud WeScale La

    transmission et le partage des connaissances font intégralement partie de nos valeurs chez WeScale. C’est pour cela que nous avons décidé d'organiser, les #WeSpeakCloud, une série d'événements gratuits où nous pourrons apprendre et discuter ensemble sur des sujets actuels qui constituent les technologies et l'environnement Cloud.
  2. Improve Together! Objectif de cette conférence Je partagerai mon expérience

    avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé.
  3. Improve Together! … si vous l’acceptez Destination Time : SEP

    24 2018 09:32 Construire une automatisation de plate-forme Kubernetes : • Exploitable • Customisable à souhait • Déployable sur n’importe quel IaaS (AWS, AliCloud, VMWare) • Appréciée de ses utilisateurs (Dev & Ops)
  4. Improve Together! Kubernetes sur étagère Offres Cloud écartées parce que

    : • liées à un provider de Cloud • écarts potentiels dans les versions • écarts certains dans les méthodes de maintenance
  5. Improve Together! Kops Kops écarté parce que : • support

    officiel AWS, mais GCE en beta, vSphere en alpha • Maintenance évolutive jugée complexe • Trop typé “code” plutôt que “outillage”
  6. Improve Together! From scratch Kubernetes From Scratch écarté parce que

    : • Charge de travail trop importante • Niveau d’expertise insuffisant • Couardise flagrante
  7. Improve Together! Kubespray • Toolkit Ansible d’installation de cluster kubernetes

    • Beaucoup d’options disponibles pour la configuration • Gère les changements de topologie du cluster • Cloud provider: AWS, GCP, AZURE … https://github.com/kubernetes-sigs/kubespray
  8. Improve Together! Terraform • Standard de l’Infrastructure as Code •

    HCL langage déclaratifs • Modifier, Tester, Versionné, partagé … • TF-state • Workspace • Utilisé pour construire l’infrastructure prototype https://www.terraform.io/
  9. Improve Together! Ansible • Gestionnaire de configuration et de déploiement

    d’applications • Basé sur des playbooks et rôles écrits en Yaml • Utilise le SSH en mode ad hoc • Infra-as-code : AWS, GCP, etc ... https://www.ansible.com/
  10. Improve Together! AWX • Version open-source de Ansible Tower •

    Offre un dashboard pour visualiser et centraliser vos déploiements Ansible • Planifier des tâches, notifications, logs.. • Contrôle d’accès des utilisateurs, gestion des groupes et des rôles https://github.com/ansible/awx
  11. Improve Together! Prometheus • Utilisé pour la surveillance des systèmes

    et des services • Collecte les métriques des cibles configurées • Évalue les expressions de règle • Gère l’alerting • Affiche les résultats sur un dashboard • Utilise node-exporter https://prometheus.io/
  12. Improve Together! Grafana • Grafana est une suite de visualisation

    et de surveillance de données • Fournit un tableau de bord et des analyses métriques • Surveillance de performance de votre infrastructure https://grafana.com/grafana
  13. Improve Together! Graylog • Plate-forme de gestion/centralisation de logs •

    Collecte, indexe et analyse des logs structurées (ou pas) • Il existe aussi une version Entreprise • Dans le paquet: ◦ Moteur Graylog ◦ Indexation des logs par Elasticsearch ◦ Stockage de la configuration par Mongodb https://www.graylog.org/
  14. • Collecteur de données • Structure les données en JSON

    • Unifie la méthode de consommation des données Improve Together! Fluentd https://www.fluentd.org/
  15. Improve Together! Helm • Package manager pour Kubernetes • Aujourd’hui

    maintenu par CNCF • Gérer les mise-à-jour et les rollback • Basé sur les “Charts” • Les charts peuvent être publiés, partagés et versionnés https://helm.sh/
  16. Improve Together! Rook • Orchestrateur pour les solutions de stockage

    exécutés dans Kubernetes. • Supporte plusieurs solutions: Bloc, Objet ou système de fichier • Principalement choisi pour son orchestration Ceph https://rook.io/
  17. Improve Together! Ceph • Stockage distribué : objet, bloc et

    système de fichiers • Sans point de défaillance • Scalable • Dans Kubernetes : ◦ Mgr ◦ Osds ◦ Mons https://ceph.com/
  18. Improve Together! Architecture Ingresses • 2 ingress : ◦ admin-ingress

    pour les services de monitoring/métriques ◦ public-ingress pour les applications à exposer • Exposition par NodePort • Load Balancer externe pour pointer vers public-ingress
  19. Improve Together! Input Host • Surface d’exposition : SSH •

    Forwarding de port pour accéder aux services • Permet des rebonds SSH pour Ansible • Point d’accès opérateurs (Dev & Ops) Point d’entrée
  20. Nginx local en reverse proxy vers • Grafana via admin-ingress

    • Ceph Monitor via admin-ingress • Kube Dashboard via admin-ingress • Graylog sur Output Host • AWX en local Improve Together! Input Host Cockpit
  21. • Nginx local en stream TCP vers ◦ API Kubernetes

    Masters • Le pilotage du cluster passe par le Nginx local Improve Together! Input Host Cockpit
  22. Improve Together! Zoom sur Output host • Service Graylog •

    Tous les flux de logs remontent ici • Point de greffe pour alimenter les systèmes existants
  23. Improve Together! Output host Lien Prometheus Nginx local en reverse

    proxy vers • Graylog en local • Prometheus via admin ingress
  24. Improve Together! Zoom sur Repository host • Serveur de livraisons

    • Dépôt Helm • Registry Docker • Connu de tout le cluster (via /etc/hosts)
  25. Improve Together! Zoom sur Repository host • Alimentation des dépôts

    par playbooks Ansible • Dev & Ops peuvent nourrir le Docker Registry • Déploiements applicatifs via Helm
  26. Improve Together! Projet Kubi • Fork de Kubespray 2.8.0 •

    Ajout de playbooks dans integration/ • Ajout de requirements.yml • Modifications minimales pour garder les merges depuis l’upstream simples https://gitlab.com/wescalefr-oss/kubi
  27. Improve Together! Seed • Met à jour le système •

    Installe les pré-requis pour qu’Ansible puisse travailler sans friction • Déployé sur toutes les machines en préliminaire https://gitlab.com/wescalefr-oss/ansible-roles/seed
  28. Improve Together! Raw Nginx • Installation “vide” • Répertoire /etc/nginx/streams.conf.d

    • Fichiers fournis par les autres installations https://gitlab.com/wescalefr-oss/ansible-roles/raw_nginx
  29. Improve Together! Le plan • Ne jamais exposer les API

    des Masters Kubernetes à l’extérieur • Ne faire que des opérations testées hors production et introduite sous forme de playbooks dans le serveur AWX • Rupture de protocole simple : SSH -> HTTPS -> SSH Dans les grandes lignes
  30. Improve Together! Un forward de port pour les contrôler tous

    Le forward vers le NGinx du Input Host donne accès à : • AWX • Grafana • Graylog • Kubernetes dashboard • Ceph dashboard Dans les grandes lignes
  31. Le forward vers le NGinx du Input Host donne accès

    à : • AWX • Grafana • Graylog • Kubernetes dashboard • Ceph dashboard Improve Together! Un forward de port pour les contrôler tous Dans les grandes lignes
  32. Improve Together! AWX Server • Installation en Docker stand-alone •

    Configuration minimale reboot-proof • Bindé sur localhost uniquement • Accédé par Le Forward https://gitlab.com/wescalefr-oss/ansible-roles/awx_server
  33. Improve Together! Le pouvoir aux devs Notion de k8s-userspace •

    un namespace • un Service Account • un compte utilisateur sur le Input Host I want to deploy free
  34. Improve Together! Le pouvoir aux devs $HOME/.kube/config généré • avec

    le token du Service Account • avec le CA du cluster • Kubectl pointé sur le Nginx local qui forward vers les API Masters I want to deploy free
  35. Improve Together! Le pouvoir aux devs On peut déployer depuis

    un poste client si : • On installe kubectl et Helm • Récupération du .kube/config.yml et .kube/ca.crt • Connexion ssh avec forward du port du Nginx Local I want to deploy free
  36. Improve Together! Monitoring • Prometheus-operator et autres Custom Resources •

    Dépose des templates sur les masters et applique via kubectl • Namespace à part • Dashboards embarqués https://gitlab.com/wescalefr-oss/ansible-roles/kubespray_monitoring
  37. Improve Together! Prometheus • Prometheus et Grafana restent dans le

    cluster et mourront avec lui • Forward vers d’autres systèmes de collecte via le Output Host • Troubleshooting survivaliste : ◦ Si je n’ai plus de métriques, j’ai un très, très gros souci.
  38. Improve Together! Graylog • Graylog 3.0.0 • Installation Minimum Setup

    • Elasticsearch single-node • Mongodb single-node https://gitlab.com/wescalefr-oss/ansible-roles/graylog_standalone
  39. Improve Together! Graylog • Hébergé sur Output Host • Déployé

    via rôle Ansible personnalisé • Accessible via le Nginx du Input Host • Permet de créer des port outputs dans différents formats (syslog, Datadog, XMPP, ...)
  40. Improve Together! Fluentd • Dépose des templates sur les masters

    et applique via kubectl • Daemonset d’images roffe/kube-gelf • Namespace en propre • Envoi de /var/log/containers en Gelf-TCP vers Graylog https://gitlab.com/wescalefr-oss/ansible-roles/kubespray_fluentd
  41. Improve Together! Dépôts en propres • Stockage de nos images

    applicatives • Stockage de nos Helm Charts applicatifs • Connu du cluster Kubernetes via /etc/hosts Utilité
  42. Improve Together! Helm Repository • Installation basique (systemd + helm

    serve) • Intégration dans un frontal raw_nginx https://gitlab.com/wescalefr-oss/ansible-roles/kubespray_helm_repository
  43. Improve Together! Docker Registry • Installation basique (docker standalone) •

    Intégration dans un frontal raw_nginx https://gitlab.com/wescalefr-oss/ansible-roles/docker_registry
  44. Improve Together! Rook-ceph • Rook operator • Revue de code

    de “Chart” helm officielle • Un namespace apart “rook-ceph-system” https://gitlab.com/wescalefr-oss/kubi/blob/master/integration/platform-install-storage.yml
  45. Improve Together! Rook-ceph • Déploiement personnalisé • Storage class et

    namespace rook-ceph ◦ Replication pool ◦ Device: xvdb ◦ dataDirHostPath : /var/lib/rook https://gitlab.com/wescalefr-oss/kubi/blob/master/integration/k8s-userspaces/ops/templates/01-ceph-cluster.yml
  46. Improve Together! Kafka • Nice-to-have • Utile pour les applications

    pilotes • Premier cas pour valider la robustesse du storage • Basculé dans le périmètre Ops Utilité
  47. Improve Together! Kafka Chart • Helm Chart basé sur la

    POC de Confluent • Forké et modifié pour ajouter des requests et limits dans les resources • Exposition des métriques à Prometheus https://gitlab.com/wescalefr-oss/helm-charts/kafka
  48. Improve Together! Kafka • Sizing des machines • Limiter la

    RAM pour la JVM Zookeeper Points d’attention
  49. Improve Together! Kafka • Playbook de validation de l’installation de

    Kafka ◦ kubi/integration/ops-kafka-bench.yml • Lance un kafka-client dans le cluster • Injecte des message via ProducerPerformance • Lit les messages via kafka-consumer-perf-test Bonus
  50. Improve Together! Heketi - GlusterFS • Mise en place simple

    dans Kubernetes MAIS !!! ◦ Instable ◦ Compliqué à remettre d’aplomb
  51. Improve Together! Rook-ceph • Difficile à mettre en place avec

    les RBAC • Le filtrage des noeuds par IP ne fonctionnait pas comme il faut
  52. Improve Together! Pour la suite • Installation complète hors-ligne avec

    Nexus3 sur Repository Host • Merge de la dernière version taggée de Kubespray • DNS interne, hors Kubernetes • Automatiser la création de l’input Graylog via les API • Valider une installation sur Debian • Crash tests et entraînement à l’exploitation • Contribuer à Kubespray • Expérimenter et définir des limits et requests saines pour chaque service En vrac