# TP01 : Introduction à Kubernetes
## Installation Minikube & kubectl
* Minikube
```bash=
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
```
* Kubectl :
```bash
minikube kubectl -- get po -A
```
## Pod Nginx
### Déployer un pod nginx
La commande qui permet de pouvoir déployer un pod nginx est :
```bash
kubectl run my-pod-nginx --image=nginx
```
Résultat :
```bash=
jere@LAPTOP-ADMIN:~/cours-cloud/conteneur-cours$ kubectl run my-pod-nginx --image=nginx
pod/my-pod-nginx created
```
### A l’aide de la commande kubectl port-forward et d’un navigateur accéder à la page par défaut de votre pod Nginx
```bash
kubectl port-forward my-pod-nginx 80:8080
```
Résultat :
```bash=
jere@LAPTOP-ADMIN:~/cours-cloud/conteneur-cours$ kubectl port-forward my-pod-nginx 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
```
## 3 - Connexion entre plusieurs Pods
### 3 - a : A l’image du TP 1 sur Docker (question 7 et 8), héberger un Pod phpmyadmin et mysql, cette fois-ci en utilisant minikube
#### Partie phpmyadmin
Fichier configuration de phpmyadmin:
```bash=
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpmyadmin-deployment
spec:
replicas: 1
selector:
matchLabels:
app: phpmyadmin
template:
metadata:
labels:
app: phpmyadmin
spec:
containers:
- name: phpmyadmin
image: phpmyadmin/phpmyadmin
ports:
- containerPort: 80
env:
- name: PMA_HOST
value: mysql
- name: MYSQL_ROOT_PASSWORD
value: P@ssword
- name: PMA_PORT
value: "3306"
```
Apply la configuration de phpmyadmin :
```bash=
jere@LAPTOP-ADMIN:~/cours-cloud/conteneur-cours/repo-tp-conteneurisation/02-KUBERNETES/tp01/phpmyadmin$ kubectl apply -f conf-phpmyadmin.yml
deployment.apps/phpmyadmin-deployment created
service/phpmyadmin-service created
```
#### Partie MySQL
Fichier de configuration de MySQL :
```bash=
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: P@ssword
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
```
Apply la configuration de mysql :
```bash=
jere@LAPTOP-ADMIN:~/cours-cloud/conteneur-cours/repo-tp-conteneurisation/02-KUBERNETES/tp01/mysql$ kubectl apply -f conf-mysql.yml
deployment.apps/mysql configured
service/mysql unchanged
```
### 3 - b : Créer un service associé au Pod mysql
Dasn mon cas, j'ai 2 fichiers :
* 1 fichier conf MYSQL
* 1 fichier conf phpmyadmin
Voici le service associé au pod MySQL :
```bash=
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
```
### 3 - c : Connecter phpmyadmin avec le Service mysql et vérifier que vous pouvez administrer cette base de données
Service qui permet de connecter phpmyadmin avec le service MySQL :
```bash=
---
apiVersion: v1
kind: Service
metadata:
name: phpmyadmin-service
spec:
type: NodePort
selector:
app: phpmyadmin
ports:
- protocol: TCP
port: 80
targetPort: 80
```
Puis apply via la commande :
> kubectl apply -f conf-phpmyadmin.yml
### 3 - d : Avec la commande kubectl-port forward, vérifier que phpmyadmin arrive à contacter et administrer votre base de données mysql
Commande port-forward sur le port 8080 du fichier conf de phpmyadmin pour pouvoir acceder à l'interface graphique :
```bash=
jere@LAPTOP-ADMIN:~/cours-cloud/conteneur-cours/repo-tp-conteneurisation/02-KUBERNETES/tp01/phpmyadmin$ kubectl port-forward phpmyadmin-deployment-54f84d8f8f-24kms 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
```

### 3 - e : Ajouter un Ingress pour accéder à phpmyadmin sans utiliser la commande kubectl port-forward