KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS...

Preview:

Citation preview

KUBERNETES-OPS

1

CONCERNANT CES SUPPORTS DE COURS

2 . 1

SUPPORTS DE COURS RÉALISÉS PAR ALTER WAY CLOUDCONSULTING

ex Osones -

Copyright © 2014 - 2019 alter way CloudConsultingLicence : Sources : HTML/PDF :

Licence Creative Commons BY-SA 4.0

https://cloud-consulting.alterway.fr

Creative Commons BY-SA 4.0https://github.com/Alterway/formations/

https://osones.com/formations/

2 . 2

KUBERNETES : PROJET, GOUVERNANCE ETCOMMUNAUTÉ

3 . 1

KUBERNETESCOE développé par Google, devenu open source en2014Adapté à tout type d'environnementDevenu populaire en très peu de tempsPremier projet de la CNCF

3 . 2

CNCFThe Foundation’s mission is to create and drive the adoption of

a new computing paradigm that is optimized for moderndistributed systems environments capable of scaling to tens of

thousands of self healing multi-tenant nodes.

3 . 3

CNCF : PRÉREQUISDistribuer sous forme de conteneursGestion dynamique de laconfigurationOrienté micro services

3 . 4

CNCF : LES RÔLESIntendance des projetsFaire grossir et évoluer l'écosystèmeRendre la technologie accessiblePromouvoir la technologie

3 . 5

OCICréé sous la Linux FondationBut : Créer un standard Open Source concernant la manièrede "runner" et le format des conteneurs et imagesNon lié à des produitsNon lié à des COErunC a été donné par Docker à l'OCI comme implémentionsde base

3 . 6

KUBERNETES : PROJETDocs : Slack : Discuss : Stack Overflow :

Serverfault

https://kubernetes.io/docs/http://slack.k8s.io/

https://discuss.kubernetes.io

https://stackoverflow.com/questions/tagged/kubernetes

https://stackoverflow.com/questions/tagged/kubernetes

3 . 7

KUBERNETES : PROJETHébergé sur Github :

:Issues : Pull Requests

Releases :

Projets en incubation : (Deprécié)

https://github.com/kubernetes/kuberneteshttps://github.com/kubernetes/kubernetes/issues

https://github.com/kubernetes/kubernetes/pulls

https://github.com/kubernetes/kubernetes/releases

https://github.com/kubernetes-incubator/https://github.com/kubernetes-sigs/

3 . 8

KUBERNETES : CYCLE DE DÉVELOPPEMENTChaque release a son propre planning, pour exemple :

Chaque cycle de développement dure 12 semaines et peutêtre étendu si nécessaireFeatures freezeCode FreezeAlpha ReleaseBeta ReleasesRelease Candidates

https://github.com/kubernetes/sig-release/tree/master/releases/release-1.12#timeline

3 . 9

KUBERNETES : COMMUNAUTÉContributor and community guide :

Décomposée en [Special Interest Groups] :

Les SIG sont des projets, centres d'intérêts ou Working Group différents :NetworkDocsAWSetc

Chaque SIG peut avoir des guidelines différentes.

https://github.com/kubernetes/community/blob/master/README.md#kubernetes-community

https://github.com/kubernetes/community/blob/master/sig-list.md

3 . 10

KUBERNETES : KUBECONLa CNCF organise trois KubeCon par an :

Amérique du Nord (San Diego, Seattle,etc)Europe (Berlin, Barcelone, Amsterdametc)Chine

3 . 11

KUBERNETES : ARCHITECTURE

4 . 1

KUBERNETES : COMPOSANTSKubernetes est écrit en Go, compilé statiquement.Un ensemble de binaires sans dépendanceFaciles à conteneuriser et à packagerPeut se déployer uniquement avec des conteneurs sansdépendance d'OS

4 . 2

KUBERNETES : COMPOSANTS DU CONTROL PLANEetcd: Base de donnéeskube-apiserver : API server qui permet la configurationd'objets Kubernetes (Pod, Service, Deployment, etc.)kube-proxy : Permet le forwarding TCP/UDP et le loadbalancing entre les services et les backends (Pods)kube-scheduler : Implémente les fonctionnalités deschedulingkube-controller-manager : Responsable de l'état du cluster,boucle infinie qui régule l'état du cluster afin d'atteindre unétat désiré

4 . 3

KUBERNETES : ETCDBase de données de type Clé/Valeur (Key Value Store)Stocke l'état d'un cluster KubernetesPoint sensible (stateful) d'un cluster KubernetesProjet intégré à la CNCF

4 . 4

KUBERNETES : KUBE-APISERVERLes configurations d'objets (Pods, Service, RC, etc.) se font vial'API serverUn point d'accès à l'état du cluster aux autres composantsvia une API RESTTous les composants sont reliés à l'API server

4 . 5

KUBERNETES : KUBE-SCHEDULERPlanifie les ressources sur le clusterEn fonction de règles implicites (CPU, RAM, stockagedisponible, etc.)En fonction de règles explicites (règles d'affinité et anti-affinité, labels, etc.)

4 . 6

KUBERNETES : KUBE-PROXYResponsable de la publication de servicesUtilise iptablesRoute les paquets à destination des PODs et réalise le loadbalancing TCP/UDP

4 . 7

KUBERNETES : KUBE-CONTROLLER-MANAGERBoucle infinie qui contrôle l'état d'un clusterEffectue des opérations pour atteindre un état donnéDe base dans Kubernetes : replication controller, endpointscontroller, namespace controller et serviceaccountscontroller

4 . 8

KUBERNETES : AUTRES COMPOSANTSkubelet : Service "agent" fonctionnant sur tous les nœuds etassure le fonctionnement des autres serviceskubectl : Ligne de commande permettant de piloter uncluster Kubernetes

4 . 9

KUBERNETES : KUBELETService principal de KubernetesPermet à Kubernetes de s'auto configurer :

Surveille un dossier contenant les manifests (fichiers YAMLdes différents composant de Kubernetes).Applique les modifications si besoin (upgrade, rollback).

Surveille l'état des services du cluster via l'API server (kube-apiserver).

4 . 10

KUBERNETES: NETWORKKubernetes n'implémente pas de solution réseau par défaut,mais s'appuie sur des solutions tierces qui implémentent les

fonctionnalités suivantes:

Chaque pods reçoit sa propre adresse IPLes pods peuvent communiquer directement sans NAT

4 . 11

KUBERNETES : AUJOURD'HUIVersion 1.16.x : stable en productionSolution complète et une des plusutiliséesÉprouvée par Google

4 . 12

KUBERNETES : INSTALLATION

5 . 1

KUBERNETES : MINIKUBEOutil permettant de démarrer rapidement un cluster mono-node Kubernetes localementExecute Kubernetes dans une machine virtuelleNécessite des outils de virtualisation (VirtualBox, VMwareFusion, KVM, etc...)Supporte plusieurs systèmes d'exploitation : Linux, Mac OS,WindowsInstallation :https://github.com/kubernetes/minikube#Installation

5 . 2

KUBERNETES : MINIKUBECréation d'un cluster Kubernetes

$ minikube get-k8s-versionsThe following Kubernetes versions are available when using the localkube bootstrapper: - v1.16.1 - v1.15.5 - v1.14.3 - v1.9.4 - v1.9.0

5 . 3

KUBERNETES : MINIKUBE$minikube start --kubernetes-version="v1.16.1"Starting local Kubernetes v1.16.1 cluster...Starting VM...Getting VM IP address...[...]Connecting to cluster...Setting up kubeconfig...Starting cluster components...Kubectl is now configured to use the cluster.Loading cached images from config file.

5 . 4

KUBERNETES : MINIKUBEEffectuer un diagnostic basique ducluster

$ kubectl versionClient Version: v1.16.1Server Version: v1.16.1

5 . 5

KUBERNETES : MINIKUBE$ kubectl get componentstatusesNAME STATUS MESSAGE ERRORcontroller-manager Healthy okscheduler Healthy oketcd-0 Healthy {"health": "true"}

5 . 6

INSTALLATION DE KUBERNETES

De nombreuses ressources présentes pour le déploiement deKubernetes dans un environnement de production

Un des outils est utilisé pour rapidement démarrerun cluster Kubernetes

kubeadm

5 . 7

INSTALLATION DE KUBERNETES AVEC KUBEADMCertains pré-requis sont nécessaires avant d'installerKubernetes :

Désactiver le swapAssurer que les ports requis soient ouverts :

Installer une Container Runtime compatible CRI

https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports

5 . 8

KUBEADMInstaller les composants Kubernetes (kubeadm, kubectl,kubelet) :

Exécuter kubeadm init sur le noeud masterExécuter kubeadm join sur les autres noeuds (avec le tokenfournir par la commande kubeadm init)Copier le fichier de configuration généré par kubeadm initInstaller le plugin Réseau

https://kubernetes.io/docs/setup/independent/install-kubeadm/

5 . 9

KUBEADMEn plus de l'installation de Kubernetes, Kubeadm peut :

Renouveler les certificats du Control PlaneGénérer des certificats utilisateurs signés par KubernetesEffectuer des upgrades de Kubernetes(kubeadm upgrade)

5 . 10

KUBERNETES MANAGÉS "AS A SERVICE"Il existe des solutions managées pour Kubernetes sur lescloud publics :

AWS Elastic Kubernetes Services:

Azure Kubernetes Service :

Docker Universal Control Plane :

Google Kubernetes Engine :

https://aws.amazon.com/eks/

https://azure.microsoft.com/en-us/services/kubernetes-service/

https://docs.docker.com/ee/ucp/

https://cloud.google.com/kubernetes-engine/5 . 11

INSTALLATION DE KUBERNETESVia Ansible : kubespray

Via Terraform : Il existe d'autres projets open source basés sur le langage Go :

kube-aws :

kops :

https://github.com/kubernetes-sigs/kubespray

https://github.com/poseidon/typhoon

https://github.com/kubernetes-incubator/kube-aws

https://github.com/kubernetes/kops

5 . 12

INTRODUCTION À SONOBUOYOutil de conformité de clusters KubernetesPermet de facilement générer des données de diagnosticspour les applications déployéeshttps://github.com/heptio/sonobuoy/

5 . 13

KUBECTL : ADVANCED USAGEIl est possible de mettre à jour un service sans incident grâcece qui est appelé le rolling-update.Avec les rolling updates, les ressources qu'expose un objetService se mettent à jour progressivement.Seuls les objets Deployment, DaemonSet etStatefulSet support les rolling updates.Les arguments maxSurge et maxUnavailabe définissentle rythme du rolling update.La commande kubectl rollout permet de suivre les rollingupdates effectués.

5 . 14

KUBECTL : ADVANCED USAGEapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: selector: matchLabels: app: frontend replicas: 2 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: name: nginx labels: app: frontend

5 . 15

KUBECTL : ADVANCED USAGE$ kubectl create -f nginx.yaml --recorddeployment.apps/nginx created

5 . 16

KUBECTL : ADVANCED USAGEIl est possible d'augmenter le nombre de pods avec lacommande kubectl scale :

Il est possible de changer l'image d'un container utilisée parun Deployment :

kubectl scale --replicas=5 deployment nginx

kubectl set image deployment nginx nginx=nginx:1.15

5 . 17

KUBECTL : ADVANCED USAGEDry run. Afficher les objets de l'API correspondant sans lescréer :

Démarrer un container en utiliser une commande différenteet des arguments différents :

Démarrer un Cron Job qui calcule π et l'affiche toutes les 5minutes :

kubectl run nginx --image=nginx --dry-run

kubectl run nginx --image=nginx \--command -- <cmd> <arg1> ... <argN>

kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure \-- perl -Mbignum=bpi -wle 'print bpi(2000)'

5 . 18

KUBECTL : ADVANCED USAGESe connecter à un container:

S'attacher à un container existant :

Accéder à un service via un port :

kubectl run -it busybox --image=busybox -- sh

kubectl attach my-pod -i

kubectl port-forward my-svc 6000

5 . 19

KUBECTL : LOGGINGUtiliser kubectl pour diagnostiquer les applications et lecluster kubernetes :

kubectl cluster-infokubectl get eventskubectl describe node <NODE_NAME>kubectl logs (-f) <POD_NAME>

5 . 20

KUBECTL : MAINTENANCEObtenir la liste des noeuds ainsi que les informationsdétaillées :

kubectl get nodeskubectl describe nodes

5 . 21

KUBECTL : MAINTENANCEMarquer le noeud comme unschedulable (+ drainer les pods)et schedulable :

kubectl cordon <NODE_NAME>kubectl drain <NDOE_NAME>kubectl uncordon <NODE_NAME>

5 . 22

KUBERNETES : SECURITÉ ET CONTROLE D'ACCÈS

6 . 1

AUTHENTICATION & AUTORISATIONRBAC (Role Based Access Control)ABAC (Attribute-based access control)WebHookCertificatesToken

6 . 2

RBAC3 entités sont utilisées :

Utilisateurs représentés par les Users ou lesServiceAccountsResources représentées par les Deployments, Pods,Services, etc...les différentes opérations possibles :create, list, get, delete, watch, patch

6 . 3

SERVICE ACCOUNTSObjet Kubernetes permettant d'identifier une application s'éxecutant dans unpodPar défaut, un ServiceAccount par namespaceLe ServiceAccount est formatté ainsi :system:serviceaccount:<namespace>:<service_account_name>

6 . 4

SERVICE ACCOUNTSapiVersion: v1kind: ServiceAccountmetadata: name: default namespace: default

6 . 5

ROLEL'objet Role est un ensemble de règles permettant de définirquelle opération (ou verbe) peut être effectuée et sur quelleressourceLe Role ne s'applique qu'à un seul namespace et lesressources liées à ce namespace

6 . 6

ROLEkind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata: namespace: default name: pod-readerrules:- apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]

6 . 7

ROLEBINDINGL'objet RoleBinding va allouer à un User,ServiceAccount ou un groupe les permissions dans l'objetRole associéUn objet RoleBinding doit référencer un Role dans lemême namespace.L'objet roleRef spécifié dans le RoleBinding est celui quicrée le liaison

6 . 8

ROLEBINDINGkind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: read-pods namespace: defaultsubjects:- kind: User name: jane apiGroup: rbac.authorization.k8s.ioroleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io

6 . 9

CLUSTERROLEL'objet ClusterRole est similaire au Role à la différencequ'il n'est pas limité à un seul namespaceIl permet d'accéder à des ressources non limitées à unnamespace comme les nodes

6 . 10

CLUSTERROLEkind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: secret-readerrules:- apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]

6 . 11

CLUSTERROLEBINDING kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: salme-reads-all-podssubjects:- kind: User name: jsalmeron apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: secret-reader apiGroup: rbac.authorization.k8s.io

6 . 12

RBACkubectl auth can-i get pods /--namespace=default /--as=spesnova@example.com

6 . 13

NETWORKPOLICIESLa ressource NetworkPolicy est une spécificationpermettant de définir comment un ensemble de podscommuniquent entre eux ou avec d'autres endpointsLe NetworkPolicy utilisent les labels pour sélectionner lespods sur lesquels s'appliquent les règles qui définissent letrafic alloué sur les pods sélectionnésLe NetworkPolicy est générique et fait partie de l'APIKubernetes. Il est nécessaire que le plugin réseau déployésupporte cette spécification

6 . 14

NETWORKPOLICIESDENY tout le trafic sur une applicationLIMIT le trafic sur une applicationDENY le trafic all non alloué dans un namespaceDENY tout le trafic venant d'autres namespacesexemples de Network Policies :https://github.com/ahmetb/kubernetes-network-policy-recipes

6 . 15

NETWORKPOLICIESExemple de NetworkPolicy permettant de blocker le traficentrant :

kind: NetworkPolicyapiVersion: networking.k8s.io/v1metadata: name: web-deny-allspec: podSelector: matchLabels: app: web ingress: []

6 . 16

PODSECURITYPOLICIESPermet de contrôler les privilèges d'un podPermet de définir ce qui est autorisé pendant l'exécution dupodA utiliser dans un contexte multi-tenant et quand les pods neviennent pas d'un tiers de confiancePeut-être combiné avec le RBACAttention: Activer cette fonctionnalité peut endommagervotre environnementIl faut une PSP par défaut

6 . 17

PODSECURITYPOLICIESapiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: restrictedspec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: 'MustRunAsNonRoot' readOnlyRootFilesystem: false

6 . 18

ADMISSION CONTROLLERSInterceptes les requêtes sur l'API KubernetesPeut effectuer des modifications sinécessairesConception personnalisée possible

6 . 19

ADMISSION CONTROLLERSDenyEscalatingExecImagePolicyWebhookNodeRestrictionPodSecurityPolicySecurityContextDenyServiceAccount

6 . 20

CONCLUSION

7 . 1

Recommended