KUBERNETES-USERGlusterFS / NFS Ceph iSCSI 7.2 KUBERNETES : VOLUMES On déclare d'abord le...

Preview:

Citation preview

KUBERNETES-USER

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 : CONCEPTS ET OBJETS

5 . 1

KUBERNETES : API RESOURCESNamespacesPodsDeploymentsDaemonSetsJobsCronjobs

5 . 2

KUBERNETES : NAMESPACESFournissent une séparation logique des ressources :

Par utilisateursPar projet / applicationsAutres...

Les objets existent uniquement au sein d'un namespacedonnéÉvitent la collision de nom d'objets

5 . 3

KUBERNETES : LABELSSystème de clé/valeurOrganisent les différents objets de Kubernetes (Pods, RC,Services, etc.) d'une manière cohérente qui reflète lastructure de l'applicationCorrèlent des éléments de Kubernetes : par exemple unservice vers des Pods

5 . 4

KUBERNETES : LABELSExemple de label :

apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80

5 . 5

KUBERNETES : LABELSLa commande kubectl get pods, par défaut, ne liste pasles labels. Il est possible de les voir en utilisant--show-labels:

$ kubectl get pods --show-labelsNAME READY STATUS RESTARTS AGE LABELSnginx 1/1 Running 0 31s app=nginx,env=prod

5 . 6

KUBERNETES : PODEnsemble logique composé de un ou plusieurs conteneursLes conteneurs d'un pod fonctionnent ensemble(instanciation et destruction) et sont orchestrés sur un mêmehôteLes conteneurs partagent certaines spécifications du Pod :

La stack IP (network namespace)Inter-process communication (PID namespace)Volumes

C'est la plus petite et la plus simple unité dans Kubernetes

5 . 7

KUBERNETES : PODLes Pods sont définis en YAML comme les fichiersdocker-compose :

apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80

5 . 8

KUBERNETES : DEPLOYMENTPermet d'assurer le fonctionnement d'un ensemble dePodsVersion, Update et RollbackSouvent combiné avec un objet de type service

5 . 9

KUBERNETES : DEPLOYMENTapiVersion: apps/v1kind: Deploymentmetadata: name: my-nginxspec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable ports: - containerPort: 80

5 . 10

KUBERNETES : DAEMONSETAssure que tous les noeuds exécutent une copie du pod surtous les noeuds du clusterNe connaît pas la notion de replicas.Utilisé pour des besoins particuliers comme :

l'exécution d'agents de collection de logs comme fluentdou logstashl'exécution de pilotes pour du matériel commenvidia-pluginl'exécution d'agents de supervision comme NewRelicagent, Prometheus node exporter

5 . 11

KUBERNETES : DAEMONSETapiVersion: apps/v1kind: DaemonSetmetadata: name: ssd-monitor spec: selector: matchLabels: app: ssd-monitor template: metadata: labels: app: ssd-monitor spec: nodeSelector: disk: ssd containers: - name: main image: luksa/ssd-monitor

5 . 12

KUBERNETES : STATEFULSETSimilaire au DeploymentLes pods possèdent des identifiants uniques.Chaque replica de pod est créé par ordre d'indexNécessite un Persistent Volume et un Storage Class.Supprimer un StatefulSet ne supprime pas le PV associé

5 . 13

KUBERNETES : STATEFULSETapiVersion: apps/v1kind: StatefulSetmetadata: name: webspec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports:

5 . 14

KUBERNETES : JOBCrée des pods et s'assurent qu'un certain nombre d'entre euxse terminent avec succès.Peut éxécuter plusieurs pods en parallèleSi un noeud du cluster est en panne, les pods sontreschedulés vers un autre noeud.

5 . 15

KUBERNETES : JOBapiVersion: batch/v1kind: Jobmetadata: name: pispec: parallelism: 1 completions: 1 template: metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure

5 . 16

KUBERNETES: CRON JOBUn CronJob permet de lancer des Jobs de manière planifiée.la programmation des Jobs se définit au format Cronle champ jobTemplate contient la définition del'application à lancer comme Job.

5 . 17

KUBERNETES : CRONJOBapiVersion: batch/v1beta1kind: CronJobmetadata: name: batch-job-every-fifteen-minutesspec: schedule: "0,15,30,45 * * * *" jobTemplate: spec: template: metadata: labels: app: periodic-batch-job spec: restartPolicy: OnFailure containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]

5 . 18

KUBERNETES : NETWORKING

6 . 1

KUBERNETES : NETWORK PLUGINSKubernetes n'implémente pas de solution de gestion deréseau par défautLe réseau est implémenté par des solutions tierces:

: IPinIP + BGP: eBPF

Bien

CalicoCiliumWeave

d'autres

6 . 2

KUBERNETES : CNI

Projet dans la CNCFStandard pour la gestion du réseau en environnementconteneuriséLes solutions précédentes s'appuient sur CNI

Container Network Interface

6 . 3

KUBERNETES : SERVICESAbstraction des pods sous forme d'une IP virtuelle de serviceRendre un ensemble de pods accessibles depuis l'extérieurLoad Balancing entre les pods d'un même service

6 . 4

KUBERNETES : SERVICESLoad Balancing : intégration avec des cloud provider :

AWS ELBGCPAzure Kubernetes ServiceOpenStack

NodePort : chaque noeud du cluster ouvre un port statiqueet redirige le trafic vers le port indiquéClusterIP : IP dans le réseau privé Kubernetes (VIP)LoadBalancer : expose le service à l'externe en utilisant leloadbalancer d'un cloud provider (AWS, Google, Azure)

6 . 5

KUBERNETES : SERVICES

6 . 6

KUBERNETES : SERVICESExemple de service (on remarque la sélection sur le label et lemode d'exposition):

apiVersion: v1kind: Servicemetadata: name: frontend labels: app: guestbook tier: frontendspec: type: NodePort ports: - port: 80 selector: app: guestbook tier: frontend

6 . 7

KUBERNETES : SERVICESIl est aussi possible de mapper un service avec un nom de

domaine en spécifiant le paramètre spec.externalName.

kind: ServiceapiVersion: v1metadata: name: my-service namespace: prodspec: type: ExternalName externalName: my.database.example.com

6 . 8

KUBERNETES: INGRESSL'objet Ingress permet d'exposer un service à l'extérieurd'un cluster KubernetesIl permet de fournir une URL visible permettant d'accéder unService KubernetesIl permet d'avoir des terminations TLS, de faire du LoadBalancing, etc...

6 . 9

KUBERNETES : INGRESSapiVersion: extensions/v1beta1kind: Ingressmetadata: name: osonesspec: rules: - host: blog.osones.com http: paths: - path: / backend: serviceName: osones-nodeport servicePort: 80

6 . 10

KUBERNETES : INGRESS CONTROLLERPour utiliser un Ingress, il faut un Ingress Controller. Il existe

plusieurs offres sur le marché :

Traefik : Istio : Linkerd : Contour : Nginx Controller :

https://github.com/containous/traefikhttps://github.com/istio/istio

https://github.com/linkerd/linkerdhttps://www.github.com/heptio/contour/

https://github.com/kubernetes/ingress-nginx

6 . 11

KUBERNETES : STOCKAGE

7 . 1

KUBERNETES : VOLUMESFournir du stockage persistent aux PODsFonctionnent de la même façon que les volumes Docker pourles volumes hôte :

EmptyDir ~= volumes dockerHostPath ~= volumes hôte

Support de multiples backend de stockage :GCE : PDAWS : EBSGlusterFS / NFSCephiSCSI

7 . 2

KUBERNETES : VOLUMESOn déclare d'abord le volume et on l'affecte à un service :

apiVersion: v1kind: Podmetadata: name: redisspec: containers: - name: redis image: redis volumeMounts: - name: redis-persistent-storage mountPath: /data/redis volumes: - name: redis-persistent-storage emptyDir: {}

7 . 3

KUBERNETES : STORAGE CLASSPermet de définir les différents types de stockage disponiblesUtilisé par les Persistent Volumes pour solliciter unespace de stockage au travers desPersistent Volume Claims

7 . 4

KUBERNETES : STORAGE CLASSkind: StorageClassapiVersion: storage.k8s.io/v1metadata: name: slowprovisioner: kubernetes.io/aws-ebsparameters: type: io1 zones: us-east-1d, us-east-1c iopsPerGB: "10"

7 . 5

KUBERNETES : PERSISTENTVOLUMECLAIMSRessource utilisée et vue comme une requête pour solliciterdu stockage persistantOffre aux PV une variété d'options en fonction du casd'utilisationUtilisé par les StatefulSets pour solliciter du stockage(Utilisaltion du champ volumeClaimTemplates)

7 . 6

KUBERNETES : PERSISTENTVOLUMECLAIMSapiVersion: v1kind: PersistentVolumeClaimmetadata: name: storage-claimspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: "slowl" selector: matchLabels: release: "stable" matchExpressions: - {key: capacity, operator: In, values: [10Gi, 20Gi]}

7 . 7

KUBERNETES : PERSISTENTVOLUMEComposant de stockage dans le cluster kubernetesStockage externe aux noeuds du clusterCycle de vie d'indépendant du pod qui le consommePeut être provisionné manuellement par un administrateurou dynamiquement grâce un StorageClass

7 . 8

KUBERNETES : PERSISTENTVOLUMEapiVersion: v1kind: PersistentVolumemetadata: name: persistent-volume-1spec: storageClassName: slow capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/data"

7 . 9

KUBERNETES : CSI

Équivalent de CNI mais pour les volumesAvant Kubernetes 1.13, tous les drivers de volumes étaient intreeLe but de la séparation est de sortir du code du core deKubernetesGA depuis Kubernetes 1.13

Container Storage Interface

7 . 10

KUBERNETES : GESTION DE LA CONFIGURATIONDES APPLICATIONS

8 . 1

KUBERNETES : CONFIGMAPSObjet Kubernetes permettant stocker séparer les fichiers deconfigurationIl peut être créé d'un ensemble de valeurs ou d'un fichierresource Kubernetes (YAML ou JSON)Un ConfigMap peut sollicité par plusieurs pods

8 . 2

KUBERNETES : CONFIGMAPSapiVersion: v1data: redis-config: | maxmemory 2mb maxmemory-policy allkeys-lrukind: ConfigMapmetadata: name: redis-config namespace: default

8 . 3

KUBERNETES : CONFIGMAP ENVIRONNEMENTapiVersion: v1kind: Podmetadata: name: dapi-test-podspec: containers: - name: test-container image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: LOG_LEVEL valueFrom: configMapKeyRef: name: env-config

8 . 4

KUBERNETES: CONFIGMAP VOLUMEapiVersion: v1kind: Podmetadata: name: dapi-test-podspec: containers: - name: test-container image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "ls /etc/config/" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: # Provide the name of the ConfigMap containing the files you want # to add to the container name: special-config restartPolicy: Never

8 . 5

KUBERNETES : SECRETSObjet Kubernetes de type secret utilisé pour stocker desinformations sensibles comme les mots de passe, les tokens,les clés SSH...Similaire à un ConfigMap, à la seule différence que lecontenu des entrées présentes dans le champ data sontencodés en base64.Il est possible de directement créer un Secret spécifique àl'authentification sur un registre Docker privé.Il est possible de directement créer un Secret à partir d'uncompte utilisateur et d'un mot de passe.

8 . 6

KUBERNETS : SECRETSS'utilisent de la même façon que les ConfigMapLa seule différence est le stockage en base643 types de secrets:Generic: valeurs arbitraire comme dans une ConfigMaptls: certificat et clé pour utilisation avec un serveur webdocker-registry: utilisé en tant que imagePullSecret parun pod pour pouvoir pull les images d'une registry privée

8 . 7

KUBERNETES : SECRETS$ kubectl create secret docker-registry mydockerhubsecret \--docker-username="employeeusername" --docker-password="employeepassword" \--docker-email="employee.email@organization.com"

kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb'

8 . 8

KUBERNETES : SECRETSapiVersion: v1kind: Secretmetadata: creationTimestamp: 2016-01-22T18:41:56Z name: mysecret namespace: default resourceVersion: "164619" uid: cfee02d6-c137-11e5-8d73-42010af00002type: Opaquedata: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm

8 . 9

KUBERNETES : GESTION DES RESSOURCES

9 . 1

PODS RESOURCES : REQUEST ET LIMITSPermettent de gérer l'allocation de ressources au sein d'unclusterPar défaut, un pod/container sans request/limits est en besteffortRequest: allocation minimum garantie (réservation)Limit: allocation maximum (limite)Se base sur le CPU et la RAM

9 . 2

PODS RESOURCES : CPU1 CPU est globalement équivalent à un cœurL'allocation se fait par fraction de CPU:1 : 1 vCPU entier100m : 0.1 vCPU0.5 : 1/2 vCPULorsqu'un conteneur atteint la limite CPU, celui ci estthrottled

9 . 3

PODS RESOURCES : RAML'allocation se fait en unité de RAM:M : en base 10Mi : en base 2Lorsqu'un conteneur atteint la limite RAM, celui ci estOOMKilled

9 . 4

PODS RESOURCES : REQUEST ET LIMITSapiVersion: v1kind: Podmetadata: name: frontendspec: containers: - name: db image: mysql env: - name: MYSQL_ROOT_PASSWORD value: "password" resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" - name: wp

9 . 5

LIMITRANGESl'objet LimitRange permet de définir les valeurs minimaleset maximales des ressources utilisées par les containers et lespodsl'objet LimitRange s'applique au niveau du namespaceles limites spécifiées s'appliquent à chaque pod/containercréé dans le namespacele LimitRange ne limite pas le nombre total de ressourcesdisponibles dans le namespace

9 . 6

LIMITRANGESapiVersion: v1kind: LimitRangemetadata: name: limit-examplespec: limits: - default: memory: 512Mi defaultRequest: memory: 256 Mi type: Container

9 . 7

RESOURCEQUOTASun objet ResourceQuota limite le total des ressources decalcul consommées par les pods ainsi que le total de l'espacede stockage consommé par les PersistentVolumeClaimsdans un namespaceil permet aussi de limiter le nombre de pods, PVC et autresobjets qui peuvent être créés dans un namespace

9 . 8

RESOURCEQUOTASapiVersion: v1kind: ResourceQuotametadata: name: cpu-and-ramspec: hard: requests.cpu: 400m requests.memory: 200Mi limits.cpu: 600m limits.memory: 500Mi

9 . 9

KUBERNETES : OBSERVABILITÉ ET MONITORING

10 . 1

SONDES : READINESS AND LIVENESSPermettent à Kubernetes de sonder l'état d'un pod et d'agiren conséquence2 types de sonde : Readiness et Liveness3 manières de sonder :TCP : ping TCP sur un port donnéHTTP: http GET sur une url donnéeCommand: Exécute une commande dans le conteneur

10 . 2

SONDES : READINESSGère le trafic à destination du podUn pod avec une sonde readiness NotReady ne reçoit aucuntraficPermet d'attendre que le service dans le conteneur soit prêtavant de router du traficUn pod Ready est ensuite enregistrer dans les endpoints duservice associé

10 . 3

SONDES : LIVENESSGère le redémarrage du conteneur en cas d'incidentUn pod avec une sonde liveness sans succès est redémarré aubout d'un intervalle définiPermet de redémarrer automatiquement les pods "tombés"en erreur

10 . 4

SONDES : EXEMPLEapiVersion: v1kind: Podmetadata: name: goproxy labels: app: goproxyspec: containers: - name: goproxy image: k8s.gcr.io/goproxy:0.1 ports: - containerPort: 8080 readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: tcpSocket:

10 . 5

KUBERNETES : UTILISATION ET DÉPLOIEMENTDES RESSOURCES

11 . 1

KUBERNETES : KUBECTLLe seul (ou presque) outil pour interagir avec des clustersKubernetesUtilise un fichier de configuration (kubeconfig) pourcommuniquer avec l'API de KubernetesLe(s) fichier(s) se trouve(nt) par défaut dans~/.kube/configLe fichier de config. contient :

L'adresse(URI) de l'APIServerLes chemins des certificats TLS utilisés pourl'authentification

Fichier kubeconfig peut être passé en paramètre de kubectlavec le flag --kubeconfig

11 . 2

KUBECONFIGUn seul fichier pour gérer tous ses clusters avec trois

informations :

Serveurs (IP, CA Cert, Nom)Users (Nom, Certificat, Clé)Context, association d'un user et d'unserveur

Stocké par défaut dans ~/.kube/config

11 . 3

KUBERNETES : KUBECTLAfficher la liste des ressources API supportées par leserveur:$ kubectl api-resourcesNAME SHORTNAMES APIGROUP NAMESPACED KINDconfigmaps cm true ConfigMaplimitranges limits true LimitRangenamespaces ns false Namespacenodes no false Nodepersistentvolumeclaims pvc true PersistentVolumeClaimpersistentvolumes pv false PersistentVolumepods po true Podsecrets true Secretservices svc true Servicedaemonsets ds apps true DaemonSetdeployments deploy apps true Deploymentreplicasets rs apps true ReplicaSetstatefulsets sts apps true StatefulSethorizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscalercronjobs cj batch true CronJobjobs batch true Jobingresses ing extensions true Ingress

11 . 4

KUBERNETES : KUBECTLAfficher les noeuds du cluster :

Ces commandes sontéquivalentes:

kubectl get nodes

kubectl get nokubectl get nodes

11 . 5

KUBERNETES : KUBECTLAfficher les namespaces

Par défaut, kubectl utilise le namespace defaultIl est possible de sélectionner un namespace avec l'option -nou --namespace

kubectl get nskubectl get namespaces

kubectl -n kube-system get pods

11 . 6

KUBERNETES : KUBECTLAfficher les pods (pour le namespacedefault)

kubectl get podskubectl get pod

11 . 7

KUBERNETES : KUBECTLAfficher les services (pour le namespacedefault):

kubectl get serviceskubectl get svc

11 . 8

KUBERNETES : CRÉATION D'OBJETS KUBERNETESLes objets Kubernetes sont créés sous la forme de fichiersJSON ou YAML et envoyés à l'APIServerPossible d'utiliser la commande kubectl run, mais limitéeaux Deployments et aux JobsL'utilisation de fichiers YAML permet de les stocker dans unsystème de contrôle de version comme git, mercurial, etc...La documentation de référence pour l'API Kuberneteshttps://kubernetes.io/docs/reference/#api-reference

11 . 9

KUBERNETES : CRÉATION D'OBJETS KUBERNETESPour créer un object Kubernetes depuis votre fichier YAML,utilisez la commande kubectl create :

Il est possible de créer des objets Kubernetes à partir d'uneURL :

kubectl create -f object.yaml

kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/frontend-deployment.yaml

11 . 10

KUBERNETES : CRÉATION D'OBJETS KUBERNETESPour les supprimer exécuter simplement :

Mettre à jour un objet Kubernetes en écrasant laconfiguration existante:

kubectl delete -f object.yaml

kubectl replace -f object.yaml

11 . 11

KUBERNETES : KUBERNETES DASHBOARDInterface graphique web pour les clusters KubernetesPermet de gérer les différents objets Kubernetes créés dansle(s) cluster(s).Installé par défaut dans minikube

11 . 12

KUBERNETES : KUBERNETES DASHBOARD

11 . 13

KUBERNETES : KUBERNETES DASHBOARDPour déployer le Dashboard, exécuter la commandesuivante:

Pour accéder au Dashboard, il faut établir unecommunication entre votre poste et le cluster Kubernetes :

L'accès se fait désormais sur :

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

$ kubectl proxy

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

11 . 14

KUBERNETES : INTRODUCTION TO HELMUne application conçue pour faciliter l'installation et lagestion des applications sur Kubernetes.Il utilise un format de paquetage appelé Charts.Il est comparable à apt/yum/homebrew.Plusieurs charts existent déjà sur le répertoire officiel :https://github.com/kubernetes/charts.

11 . 15

KUBERNETES : INTRODUCTION TO HELMTiller : Serveur Helm. Il interagit avec l'APIServer deKubernetes pour installer, mettre à jour et supprimer lesressources Kubernetes.Chart : Contient toutes les ressources définies et nécessairespour éxecuter une application ou un service à l'intérieur decluster Kubernetes. Un chart est pratiquement unregroupement de ressources Kubernetes pré-configurées.Release : Une instance d'un chart helm s'éxécutant dans uncluster Kubernetes.Repository : répertoire ou espace (public ou privé) où sontregroupés les charts.

11 . 16

KUBERNETES : INTRODUCTION TO HELMInstaller Helm (sur une distribution Linux):Deployer tiller : helm initVoir la liste des charts disponibles sur les répertoire officiel :helm searchAfficher la liste des charts disponibles pour prometheus :helm search prometheusAfficher les options disponibles dans un chart Helm:helm inspect stable/prometheus

11 . 17

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.

11 . 18

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

11 . 19

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

11 . 20

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

11 . 21

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)'

11 . 22

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

11 . 23

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

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

11 . 24

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

kubectl get nodeskubectl describe nodes

11 . 25

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

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

11 . 26

CONCLUSION

12 . 1

Recommended