En tant que Cloud Engineer, je cherchais un outil pour étudier Kubernetes localement. Il en existe déjà quelques uns, mais Kind (Kubernetes In Docker) s’est retrouvé être mon choix de prédilection. Vous avez juste besoin de Docker et vous pouvez gérer une configuration Kubernetes très facilement.
Installation de Kind
Installation avec Brew :
brew install kind
# ceci fonctionne avec Linux, Mac, Windows (avec Docker Desktop et WSL2)
Ensuite vous pouvez créer un cluster :
kind create cluster -n kind1 [--config conf.yml]
kind create cluster -n kind2
# Récupérer la liste des clusters
kind get clusters
# Sélectionner le cluster que vous désirez, en sélectionnant le bon contexte
k config get-contexts
k config use-context kind-kind1
# Afficher les informations disponibles pour le contexte courant
k cluster-info
# Exporter les logs concernant le cluster
kind export logs -n kind1
# Vous pouvez supprimer les clusters, quand vous voulez
kind delete cluster -n kind1
kind delete cluster -n kind2
Cela prend vraiment quelques secondes pour la création, compteur à l’appui :
Quelques configurations pour Kind
Kind offre la possibilité de faire de la configuration sur les clusters que vous créez.
Il fonctionne en se basant sur KubeADM, vous pouvez donc faire de la configuration spécifique en rapport.
Nous allons explorer quelques cas d’usage plutôt simples.
Exposition de Nginx, avec un service NodePort
Créer le cluster :
cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30000
hostPort: 30000
protocol: TCP
EOF
Créer le deployment et le service :
k create deployment nginx --image=nginx --port=80
k create service nodeport nginx --tcp=80:80 --node-port=30000
Maintenant, vous pouvez accéder au service exposé :
curl localhost:30000
Un cluster avec un master et un worker
Créer le cluster :
cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
EOF
Un cluster avec un Nginx controller
Créer le cluster :
cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 8080
protocol: TCP
- containerPort: 443
hostPort: 44300
protocol: TCP
EOF
Créer les ressources :
# install the Nginx ingress
k apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Installer les ressources
cat <<EOF | k apply -f -
kind: Pod
apiVersion: v1
metadata:
name: test-app
labels:
app: test-app
spec:
containers:
- name: test-app
image: hashicorp/http-echo:latest
args:
- "-text=The test has been successful!"
---
kind: Service
apiVersion: v1
metadata:
name: test-service
spec:
selector:
app: test-app
ports:
- port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/app"
backend:
service:
name: test-service
port:
number: 5678
EOF
# forwarder le port
k port-forward service/test-service 5678:5678
Maintenant vous pouvez accéder au service exposé :
curl localhost:5678
Toute cette configuration est disponible sur ce repository, j’espère que vous aurez autant de plaisir que moi en utilisant ce magnifique outil !