# TP2 Kubernetes
Déploiement du cluster kind en exposant le 80 & 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
```
Puis installation de nginx ingress controller
```bash
ndiruggiero@vm1:~$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
ndiruggiero@vm1:~$ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
pod/ingress-nginx-controller-6bccc5966-kbzjh condition met
```
Une fois l'ingress Nginx controller installer nous pouvons commencer.
## Build et push les images docker
D'abord nous allons créer un dockerfile avec un index.html afin d'afficher "Tacos", "Burgers" ou "Pizzas"
Exemple de Dockerfile
```dockerfile
FROM nginx:1.16.1
COPY index.html /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]
```
Exemple Index.html
```htmlmixed
<html>
<body>
<h1>Pizzas</h1>
</body>
</html>
```
Ensuite on vas build notre images et la push sur docker hub.
```bash
#Connexion a son compte docker
docker login -u useraname
#Build l'image docker
docker build -t pizzas-image .
#Tag l'image docker
docker tag pizzas-image:latest chiroxo/pizzas-image:latest
#Push l'image docker
docker push chiroxo/pizzas-image
```
Il faut faire cette procédure pour chaque image que l'on souhaite push.
## Fichiers yaml pour déployer les images et mettre ne places des services asociés ainsi que l'ingress
Exemple de fichier yaml pour déployer les pizzas
```yaml
---
apiVersion: v1
kind: Service
metadata:
name: pizzas-services
spec:
selector:
app: pizzas
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pizza-deployment
spec:
replicas: 1
selector:
matchLabels:
app: pizzas
template:
metadata:
labels:
app: pizzas
spec:
containers:
- name: pizzas
image: chiroxo/pizzas-image
ports:
- containerPort: 80
```
Exemple de l'ingress
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: mypizza.eatsout.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: pizzas-services
port:
number: 80
- host: burgerandtacos.eatsout.com
http:
paths:
- pathType: Prefix
path: "/burgers"
backend:
service:
name: burgers-services
port:
number: 80
- pathType: Prefix
path: "/tacos"
backend:
service:
name: tacos-services
port:
number: 80
```
On applys nos fichiers via la commande kubectl apply et enjoy :)
Pensez à modifier votre fichier hosts afin de rajouter les hosts.
## Question 6
On augmente le nombre de ReplicaSet à trois, on apply donc le fichier yaml et donc trois pods seront déployer au total pour tacos.
Les pods seront automatiquement gérer et reconnu par le services tacos-services grâce aux labels que nous avons défini afin de match les critères.
On peut également utiliser la commande kubectl scale afin de modifier le nombre de pods déployer pour un déploiement
Voir si on a bien nos nouveau pods déployer.
```bash
kubectl get pods --namespace=default
NAME READY STATUS RESTARTS AGE
burgers-deployment-766bd45647-xgpjt 1/1 Running 0 55m
pizza-deployment-647d87b754-lnmtr 1/1 Running 0 55m
tacos-deployment-5557c7f44c-nvk44 1/1 Running 0 28m
tacos-deployment-5557c7f44c-p2fbp 1/1 Running 0 28m
tacos-deployment-5557c7f44c-zb55d 1/1 Running 0 55m
```
Voir les logs du déploements afin de savoir quel pods réponds aux requêtes.
```bash
kubectl logs -f deploy/tacos-deployment
```