# # Preparar del entorno # # Instalar herramientas basicas sudo apt update && sudo apt install -y git curl nano # Instalar Docker sudo snap install docker sudo addgroup --system docker sudo adduser $USER docker newgrp docker sudo snap disable docker sudo snap enable docker # Instalar kind curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64 chmod +x ./kind sudo mv kind /usr/local/bin # Instalar kubectl curl -Lo ./kubectl https://dl.k8s.io/release/v1.29.2/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin # Descargar el código git clone https://gitlab.com/gabrielarellano/tutorial-kubernetes-kind.git cd tutorial-kubernetes-kind # Crear el cluster kind create cluster --config=cluster-config.yaml kubectl get nodes kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/kind/deploy.yaml sudo sed -i '1i127.0.114.100 cluster-prueba.k8s.local vote.k8s.local result.k8s.local' /etc/hosts # # Deployments kubectl # kubectl version kubectl get nodes kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 kubectl get deployments # en otra terminal kubectl proxy # de nuevo en la terminal original curl http://localhost:8001/version export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') echo "Nombre del Pod: $POD_NAME" curl "http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/" # # Viendo Pods y Nodos # kubectl get pods kubectl describe pods # en otra terminal (en caso de no tenerlo corriendo del paso anterior) kubectl proxy # de nuevo en la terminal original export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')" echo "Nombre del Pod: $POD_NAME" curl "http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/" kubectl logs "$POD_NAME" kubectl exec "$POD_NAME" -- env kubectl exec -ti $POD_NAME -- bash cat server.js curl http://localhost:8080 exit # # usando Services # kubectl get pods kubectl get services kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 kubectl get services kubectl describe services/kubernetes-bootcamp export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o jsonpath='{.spec.ports[].nodePort}')" echo "NODE_PORT=$NODE_PORT" export NODE_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')" echo "NODE_IP=$NODE_IP" curl "http://$NODE_IP:$NODE_PORT" kubectl describe deployment kubectl get pods -l app=kubernetes-bootcamp kubectl get services -l app=kubernetes-bootcamp export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')" echo "Nombre del Pod: $POD_NAME" kubectl label pods "$POD_NAME" version=v1 kubectl describe pods "$POD_NAME" kubectl get pods -l version=v1 kubectl delete service -l app=kubernetes-bootcamp kubectl get services curl "http://$NODE_IP:$NODE_PORT" kubectl exec -ti $POD_NAME -- curl http://localhost:8080 # # Varias instancias # kubectl scale deployments/kubernetes-bootcamp --replicas=4 kubectl get deployments kubectl get pods -o wide kubectl describe deployments/kubernetes-bootcamp kubectl describe services/kubernetes-bootcamp export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o jsonpath='{.spec.ports[].nodePort}')" echo "NODE_PORT=$NODE_PORT" export NODE_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')" echo "NODE_IP=$NODE_IP" # Repetir varias veces curl "http://$NODE_IP:$NODE_PORT" kubectl scale deployments/kubernetes-bootcamp --replicas=2 kubectl get deployments kubectl get pods -o wide # # Actualizaciones graduales # kubectl get deployments kubectl get pods kubectl describe pods kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 kubectl get pods kubectl describe services/kubernetes-bootcamp export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o jsonpath='{.spec.ports[].nodePort}')" echo "NODE_PORT=$NODE_PORT" export NODE_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')" echo "NODE_IP=$NODE_IP" curl "http://$NODE_IP:$NODE_PORT" kubectl rollout status deployments/kubernetes-bootcamp kubectl describe pods kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10 kubectl get deployments kubectl get pods kubectl describe pods kubectl rollout undo deployments/kubernetes-bootcamp kubectl get pods kubectl describe pods kubectl delete deployments/kubernetes-bootcamp services/kubernetes-bootcamp # # Usando manifiestos # kubectl create namespace vote kubectl create --namespace vote -f example_voting_app/ kubectl get all --namespace vote kubectl get all --namespace vote -o wide export VOTE_PORT="$(kubectl get services/vote -n vote -o jsonpath='{.spec.ports[].nodePort}')" export VOTE_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')" echo "Vote URL: http://$VOTE_IP:$VOTE_PORT" export RESULT_PORT="$(kubectl get services/result -n vote -o jsonpath='{.spec.ports[].nodePort}')" export RESULT_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')" echo "Result URL: http://$RESULT_IP:$RESULT_PORT" kubectl scale --replicas=3 deployment vote --namespace vote kubectl get pods,replicasets --namespace vote kubectl create --namespace vote -f ingresses_voting_app/ kubectl get ingress --namespace vote # # Limpiar el entorno # kind delete cluster cluster-prueba sudo sed -i '/127\.0\.114/d;//d' /etc/hosts