# Helm - Créer sa première chart
## Prérequis
* Créer le cluster kind en ouvrant le port 80 et 443
```bash=
cat <<EOF | kind create cluster --config=
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
```
* Installer le Ingress Controller
```bash=
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
```
## La chart devra déployer un serveur Nginx
* Créer l'arborescence
```bash=
helm create tp2
> Creating tp2
```
```
└── tp2
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
```
## Les déploiements, services, ingress, … seront donc créés par cette chart. L’image, tag, ports, type de service doivent être modifiables à l’aide d’un fichier values.yaml.
* Supprimer le fichier serviceaccount.yaml qui ne sera pas utilisé pour ce tp
* Modifier le fichier de déploiement pour supprimer les paramètres qui ne sont pas utilisés
* Les fichiers services et ingress n'ont pas besoin d'être modifiés
## 2 fichiers values-(prod / dev).yaml devront être créés. Le fichier prod déploiera un serveur nginx en version 1.22 avec comme domaine srv-prod.test dans le namespace production. Le fichier dev déploiera un serveur nginx en version 1.23 avec comme domaine srv-dev.test dans le namespace development.
* Créer 2 fichiers `values-dev.yaml` et `values-prod.yaml`
```
vim tp2/values-dev.yaml
vim tp2/values-prod.yaml
```
* Parametrer les 2 fichiers de façon à ce que les paramètres surchargent la configuration par défaut du values.yaml.
* Ajouter le tag pour chaque environnement
* Ajouter le host srv-prod.test et srv-dev.test
* Se déplacer dans le dossier tp2 et déployer les 2 environnements nginx
* Préciser les fichiers : values-prod.yaml / values-dev.yaml
* Préciser le repository tp2 avec '.'
* Donner un nom au déploiement : nginx-prod / nginx-dev
* Indiquer le nom du namespace : production / development
* L'option create-namespace permettra de créer le namespace s'il n'a pas été créé au préalable.
```bash=
$ helm install -f values-prod.yaml nginx-prod . -n production --create-namespace
NAME: nginx-prod
LAST DEPLOYED: Thu Jan 26 13:40:58 2023
NAMESPACE: production
STATUS: deployed
REVISION: 1
$ kubectl get pods -n development
NAME READY STATUS RESTARTS AGE
nginx-dev-my-nginx-5f69c5b8d5-5kp22 1/1 Running 0 3m42s
$ helm install -f values-dev.yaml nginx-dev . -n development --create-namespace
NAME: nginx-dev
LAST DEPLOYED: Thu Jan 26 13:41:20 2023
NAMESPACE: development
STATUS: deployed
REVISION: 1
```
* Vérifier que les pods fonctionnent
```bash=
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
development nginx-dev-tp2-5bf49dc6cc-96687 1/1 Running 0 23m
production nginx-prod-tp2-7d84f97756-j6tvd 1/1 Running 0 23m
```
* Modifier le fichier /etc/hosts
```bash=
vim /etc/hosts
192.168.233.132 srv-prod.test
192.168.233.132 srv-dev.test
```
* Sur Windows, modifier également le fichiers hosts
```bash=
192.168.233.132 srv-prod.test
192.168.233.132 srv-dev.test
```
* Accéder à la page nginx depuis un navigateur
