Repartir d’un fichier existant :
kubectl get deployment my-cool-app -o yaml --export
Création de fichiers de templates :
kubectl run nginx --image=nginx -o yaml --dry-run
kubectl create service nodeport demo --tcp 80 -o yaml --dry-run
Supprimer un pod qui ne veut pas se supprimer normalement :
kubectl delete --force --grace-period=0 pod my-blocked-pod
kubectl run nginx --image=nginx --port=80 --replicas=3
kubectl expose deployment nginx --type NodePort
curl "$(kubectl get svc nginx -o jsonpath='{ .spec.clusterIP }')"
Il faut créer un fichier /etc/kubernetes/cloud_config :
[Global]
auth-url=http://openstack.example:35357/v3
username=kubernetes
password=password
region=RegionOne
tenant-id=kubernetes-tenant-id
domain-name=Default
Apports :
kube-router permet une gestion unifié du réseau dans Kubernetes :
Le déploiement de kube-router peut se faire de plusieurs manières. Voici les options pour le lancer en mode agent en activant le peering BGP :
# kube-router \
--master=http://127.0.0.1:8080/ \
--run-firewall=true \
--run-service-proxy=true \
--run-router=true \
--cluster-asn=65001 \
--peer-router-ips=192.168.8.11 \
--peer-router-asns=64512 \
--advertise-external-ip \
--advertise-cluster-ip
Deux options doivent être ajoutées au controller-manager pour fonctionner :
--allocate-node-cidrs=true--cluster-cidr=10.1.0.0/16kube-router utilise le CNI bridge pour fonctionner. Il faut que le fichier /etc/cni/net.d/10-kuberouter.conf soit présent sur la machine :
# cat > /etc/cni/net.d/10-kuberouter.conf <<EOF
{
"name":"mynet",
"type":"bridge",
"bridge":"kube-bridge",
"isDefaultGateway":true,
"ipam": {
"type":"host-local"
}
}
EOF
Vault permet de s’authentifier grâce au service account de Kubernetes.
Création d’un service account :
$ kubectl create serviceaccount vault-token-reviewer
$ kubectl get sa vault-token-reviewer -o jsonpath='{ .secrets[0].name }'
vault-token-reviewer-token-xxxxx
Récupérer les informations d’authentification :
$ kubectl get secret -o jsonpath='{ .data.token }' vault-token-reviewer-token-xxxxx | base64 -d > token
$ kubectl get secret -o jsonpath='{ .data.ca\.crt }' vault-token-reviewer-token-xxxxx | base64 -d > ca.crt
Configuration de vault :
$ vault auth enable kubernetes
$ vault write auth/kubernetes/config \
token_reviewer_jwt=@token \
kubernetes_host=https://192.168.99.100:8443 \
kubernetes_ca_cert=@ca.crt
Création d’un compte de démo :
$ export VAULT_ADDR=http://127.0.0.1:8200
$ kubectl create serviceaccount vault-demo
$ vault write auth/kubernetes/role/demo \
bound_service_account_names=vault-demo \
bound_service_account_namespaces=default \
policies=default \
ttl=1h
$ vault write auth/kubernetes/login role=demo jwt=$SERVICE_ACCOUNT_TOKEN
Création du StorageClass :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
On crée un dossier sur l’hôte qu’on associe à un PV :
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-001
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/kubernetes/pv-001
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values: [node-1]
On crée un PVC associé au PV :
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage
Dashboard :
Stockage :
Réseau :
Monitoring :
Authentification :
Opérateurs :
CI/CD :