Last active
February 28, 2025 22:26
-
-
Save srpiroliro/4d5a666cb7e6618e5ad2b968bc7d623a to your computer and use it in GitHub Desktop.
Revisions
-
srpiroliro revised this gist
Feb 28, 2025 . 2 changed files with 2 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ Rems Nalivaiko <[email protected]> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -40,4 +40,4 @@ Aquesta solució mínima configura un servidor NFS i l'utilitza com a emmagatzem - Volum Persistent NFS amb `persistentVolumeReclaimPolicy: Retain` (conserva les dades fins i tot si s'eliminen els PVC) - Múltiples pods de Nginx poden accedir al mateix recurs compartit NFS (ReadWriteMany) - El PV proporciona 1Gi mentre que el PVC sol·licita 100Mi - Nginx serveix contingut directament des del recurs compartit NFS -
srpiroliro revised this gist
Feb 28, 2025 . 9 changed files with 185 additions and 0 deletions.There are no files selected for viewing
File renamed without changes.File renamed without changes.File renamed without changes.File renamed without changes.This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,26 @@ apiVersion: apps/v1 kind: Deployment metadata: name: nginx-nfs spec: replicas: 2 # Creant múltiples pods per demostrar l'accés compartit selector: matchLabels: app: nginx-nfs template: metadata: labels: app: nginx-nfs spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nfs-volume mountPath: /usr/share/nginx/html # Directori arrel per defecte per a Nginx volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,11 @@ apiVersion: v1 kind: Service metadata: name: nginx-nfs-service spec: selector: app: nginx-nfs ports: - port: 80 targetPort: 80 type: NodePort # Fa que el servei sigui accessible des de fora del clúster This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,44 @@ #!/bin/bash # Script de desplegament senzill per a Nginx amb NFS a Kubernetes echo "=================================" echo "DESPLEGAMENT DE NGINX AMB NFS" echo "=================================" # Comprovar si s'ha configurat la IP del servidor NFS if grep -q "SERVER_IP" nfs-pv.yaml; then echo "ERROR: Has d'actualitzar nfs-pv.yaml amb la IP del teu servidor NFS primer!" echo "Edita nfs-pv.yaml i substitueix SERVER_IP amb la IP real del teu servidor NFS." exit 1 fi echo "1. Creant el Volum Persistent (PV)" kubectl apply -f nfs-pv.yaml echo "Esperant a que es creï el PV..." sleep 3 echo "2. Creant la Reclamació de Volum Persistent (PVC)" kubectl apply -f nfs-pvc.yaml echo "Esperant a que el PVC es vinculi..." sleep 5 echo "3. Comprovant l'estat del PV i PVC:" kubectl get pv kubectl get pvc echo "4. Creant el Desplegament de Nginx" kubectl apply -f nginx-deployment.yaml echo "Esperant a que el desplegament estigui llest..." sleep 10 echo "5. Creant el Servei de Nginx" kubectl apply -f nginx-service.yaml echo "Esperant a que el servei estigui disponible..." sleep 5 echo "6. Desplegament completat!" kubectl get pods kubectl get pv,pvc kubectl get services nginx-nfs-service echo "Pots executar ./test.sh per verificar la configuració." This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,55 @@ #!/bin/bash # Script per provar el desplegament de Nginx amb suport NFS echo "=====================================" echo "COMPROVACIÓ DEL DESPLEGAMENT DE NGINX AMB NFS" echo "=====================================" # Obtenir el NodePort assignat al nostre servei NODE_PORT=$(kubectl get service nginx-nfs-service -o jsonpath='{.spec.ports[0].nodePort}') NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}') echo "El servei Nginx està exposat al NodePort: $NODE_PORT" echo "Provant l'accés mitjançant curl..." # Prova amb curl curl http://$NODE_IP:$NODE_PORT echo -e "\n\nLlistant tots els pods per verificar el desplegament:" kubectl get pods echo -e "\nComprovant l'estat del PV i PVC:" kubectl get pv kubectl get pvc # Comprovar els punts de muntatge als pods echo -e "\nComprovant els punts de muntatge als pods:" FIRST_POD=$(kubectl get pods -l app=nginx-nfs -o jsonpath='{.items[0].metadata.name}') echo "Comprovant els punts de muntatge al pod $FIRST_POD:" kubectl exec -it $FIRST_POD -- df -h | grep nfs echo -e "\nComprovant el contingut de /usr/share/nginx/html al pod:" kubectl exec -it $FIRST_POD -- ls -la /usr/share/nginx/html echo -e "\nCreant un fitxer de prova per demostrar l'emmagatzematge compartit:" TEST_CONTENT="Contingut de prova creat el $(date)" kubectl exec -it $FIRST_POD -- bash -c "echo '$TEST_CONTENT' > /usr/share/nginx/html/test-file.html" echo -e "\nVerificant que el fitxer de prova existeix al pod:" kubectl exec -it $FIRST_POD -- ls -la /usr/share/nginx/html echo -e "\nVerificant el contingut a través de Nginx:" curl http://$NODE_IP:$NODE_PORT/test-file.html echo -e "\nComprovant el fitxer de prova al segon pod:" SECOND_POD=$(kubectl get pods -l app=nginx-nfs -o jsonpath='{.items[1].metadata.name}') echo "Contingut al segon pod $SECOND_POD:" kubectl exec -it $SECOND_POD -- cat /usr/share/nginx/html/test-file.html echo -e "\nProva completada. Per confirmar que tot funciona correctament, verifica que:" echo "1. Tots els pods estan en estat Running" echo "2. El PV mostra una capacitat d'1Gi i estat Bound" echo "3. El PVC mostra una capacitat de 100Mi i estat Bound" echo "4. El volum NFS està muntat als pods (comprova la sortida de df -h)" echo "5. El mateix fitxer de prova és accessible des de múltiples pods" echo "6. El contingut és accessible via Nginx a través del NodePort" This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,49 @@ #!/bin/bash # Script per provar l'accés a NFS des de múltiples pods de Nginx echo "=====================================" echo "PROVA AVANÇADA DE NFS AMB MÚLTIPLES PODS" echo "=====================================" # Crear un fitxer basat en una marca de temps a l'NFS compartit TIMESTAMP=$(date +%s) TEST_CONTENT="Test file created at $(date). Random ID: $TIMESTAMP" # Obtenir el nom del primer pod FIRST_POD=$(kubectl get pods -l app=nginx-nfs -o jsonpath='{.items[0].metadata.name}') # Crear el fitxer de prova des del primer pod echo "Creant un fitxer de prova únic des del pod $FIRST_POD..." kubectl exec -it $FIRST_POD -- bash -c "echo '$TEST_CONTENT' > /usr/share/nginx/html/test-$TIMESTAMP.html" # Obtenir el NodePort NODE_PORT=$(kubectl get service nginx-nfs-service -o jsonpath='{.spec.ports[0].nodePort}') NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}') # Provar l'accés des de múltiples pods escalant el desplegament echo "Escalant el desplegament a 4 rèpliques per provar múltiples contenidors..." kubectl scale deployment nginx-nfs --replicas=4 sleep 10 # Obtenir tots els pods PODS=$(kubectl get pods -l app=nginx-nfs -o jsonpath='{.items[*].metadata.name}') echo -e "\nVerificant que tots els pods poden veure el mateix fitxer:" for POD in $PODS; do echo -e "\nPod: $POD" kubectl exec -it $POD -- ls -l /usr/share/nginx/html/test-$TIMESTAMP.html done # Accedir al fitxer a través del servei diverses vegades echo -e "\nAccedint al fitxer a través de diferents pods mitjançant el Servei:" for i in {1..10}; do echo -e "\nPetició $i:" curl -s http://$NODE_IP:$NODE_PORT/test-$TIMESTAMP.html echo "" done echo -e "\nProva completada. Tots els contenidors Nginx mostren el mateix contingut NFS." # Tornar al nombre original de rèpliques (2) echo "Tornant al nombre original de rèpliques..." kubectl scale deployment nginx-nfs --replicas=2 -
srpiroliro created this gist
Feb 28, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,43 @@ # Emmagatzematge de Kubernetes amb NFS i Nginx Aquesta solució mínima configura un servidor NFS i l'utilitza com a emmagatzematge persistent a Kubernetes amb pods de Nginx. ## Fitxers Inclosos - `setup-nfs-server.sh` - Script per configurar el servidor NFS - `nfs-pv.yaml` - Definició del Volum Persistent (1Gi amb ReadWriteMany i política Retain) - `nfs-pvc.yaml` - Reclamació de Volum Persistent (100Mi) - `nginx-deployment.yaml` - Desplegament de Nginx que munta el volum NFS - `nginx-service.yaml` - Servei per exposar Nginx - `deploy.sh` - Script de desplegament amb una comanda - `test.sh` - Script per verificar la configuració ## Desplegament Pas a Pas 1. **Configura el servidor NFS** (al node de control): ```bash sudo ./setup-nfs-server.sh ``` 2. **Obté la IP del servidor NFS i actualitza `nfs-pv.yaml`**: ```bash ip addr show # Edita nfs-pv.yaml i substitueix SERVER_IP amb la IP real del teu servidor NFS ``` 3. **Desplega-ho tot** amb una sola comanda: ```bash ./deploy.sh ``` 4. **Prova el desplegament**: ```bash ./test.sh ``` ## Característiques Principals - Volum Persistent NFS amb `persistentVolumeReclaimPolicy: Retain` (conserva les dades fins i tot si s'eliminen els PVC) - Múltiples pods de Nginx poden accedir al mateix recurs compartit NFS (ReadWriteMany) - El PV proporciona 1Gi mentre que el PVC sol·licita 100Mi - Nginx serveix contingut directament des del recurs compartit NFS This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,16 @@ apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv labels: type: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany # Múltiples nodes poden llegir/escriure simultàniament persistentVolumeReclaimPolicy: Retain # Conserva les dades fins i tot quan s'elimina el PVC storageClassName: nfs-storage nfs: server: SERVER_IP # SUBSTITUEIX AMB LA IP DEL TEU SERVIDOR NFS path: /nfscontrol This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,14 @@ apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 100Mi # Sol·licitud de 100Mi com s'especifica selector: matchLabels: type: nfs This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,34 @@ #!/bin/bash echo "Setting up NFS server..." apt-get update apt-get install -y nfs-kernel-server mkdir -p /nfscontrol chown nobody:nogroup /nfscontrol chmod 755 /nfscontrol echo "<h1>Welcome to NFS-shared Nginx content!</h1>" > /nfscontrol/index.html echo "<p>This content is served from an NFS share mounted in multiple Nginx pods.</p>" >> /nfscontrol/index.html echo "<p>Last updated: $(date)</p>" >> /nfscontrol/index.html chown nobody:nogroup /nfscontrol/index.html chmod 644 /nfscontrol/index.html cat > /etc/exports << EOF /nfscontrol *(rw,sync,no_subtree_check,no_root_squash,insecure) EOF exportfs -ra systemctl restart nfs-kernel-server systemctl enable nfs-kernel-server echo "NFS Server setup completed. Directory /nfscontrol is now exported." echo "Your NFS server IP addresses:" ip addr show | grep "inet " | grep -v "127.0.0.1" echo "Use the appropriate IP address in your nfs-pv.yaml file"