Académique Documents
Professionnel Documents
Culture Documents
Présentation
Kubernetes, aussi appelé ‘K8S’ (puisque 8 lettres sont comprises entre le ‘k’ et le ‘s’), est une plateforme
logicielle Open Source extensible et portable, dont l’objet est d’assurer la gestion de charges de
travail (Workloads) et de services assurés par des containers Linux.
L’objectif de Kubernetes est de pouvoir orchestrer un cluster de containers en automatisant tous les
processus manuels associés au déploiement, à la gestion et à la mise à l'échelle des applications
définies dans des containers d'applications.
Kubernetes fonctionne sur le concept du mode déclaratif, ce qui signifie qu’il se charge d’atteindre
l’état de fonctionnement dicté par l’administrateur.
Les containers peuvent êtres répartis sur des 'nœuds' appelés ‘nodes’, définis à l’intérieur d'un
ensemble de machines, le tout, constituant le 'cluster'.
➔ L’intérêt d'un cluster est de pouvoir assurer la haute disponibilité des services.
À l'origine, la plateforme Kubernetes a été développée et conçue par des ingénieurs de chez Google,
qui est l'un des premiers contributeurs aux technologies de containers Linux (LXC).
A titre indicatif, en 2016 Google déploie plus de 2 milliards de containers par semaine via
une plateforme interne nommée Borg, qui est la ‘grande sœur’ de Kubernetes.
Google a fait don du projet Kubernetes à la Cloud Native Computing Foundation (CNCF),
lors de sa création en 2015.
Kubernetes apporte une solution efficace pour la mise en œuvre d'une infrastructure de déploiement
automatique de containers dans des environnements de production, que ce soit en cloud ou en
infrastructures locales ('on-premise').
➔ Dans la pratique, il est conseillé de n'associer qu’un seul container par pod !
La configuration de l’état souhaité constitue le ‘control plane’ (plan de contrôle), elle s’établit sur le
nœud ‘Master’.
Le but du ‘control plane’ est d’amener et de maintenir le cluster dans l’état souhaité.
➔ Grace au plan de contrôle, le Master’ prend les décisions de planification et de
modification nécessaires, puis il transfère ses instructions aux ' Workers’.
La configuration du plan de contrôle est décrite dans des fichiers de type YAML ou JSON,
appelés 'manifest'.
• etcd
etcd la base de données qui constitue le magasin de données des informations du cluster, au format :
clé-valeur.
Toutes les ressources du cluster y sont inscrites.
• API Server
APIServer est une interface REST qui s’occupe de lire et écrire dans la base ‘etcd’ en mode ‘CRUD’
(Create, Read, Update, Delete)
API Server s’occupe également de transporter les informations du plan de contrôle.
• Scheduler
Le scheduler s’occupe d'affecter un ‘node’ aux ‘pods’ qui sont créés.
Dès qu'un ‘pod ‘est créé ou modifié, le scheduler va transmettre des requêtes à l'’API server’ afin de
modifier les ressources.
• Controller Manager
Le ‘Controller Manager’ gère les briques de type ‘contrôleur’ afin de placer et de maintenir le
cluster, dans l’état souhaité.
• Kubelet
Kubelet est le composant du ‘control plane’ qui est exécuté sur les ‘workers nodes’ afin de gérer tout
ce qui se passe sur le nœud.
Kubelet surveille l'API Server ‘pour découvrir les ‘pods’ qui lui ont été affectés et démarre alors les
conteneurs du ‘pod‘ via le ‘container runtime’.
Pour exécuter les opérations, l'administrateur utilise la commande 'kubectl' permettant de passer les
ordres aux ‘nodes’, afin d’administrer dynamiquement le cluster Kubernetes.
Par exemple, la commande 'kubectl run' est équivalente à la commande 'docker run'.
Lorsqu'un 'node' reçoit les commandes, kubernetes alloue dynamiquement les ressources aux pods,
afin de de permettre l’exécution des tâches demandées et de planifier un pod.
‘kubelet’ est un agent logiciel qui s'exécute sur chaque nœud, afin de commander le fonctionnement
des containers et d'en contrôler l'état.
C'est le 'kubelet' du nœud qui donne l'ordre à Docker de lancer les containers spécifiés.
Les formats de codification tels que JSON (JavaScript Object Notation), REST (Representational State
Transfer) ou YAML sont très impliqués dans la constitutions de l’infrastructure.
Le service est un point d’entrée vers un groupe de containers identiques, définit sous forme d’une
adresse IP virtuelle (VIP).
Kubernetes offre nativement les services de proxy, de nommage DNS, de routage et d’adressage IP,
permettant d’associer une adresse et un nom de domaine à un service applicatif disponible sur les
containers de l’infrastructure.
Cette notion de services, permet de rendre un serveur accessible en visant les pods opérationnels où
ce service est définit et de garantir la répartition de charges (Load balancing) entre les containers des
différents nodes.
L'Open Container Initiative (OCI) a été créée afin de standardiser les outils et API d’exécution des
containers.
➔ Il s'agit du standard 'runc' qui est issu de Docker
Kubernetes utilise une interface API spécifique nommée ‘CRI' (Container Runtime Interface) pour
dialoguer avec le ‘Container runtime’.
➔ C’est le composant ‘kubelet’ qui assure la communication entre Kubernetes et les ‘runtime’.
L'utilisateur interagit directement avec la ‘runtime de haut niveau‘ dont le rôle est d’assurer
la récupération des images de containers.
Une fois ces activités de haut niveau effectuées, elle délègue à la ‘runtime de bas niveau’ les
tâches pour créer les conteneurs.
Expérimentations diverses
✔ Soit opter pour une installation standard officielle de Kubernetes avec ‘kubeadm’ qui permet de
déployer un 'vrai' cluster, en installant le nœud ‘Master’ et en inscrivant des nœuds de travail
(Workers) sur les machines cibles.
✔ Soit envisager une découverte et prise en main de Kubernetes, en utilisant une solution
d’expérimentation simple et efficace, rendant un cluster opérationnel en quelques minutes.
Dans ce cas, on pourra mettre en place une architecture à nœud unique, (Master/Workers), telle que
l'application 'minikube'.
✔ Soit en visant un déploiement d'un cluster léger en exploitant des procédure d'auto-installation ,
telles que l’application ‘K3S’ ou RKE qui sont des implémentation axée sur la légèreté, permettant
de mettre un cluster en production de façon simple et rapide.
Pour mener à bien cette expérimentation, nous devons préparer 3 x machine Linux Debian 64 bits,
équipée chacune d’au moins 2 x CPU, de 3 GiO de RAM et d’un disque de stockage de 40GiO
➔ La machine n°1 sera le ‘nœud master’, les autres machines, seront respectivement
les ‘nœuds workers, 1 et 2
4. sysctl --system
• kubeadm est l’installeur Kubernetes à exécuter sur chacun des nœuds du cluster
• kubelet est le démon en charge d’exécuter et de gérer les conteneurs sur chacun des nœuds du cluster
• kubectl est l’interface qui fournit la ligne de commande permettant de communiquer avec le cluster
Attention pour les deux commandes suivantes, bien faire en sorte que toutes les instructions
soient définie sur une seule ligne (Astuce : copier/coller l'instruction dans un 'bloc note')
3. apt update -y
4. apt install -y kubelet kubeadm kubectl
5. apt-mark hold kubelet kubeadm kubectl
Le message qui s'affiche en fin de procédure représente la commande qu'il faudra utiliser sur les Workers, afin de
les joindre au Cluster
Exemple de message :
kubeadm join 192.168.100.43:6443 --token w0mvog.nxnh1mihgy20mvtw --discovery-token-ca-cert-hash
sha256:5a668a0625c7b698d3c531aad5569bcbb91a6467f28e722351cd4a7be4fde014
1. export KUBECONFIG=/etc/kubernetes/admin.conf
2. mkdir -p $HOME/.kube
3. cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
4. chown $(id -u):$(id -g) $HOME/.kube/config
5. export KUBECONFIG=/etc/kubernetes/admin.conf
Les nœuds ne seront pas prêts tant qu’aucun plugin réseau ne sera actif
➔ Il faut donc installer un plugin de gestion réseau, tel que Calico ou Flannel, Cilium, ...
Pour joindre le cluster, il suffit de coller la commande récupérée lors de l’initialisation du cluster
kubeadm join x.x.x.x:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
où :
✗ x.x.x.x est l’adresse IP du Master
✗ <token> est le jeton qui permet au nœud de s’identifier
✗ <hash> permet au nœud de s’assurer de l’authenticité du nœud maître.
Une fois les nœuds ajoutés, pour contrôler que tous c’est bien passé, on vérifie l’existence des
nœuds, depuis le Master
kubectl get nodes -o wide
Si besoin, il est possible de visualiser ou régénérer un nouveau jeton (token) sur le Master
• Pour obtenir le jeton : kubeadm token list
• Pour en créer un nouveau (expire après 24 H) : kubeadm token create --print-join-command
• Pour obtenir le hash de la clé utilisée :
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed
's/^.* //'
Installation
1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/
recommended.yaml
Il suffit de copier le
jeton
Se connecter à l'interface
https://node2.local:32321/#/login ← On se connecte sur le nœud sur lequel tourne le service
minikube est une application open-source permettant de déployer un cluster kubernetes à nœud
unique, sur une seule machine.
• minikube nécessite un hyperviseur de machines virtuelles, afin de créer une VM, pour
fonctionner ou un environnement de containérisation
Préparation de la machine
• apt update -y && apt upgrade -y
• apt install curl wget apt-transport-https gnupg2 sudo software-properties-common -y
• reboot
Installation de Docker
• install -m 0755 -d /etc/apt/keyrings
• curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o
/etc/apt/trusted.gpg.d/debian.gpg
• add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/debian $
(lsb_release -cs) stable"
• apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Installation de minikube
• curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
• install minikube-linux-amd64 /usr/local/bin/minikube
• curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
• chmod +x ./kubectl && sudo mv ./kubectl /usr/local/bin
• source <(kubectl completion bash)
• echo "source <(kubectl completion bash)" >> ${HOME}/.bashrc
Voir les informations du cluster (affiche l’état de fonctionnement et le socket d’accès réseau)
kubectl cluster-info
Supprimer un service
kubectl delete service -l app=’nom’
Le dashboard est un tableau de bord permettant de superviser et administrer un cluster kubernetes, via une
interface accessible par un navigateur web.
Si la machine ne possède pas d’environnement graphique, il faut une liaison de type ‘reverse proxy’.
Pour accéder au Dashboard depuis un poste client réseau, il faut se connecter sur l’adresse de la
machine master
http://x.x.x.x:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
#/workloads?namespace=default
→ où ‘x.x.x.x’ est l’adresse de la machine master
K3S est la solution idéale pour la mise en place d’un cluster kubernetes destiné à l’usage des objets
‘IoT’ ou impliquant des machines d’architecture de type ‘ARM’ (comme le raspberry pi).
K3s consiste en une simple application d’environ 50Mo, nécessitant seulement 512 de RAM pour
fonctionner !
Elle s’appuie sur le runtime de container ‘containerd’, utilise le gestionnaire de réseau ‘flannel’ et
exploite une base de données SQLite à la place de etcd.
Pour la mise en œuvre d’un cluster, il suffit de lancer le script de déploiement sur la machine
destinée à la fonction de ‘Nodes Manager’ et ensuite, d’inscrire le ou les nœuds de type ‘Workers’,
sur lesquels les ‘pods’ pourront alors êtres déployés.
Installation de k3s
curl -sfL https://get.k3s.io | sh -
On obtient un ‘token’ qui permettra aux nœuds ‘Workers’ de joindre le cluster, p our le voir
cat /var/lib/rancher/k3s/server/node-token
On joint le cluster
curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -
On obtient en retour :
[INFO] Finding release for channel stable
[INFO] Using v1.28.4+k3s2 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.28.4+k3s2/sha256sum-amd64.txt
[INFO] Skipping binary downloaded, installed k3s matches hash
[INFO] Skipping installation of SELinux RPM
[INFO] Skipping /usr/local/bin/kubectl symlink to k3s, already exists
[INFO] Skipping /usr/local/bin/crictl symlink to k3s, already exists
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, already exists
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service â /etc/systemd/system/k3s-agent.service.
[INFO] Host iptables-save/iptables-restore tools not found
[INFO] Host ip6tables-save/ip6tables-restore tools not found
[INFO] systemd: Starting k3s-agent
Vérification du cluster
kubectl cluster-info
Vagrant.configure("2") do |config|
config.ssh.insert_key = true
(1..Nbr-Workers).each do |i|
config.vm.define "worker-#{i}" do |worker|
worker.vm.box = IMAGE
worker.vm.network "private_network", ip: "#{RESEAU}.#{i + 10}"
worker.vm.hostname = "worker-#{i}"
end
end
end
cp -r inventory/sample inventory/vagrant-cluster
→on obtient le fichier ‘inventory/vagrant-cluster/hosts.ini’
[nodes]
worker-1 ansible_host=localhost ansible_ssh_port=221 ansible_user=vagrant
worker-2 ansible_host=localhost ansible_ssh_port=222 ansible_user=vagrant
[k3s_cluster:children]
master
nodes
Il faut ajuster les variables situées dans le fichier ‘all.yaml’, situé sous ‘group_vars’
k3s_version: v1.20.6+k3s1
ansible_user: vagrant
systemd_dir: /etc/systemd/system
master_ip: 10.0.0.10
extra_server_args: "--flannel-iface eth0"
extra_agent_args: "--flannel-iface eth0"
Création des paires de clés SSH et ajout les clés privées des machines
eval $(ssh-agent)
ssh-add .vagrant/machines/master/virtualbox/private_key
ssh-add .vagrant/machines/worker-1/virtualbox/private_key
Lancement du déploiement
ansible-playbook site.yml -i inventory/vagrant-cluster/hosts.ini
L’installation (community edition, pour la version gratuite) se fait simplement par le déploiement du fichier yaml
Déploiement du pod
kubectl apply -n portainer -f portainer.yaml
Configuration initiale
On se connecte à l’interface WEB de portainer
L’interface initiale oblige à créer un utilisateur avec un mot de passe d’au moins 12 caractères.
Attention
Si on attend plus de 3 minutes avant de valider la configuration, une sécurité bloque l’accès au pod
Il faudra supprimer ce pod, un nouveau pod sera généré, sur lequel on pourra alors se connecter
Procédure :
• kubectl get pods -A ← Pour voir le nom du pod
• kubectl delete pod nom_du_pod -n portainer ← Pour supprimer le pod
Il s’agit de créer un ‘déployment’ qui permet de mettre en place une application sur le
cluster et de la rendre accessible
• kubectl create deployment srv-1 --image nginx
→ Créer une instance nommée ‘srv-1’
➔ Les pods sont vues comme des machines à l’intérieur desquelles les Containers sont vus comme des
applications.
Bien que Kubernetes assure lui-même la prise en charge du réseau, il s’agit d’une gestion basique.
Il est préférable d’utiliser un composant tiers utilisant l’API ‘CNI’ (Container Network Interface).
Il existe un nombre important de type de plugin CNI, mais les deux principaux, sont :
• Le plugin Network qui permet de raccorder les pods au réseau
• Le plugin IPAM (IP Address Management), responsable de l’allocation des adresses IP
L’extension ‘Calico’ est un composant additionnel pour Kubernetes très répandu, qui fournit à la fois le
plugin réseau et le plugin IPAM.
Une application mise en ligne est représentée sous forme d’un service, le composant ‘kube-proxy’ équilibre
la charge de connexion sur l’ensemble des pods où se trouve l’application, en exposant une adresse IP
Virtuelle.
Les groupes de pods sont généralement définis à l'aide d'un sélecteur de libellé.
Kubernetes DNS
Chaque cluster Kubernetes fournit un service DNS afin de publier chaque pod et chaque service
Une liste de recherche DNS incluant l’espace de noms du pod et le domaine par défaut du cluster.
Plusieurs normes ont été proposées pour régir la mise en réseau de conteneurs, notamment le modèle de
réseau de conteneurs (CNM) et l'interface de réseau de conteneurs (CNI).
CNI permet de configurer dynamiquement les ressources réseau et notamment, d’appliquer des stratégies
d’accès réseau, nommées ‘Network Policies’.
Une ‘Network’Policy’ permet de définir des règles de pare-feu pour les pods, agissant en entrée (ingress)
comme en sortie (egress).
Les stratégies réseau s’appuient sur les labels pour sélectionner les pods sur lesquels les règles vont
s’appliquer.
➔ C’est le plugin réseau CNI qui implémente ces stratégies.
Kubernetes ingress
Ingress s'appuie sur les services Kubernetes pour assurer l'équilibrage de charge au niveau de la couche
d'application, en mappant les requêtes HTTP et HTTPS avec des domaines ou des URL particuliers vers les
services Kubernetes.
Ingress permet d’exposer plusieurs sites HTTP/HTTPS via une seule et même adresse IP ou en les associant
à un nom de domaine distinct et de les exposer grâce à un service de type ‘reverse-proxy’.
Kubernetes egress
Contrairement au trafic entrant, il n'existe pas de ressource Kubernetes Egress établie par défaut
Le service ‘ClusterIP’
Le service ClusterIP est le service d’accès IP par défaut de Kunernetes.
Il permet aux pods d’un cluster d’accéder aux différents services, mais ne rend pas possible l’accès depuis
l’extérieur.
Pour accéder à un service HTTP il est possible de démarrer et utiliser le service proxy propre à Kunernetes
• kubectl proxy --port=8080
➔ Comme cette méthode s’appuie sur kubectl pour authentifier une demande de connexion, elle ne doit
pas être utilisée en dehors d’un labo ou de procédures de test.
Le service ‘NodePort’
Le service ‘NodePort’ est le moyen le plus primitif d’acheminement du trafic externe sur un service cloud
interne.
• Ce service affecte un port spécifique par service, par node
• Les n° de ports sont automatiquement choisis dans la plage ‘30000 - 32767’
Avec un service exposé par un ‘LoadBalancer’, il n’y a aucune restriction d’accès depuis l’extérieur, ce qui
permet de rendre accessible tout type de service.
Le service ‘Ingress’
Un service Ingress offre de multiples possibilités de configuration pour permettre l’accès aux services depuis
l’extérieur.
Ce service s’appuie sur l’utilisation d’un ‘Ingress Controller’ qui est un service de type reverse-proxy
Il existe plusieurs ‘Ingress Controller’, avec pour chacun, plusieurs ‘plugins’, permettant de couvrir
différents besoins (certificats SSL, ….)
➔ Avec Ingrees, il est possible d’exposer de multiples services sous une seule et même adresse IP
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
backend:
serviceName: other
servicePort: 8080
rules:
- host: foo.mydomain.com
http:
paths:
- backend:
serviceName: foo
servicePort: 8080
- host: mydomain.com
http:
paths:
- path: /bar/*
backend:
serviceName: bar
servicePort: 8080
Par défaut, lorsque l’on déploie une application, celle-ci n’est accessible depuis l’extérieur que si la
commande ‘kubectl port-forward’ est utilisée.
Les objets Ingress sont des ‘reverse-proxy’ utilisés pour faciliter l’accès à un service HTTP/HTTPS.
Un Ingress est un objet permettant de programmer le reverse proxy dans Kubernetes : il a besoin d’un
‘ingress controller’ installé sur le cluster agissant au niveau des protocoles HTTP/HTTPS (ports TCP
80/443)
L’ingress controller redirige les requêtes vers différents services (qui à leur tour redirigent vers différents
ports sur les pods), en fonction de l’URL.
➔ L’ingress controller Nginx est de loin le plus utilisé
Exemple
Création d’un fichier ‘ingress.yaml’, contenant :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http
spec:
rules:
- host: "ns.labo" Permet de définir une règle qui fera suivre les requêtes visant
http: ‘ns.labo/site1’ vers les pods groupés sous le nom
paths:
- path: /site du service ‘http-servers’, sur le port 8080
pathType: Prefix
backend:
service:
name: http-servers
port:
number: 8080
Pour rendre facilement un service HTTP/HTTPS accessible, on publie chaque application (site) sous forme
d’hôte virtuel (virtual host) que l’on associe à un nom DNS
Le mécanisme ‘nip.io’
Dans une règle Ingress, le champ ‘host’ permet de spécifier le nom de l’hôte virtuel.
Le champ host associé à une règle Ingress doit forcément être une entrée DNS et non une adresse IP.
Avec de type de déclaration, il est possible de passer une adresse constituée de l’adresse IP suivie par le nom
de domaine ‘nip.io’.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http
spec:
rules:
- host: "srv-1.192.168.100.250.nip.io"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http
port:
number: 8080
Un pod auquel une ‘NetworkPolicy’ sera appliqué, rejettera toutes les connexions qui ne sont pas autorisées
par cette dernière.
Création d’une stratégie (Network Policy) autorisant le trafic entrant sur le port TCP/3306 du pod ‘BDB’,
uniquement s’il provient du pod WEB
kind: pod
metadata: Création de la règle (fichier policy.yaml)
labels: apiVersion: networking.k8s.io/v1
role: http kind: NetworkPolicy
name: WEB metadata:
spec: name: test-network-policy
containers: namespace: default Sélectionne, grâce au label, les Pods destinataires à protéger
- image: nginx spec:
name: nginx podSelector:
matchLabels:
kubectl create -f deploy.yaml role: bdb
Défini le type de règle (Ingress ou Egress)
policyTypes:
- Ingress
ingress:
- from: Sélectionne, grâce au label,
- podSelector: les Pods sources filtrés par la règle
matchLabels:
role: http Indique les ports filtrés par la règle
ports:
- protocol: TCP
port: 3306
Application de la règle
kubectl create -f policy.yaml
Création d'objets
✗ Les manifests Kubernetes peuvent être définis en YAML (.yml ou .yaml) ou JSON (.json)
✗ La commande ‘kubectl apply’ permet de créer et mettre à jour des ressources dans un cluster
Affiche la version des labels de tous les pods ayant un label app=cassandra
kubectl get pods --selector=app=cassandra -o jsonpath='{.items[*].metadata.labels.version}'
kubectl set image deployment/frontend www=image:v2 Rolling update du conteneur ‘www’ du déploiement ‘frontend’
kubectl rollout history deployment/frontend Vérifie l'historique de déploiements incluant la révision
kubectl rollout undo deployment/frontend Rollback du déploiement précédent
kubectl rollout undo deployment/frontend --to-revision=2 Rollback à une version spécifique
kubectl rollout status -w deployment/frontend Écoute le status du rolling update du déploiement’frontend’
kubectl rollout restart deployment/frontend Rolling restart du déploiement ‘frontend’
cat pod.json | kubectl replace -f - Remplace un pod, en utilisant un JSON passé en entrée standard
Crée un service pour un nginx répliqué, qui rend le service sur le port 80 et se connecte aux conteneurs sur le port 8000
kubectl expose rc nginx --port=80 --target-port=8000
Édition de ressources
Édite n'importe quelle ressource de l'API dans un éditeur
Suppression de ressources
kubectl delete -f ./pod.json Supprime un pod en utilisant ‘pod.json’
kubectl delete pod,service foo bar Supprime les pods et services ‘foo’ et ‘bar’
kubectl delete pods,services -l name=myLabel Supprime les pods et services ayant le label ‘myLabel’
kubectl -n my-ns delete pod,svc --all Supprime tous les pods et services du namespace ‘my-ns’
Types de ressources
kubectl api-resources Liste tous les types de ressources pris en charge avec leurs noms courts
kubectl api-resources --namespaced=true Toutes les ressources cantonnées à un namespace
kubectl api-resources --namespaced=false Toutes les ressources non cantonnées à un namespace
kubectl api-resources -o name Toutes les ressources avec un affichage simple
kubectl api-resources -o wide Toutes les ressources avec un affichage étendu
kubectl api-resources --verbs=list,get Toutes les ressources prenant en charge les verbes de requête ‘list’ et ‘get’
kubectl api-resources --api-group=extensions Toutes les ressources dans le groupe d'API ‘extensions’
Tous les champs dans metadata quel que soit leur nom
kubectl get pods -A -o=custom-columns='DATA:metadata.*'