Slide 1

Slide 1 text

Apprendre à équiper un cluster Kubernetes pour la production

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

● Aurélien Maury ● Aymen Lamara Lancement Les présentateurs Kubernetes meublé disponible de suite - WeSpeakCloud

Slide 4

Slide 4 text

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é.

Slide 5

Slide 5 text

Le challenge

Slide 6

Slide 6 text

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)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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”

Slide 9

Slide 9 text

Improve Together! From scratch Kubernetes From Scratch écarté parce que : ● Charge de travail trop importante ● Niveau d’expertise insuffisant ● Couardise flagrante

Slide 10

Slide 10 text

Improve Together! Délibération https://github.com/kubernetes-sigs/kubespray

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Improve Together! Disclaimer Dépendances cycliques de concepts

Slide 14

Slide 14 text

Outillage

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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/

Slide 17

Slide 17 text

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/

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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/

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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/

Slide 22

Slide 22 text

● 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/

Slide 23

Slide 23 text

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/

Slide 24

Slide 24 text

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/

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

Prototype

Slide 27

Slide 27 text

Improve Together! Architecture Groupes Ansible

Slide 28

Slide 28 text

Improve Together! Architecture Système

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

● Nginx local en stream TCP vers ○ API Kubernetes Masters ● Le pilotage du cluster passe par le Nginx local Improve Together! Input Host Cockpit

Slide 33

Slide 33 text

Improve Together! Zoom sur Output host ● Service Graylog ● Tous les flux de logs remontent ici ● Point de greffe pour alimenter les systèmes existants

Slide 34

Slide 34 text

Improve Together! Output host Lien Prometheus Nginx local en reverse proxy vers ● Graylog en local ● Prometheus via admin ingress

Slide 35

Slide 35 text

Improve Together! Zoom sur Repository host ● Serveur de livraisons ● Dépôt Helm ● Registry Docker ● Connu de tout le cluster (via /etc/hosts)

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Code

Slide 38

Slide 38 text

Improve Together! Disclaimer

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

Improve Together! And Co …

Slide 43

Slide 43 text

Exploitation

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Improve Together! Déploiements applicatifs cloisonnées RBAC powa user de deploy (.kube/config) Ops user

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

Improve Together!

Slide 50

Slide 50 text

Le pouvoir aux devs

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Improve Together!

Slide 55

Slide 55 text

Métriques

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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.

Slide 58

Slide 58 text

Improve Together!

Slide 59

Slide 59 text

Centralisation des logs

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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, ...)

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Improve Together!

Slide 64

Slide 64 text

Repositories internes

Slide 65

Slide 65 text

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é

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

Improve Together!

Slide 69

Slide 69 text

Storage

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

Improve Together!

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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é

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

Improve Together! Kafka ● Sizing des machines ● Limiter la RAM pour la JVM Zookeeper Points d’attention

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

Improve Together!

Slide 79

Slide 79 text

Prise de hauteur

Slide 80

Slide 80 text

Improve Together! Role-Based Access Control

Slide 81

Slide 81 text

Improve Together! Heketi - GlusterFS ● Mise en place simple dans Kubernetes MAIS !!! ○ Instable ○ Compliqué à remettre d’aplomb

Slide 82

Slide 82 text

Improve Together! Rook-ceph ● Difficile à mettre en place avec les RBAC ● Le filtrage des noeuds par IP ne fonctionnait pas comme il faut

Slide 83

Slide 83 text

Improve Together! Attention !! Aux solutions qui ont leur propre réplication

Slide 84

Slide 84 text

La suite

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

Improve Together! Feel welcome

Slide 87

Slide 87 text

Any question ?

Slide 88

Slide 88 text

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