Kustomize est un outil Kubernetes qui vous permet de personnaliser les fichiers YAML bruts de vos ressources k8s d'origine à des fins multiples (ex: différents environnements, différentes variables/répliques/ressources informatiques, etc ...), en laissant les fichiers YAML d'origines intacts et utilisables tels quels.
L'objectif de ce Lab 11, c'est d'utiliser Kustomize pour générer un fichier de configuration avec des paramètres à partir de plusieurs fichiers manisfestes sans les modifier.
https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/
- Création de l'environnement de démonstration
Déploiement du "resource group":
az group create \
--location "eastus2" \
--resource-group "RG-AKS-Lab-11"
Déploiement d'un virtual network:
az network vnet create \
--resource-group "RG-AKS-Lab-11" \
--name AKSvnet \
--location "eastus2" \
--address-prefixes 10.0.0.0/8
Déploiement du subnet:
SUBNET_ID=$(az network vnet subnet create \
--resource-group "RG-AKS-Lab-11" \
--vnet-name AKSvnet \
--name subnetAKS \
--address-prefixes 10.240.0.0/16 \
--query id \
--output tsv)
Création d'une "Managed Identity":
IDENTITY_ID=$(az identity create \
--resource-group "RG-AKS-Lab-11" \
--name idAks \
--location "eastus2" \
--query id \
--output tsv)
Création du "cluster AKS":
az aks create \
--resource-group "RG-AKS-Lab-11" \
--name "AKS-Lab-11" \
--location "eastus2" \
--network-plugin azure \
--generate-ssh-keys \
--node-count 2 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--vnet-subnet-id $SUBNET_ID \
--enable-managed-identity \
--assign-identity $IDENTITY_ID \
--yes
- Sans Kustomize
Regarder les manifestes:
- ./Manifest/base/deployment.yaml
- ./Manifest/base/service.yaml
- ./Manifest/base/namespace.yaml
Tout le lab se fera depuis ./Manifest
Création des ressources:
az aks get-credentials --resource-group RG-AKS-Lab-11 --name AKS-Lab-11
kubectl apply -f base/
(Vous serez peut être obligé de lancer deux fois la commande)
Vérifications:
kubectl get deploy --namespace test-kustomize
NAME READY UP-TO-DATE AVAILABLE AGE
http-test-kustomize 1/1 1 1 13m
kubectl get service --namespace test-kustomize
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-test-kustomize LoadBalancer 10.0.6.249 20.22.64.91 80:32130/TCP 60s
Test:
curl htt://<EXTERNAL-IP>
Ok on supprime:
kubectl delete -f base/
deployment.apps "http-test-kustomize" deleted
namespace "test-kustomize" deleted
service "http-test-kustomize" deleted
- Avec Kustomize
Modifier les fichiersdeployment.yaml
etservice.yaml
Pour le fichierdeployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-test-kustomize
spec:
template:
spec:
containers:
- name: http-test-kustomize
image: nginx
ports:
- name: http
containerPort: 80
protocol: TCP
Pour le fichier service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: http-test-kustomize
spec:
type: LoadBalancer
ports:
- name: http
port: 80
Les fichiers ne seront jamais modifiés, on applique simplement une personnalisation au-dessus d'eux grâce à l'outil kustomize pour créer de nouvelles définitions des ressources.
Créez un fichier kustomization.yaml
au même niveau que service.yaml
et deployment.yaml
kustomization.yaml
:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: test-kustomize
commonLabels:
app: http-test-kustomize
resources:
- service.yaml
- deployment.yaml
- namespace.yaml
On doit avoir une arborescence:
|__ base
|__ deployment.yaml
|__ namespace.yaml
|__ service.yaml
|__ kustomization.yaml
Vérification du YAML qui sera généré:
kubectl kustomize ./base
Les Labels,Selectors et le namespace ont été générés ...
Application de la configuration:
kubectl apply -k base
Test:
kubectl get service --namespace test-kustomize
curl htt://<EXTERNAL-IP>
on supprime :
kubectl delete -k base
- Pipeline avec Kustomize
A partir d'ici on est dans GitHub, on modifie dans le repo
Modifier les fichiersdeployment.yaml
etservice.yaml
(comme précédement)
Modifiez le fichierkustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: mon-namespace
commonLabels:
app: mon-app
resources:
- service.yaml
- deployment.yaml
- namespace.yaml
Allez dans le workflow ./github/workflows/kustomize.yaml
Observer le workflow
Modifiez le et executez le
- Fin du Lab
az group delete --name RG-AKS-Lab-11