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

78605f82de8b2ea497603533d022f1e0?s=47 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.

78605f82de8b2ea497603533d022f1e0?s=128

WeScale

March 26, 2019
Tweet

Transcript

  1. Apprendre à équiper un cluster Kubernetes pour la production

  2. 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.
  3. • Aurélien Maury • Aymen Lamara Lancement Les présentateurs Kubernetes

    meublé disponible de suite - WeSpeakCloud
  4. 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é.
  5. Le challenge

  6. 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)
  7. 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
  8. 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”
  9. Improve Together! From scratch Kubernetes From Scratch écarté parce que

    : • Charge de travail trop importante • Niveau d’expertise insuffisant • Couardise flagrante
  10. Improve Together! Délibération https://github.com/kubernetes-sigs/kubespray

  11. Improve Together! Attentes Destination Time : SEP 24 2018 09:32

  12. Improve Together! Réalité Destination Time : SEP 24 2018 09:32

  13. Improve Together! Disclaimer Dépendances cycliques de concepts

  14. Outillage

  15. 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
  16. 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/
  17. 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/
  18. 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
  19. 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/
  20. 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
  21. 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/
  22. • 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/
  23. 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/
  24. 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/
  25. 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/
  26. Prototype

  27. Improve Together! Architecture Groupes Ansible

  28. Improve Together! Architecture Système

  29. 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
  30. 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
  31. 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
  32. • Nginx local en stream TCP vers ◦ API Kubernetes

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

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

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

    • Dépôt Helm • Registry Docker • Connu de tout le cluster (via /etc/hosts)
  36. 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
  37. Code

  38. Improve Together! Disclaimer

  39. 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
  40. 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
  41. 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
  42. Improve Together! And Co …

  43. Exploitation

  44. 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
  45. Improve Together! Déploiements applicatifs cloisonnées RBAC powa user de deploy

    (.kube/config) Ops user
  46. 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
  47. 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
  48. 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
  49. Improve Together!

  50. Le pouvoir aux devs

  51. 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
  52. 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
  53. 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
  54. Improve Together!

  55. Métriques

  56. 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
  57. 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.
  58. Improve Together!

  59. Centralisation des logs

  60. 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
  61. 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, ...)
  62. 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
  63. Improve Together!

  64. Repositories internes

  65. 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é
  66. 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
  67. Improve Together! Docker Registry • Installation basique (docker standalone) •

    Intégration dans un frontal raw_nginx https://gitlab.com/wescalefr-oss/ansible-roles/docker_registry
  68. Improve Together!

  69. Storage

  70. 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
  71. 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
  72. Improve Together!

  73. Kafka (si, si, on l’a fait)

  74. 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é
  75. 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
  76. Improve Together! Kafka • Sizing des machines • Limiter la

    RAM pour la JVM Zookeeper Points d’attention
  77. 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
  78. Improve Together!

  79. Prise de hauteur

  80. Improve Together! Role-Based Access Control

  81. Improve Together! Heketi - GlusterFS • Mise en place simple

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

    les RBAC • Le filtrage des noeuds par IP ne fonctionnait pas comme il faut
  83. Improve Together! Attention !! Aux solutions qui ont leur propre

    réplication
  84. La suite

  85. 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
  86. Improve Together! Feel welcome

  87. Any question ?

  88. Paris - Nantes www.wescale.fr | blog.wescale.fr Aurélien Maury Directeur Technique

    aurelien.maury@wescale.fr Aymen Lamara Cloud Builder aymen.lamara@wescale.fr @aurelienmaury @Aymenlamara