DEPLOYMENTS EN KUBERNETES
HTML-код
- Опубликовано: 19 окт 2024
- Jugamos un poco con deployments, modificando las réplicas y haciendo nuestro primer deploy. También tocamos un poco las labels para poner pods en cuarentena.
Minikube: kubernetes.io/...
--
merch.peladone...
Repo con todos los archivos que uso: github.com/pab...
Link para registrarse en Digital Ocean (50 USD de Regalo!)
bit.ly/digital...
Micrófono: Blue Snowball ICE
Cámara: Canon Rebel SL2
Lente: Canon 50mm f/1.8
Laptop: Macbook Pro 15'' 2017
Kit completo: bit.ly/kit-pel...
Mi canal de vlogs: bit.ly/youtube-...
Comprame un cafecito: bit.ly/kofi-pe...
Gracias por la clara explicación! estoy comenzando a utilizar esto en mi trabajo y tus videos me han aportado bastante diría yo.
Muy buenos tutoriales, me encantan la sencillez de la explicación y lo claro de los ejemplos. Soy nuevo con Kubernetes, vengo del palo Aws+Terraform y definitivamente ésto se ve mucho más sencillo. Gracias por tu tiempo y por la onda que le ponés a los videos, para que no se vuelvan aburridos. Lamentablemente ya había creado mi cuenta de Digital Ocean, sino con gusto te "regalaba" los 25 dólares.
Este video me parece simplemente genial, ..., llevaba buscando esta explicación mucho tiempo, ..., simple, directa, explicativa.
Cuarentena sigue corriendo hasta hoy xD
que ya le de kill al pod
Sencillo y al grano. Me quedo super claro las explicación y se agradece el resolver las dudas en los comentarios.
Simplemente brutal tus vídeos.. precisos , al grano , sin vueltas y con humor..
Me encanta que le pongas humor! Eso si q falta en estos tutoriales! Te felicito man!
Un saludo pelado excelente tus videos como siempre. Ché tengo el sig problema, he creado varios pods siguiendo tus videos como el q lo instala como NodePort etc, y me ocurre q los servicios me aparecen sin Endpoint, así q a pesar de q me salen los pods "Running" no hallo manera de interactuar con ellos. Será por algún parámetro q me está faltando en el yaml? Q me recomiendas para darle visibilidad a estos pods/servicios? De antemano agradecido por tu input. Sos un crack!
Muchas gracias Señor por este video! Sirve mucho para aprender. Toma tu like
Loco pregunta, ¿es sano hacer el versionamiento de esa manera o mejor aplicar un RollingUpdate + HistoryLimit de # versiones (ej. 2), para buenas practicas?
Mil gracias. Estoy tratando de levantar un MYSQL con volumen permanente que tiene que estar linkeado a un front end con puma. EL Pod de Puma lo levante desde gitlab, pero no ententiendo bien como levantar el de MYSQL y relacionarlo con el FE.. Tu video me ayuda mucho
Te invito a que te metas al slack y lo vemos ahí. slack.peladonerd.com
Excelente Pablo!
Una pregunta, como identificas el pod que esta degradado para ponerlo en cuarentena?
Excelente material. Gracias a tus videos tengo un skill extra para mi empleo.
Todo esto lo voy practicando en los tiempos libres o me hago tiempo si hace falta.
Gracias por el video y la explicación.
Consulta, cuando se crea un nuevo pod, por ej. cuando creas una nueva versión, y se "mata" al viejo, como es a nivel tecnico eso? O sea, el anterior pod se borra literalmente? Es como si se hiciera un "rm" de los archivos?
Por otro lado, como veo o administro el uso de cpu, mem, disco, etc. del pod para ver si realmente necesito crear otro y escalar? Como manejo eso? Y como se cual es mi limite de pods? O sea, como sé si puedo crear 100 pods por dar un numero? Como veo hasta donde puedo llegar? A cada pod le puedo asignar mas o menos recursos, como maneja eso el pod internamente?
Perdon si las consultas son tontas, pero me dá curiosidad. Gracias nuevamente, saludos!
Muy buenas preguntas! Y no son preguntas tontas para nada, me re sirve que se hagan estas preguntas para saber si faltó explicar algo o cosas que tengo que tener en cuenta para los próximos videos.
* Cuando se mata el pod es como hacerle un docker stop, se frena el proceso y se muere el contenedor, pero los archivos no se borran automaticamente, hay un servicio que se llama garbage colector que corre en cada nodo, manejado por el controlador; cuando el GC ve que hay poco espacio en disco, se pone a borrar las imagenes y los contenedores que ya no se usan.
* En el próximo video voy a hablar de cómo asignar recursos a los pods, y en ese mismo voy a explicar cómo se distribuyen los pods en los nodos basados en esos recursos
Abrazo y de nuevo gracias por las consultas
@@PeladoNerd Excelente, mil gracias por responder!
Muy buenos tus tutos, pero me surge una duda con este, qué ventajas nos trae hacerle cuarentena a un pod y no eliminarlo directamente.
Generalmente solo se hace cuarentena cuándo necesitas hacer algún análisis o investigación al pod después de haberle quitado el tráfico. Tal vez hubo algún problema que no pudiste descubrir rápidamente y necesitas sacar el pod de rotación para que los clientes puedan seguir visitando tu sitio sin dramas. Se entiende ?
Para complementar la pregunta pelado, cuando hago get nodes -o wide el campo External IP de Minikube me aparece vacío :( Importa esto?Una acotación, este Minikube lo tengo instalado en Windows, no en VB
Muy interesante esta serie, muchas gracias!
Que buen video Pablo 👌. Gracias 👍
Hola Pablo un gusto saludarte, tengo una duda con respecto a minikube, cuando lo instalas en VirtualBox, debes instalarlo en una VM Linux q instalaste previamente? Lo otro es, si tu VB corre sobre Windows (puedes burlarte), tienes q poder instalar hypervisor? he intentado hacerlo antes y entiendo q tengo q pagarle a BG para q mi máq pueda hacer esto (lo cual lógicamente me irrita). Gracias por las luces man!
Buenas! Con tener virtualbox instalado es suficiente. Minikube automáticamente va a bajar la imagen que corresponde e iniciar todo. No hace falta que crees una vm con linux
@@PeladoNerd Excelente Pelado, de hecho no necesité VB, ya q Docker se instala directamente sobre Windows, solo tuve q instalar minikube y kubectl (en Windows/system32)
Gracias por enseñar.
jajaja mori de risa con tu comentario de la luz jaja
Pelado, cuando haces un update de una version de la app de una vieja a una mas nueva y kubernetes mata pods viejos para levantar versiones nuevas.. que pasa con los pods cuyos contenedores estan al palo atendiendo transacciones? los espera a que termine para no cortar las transacciones en seco por decirlo de alguna manera? o le migra las transacciones existentes a los nuevos que va creando...gracias!!
Excelente video estimado... Super claro y sencillo de entender 😉👍
Hola Pelao, muchas gracias por tus videos, de verdad entretienen y son de aprendizaje. Queria preguntarte como puedo saber la versión actual del contenedor que esta corriendo en los pods?
Ok, resuelto con describe pod
Excelente...gracias
Pelado tengo una duda, como creas PODs si no tienes workers?, el kubectl get nodes te mostró que solo tienes un máster sin workers. Pensé que los deployments solo se podían hacer en los workers.
Se pueden poner pods en masters. Hay una cosa que se llama “tolerations” que te permite hacerlo
Compañero, gracias por el vídeo, pregunta, cual es la diferencia entre deployment y rc (según el vídeo anterior)?
Hola, muy buena pregunta (estaba esperando que alguien la hiciera) Replication Controllers (RC) es la forma original de replicación de pods de Kubernetes, fue reemplazada por Replica Sets (+ Deployments) ... pero muchos todavia usan RCs.
Los RS están siempre atados a un deployment, y crear un deployment crea un RS. Pero, una de las ventajas de deployments + RS es que podes tener un deployment atado a muchos RS, haciendo mucho mas facil volver atrás (los pods estan corriendo pero no recibiendo trafico)
Con RC solo podes tener un solo set de pods que siempre están recibiendo trafico y al aplicar un update se reemplaza el RC actual con los pods nuevos.
Yo recomiendo usar deployments.
Capaz hago un videito de viernes con esto, gracias por la consulta!
@@PeladoNerd a ti por responder maquina
Terminé de ver el vídeo y me surgió la misma pregunta. Gracias al que preguntó y gracias a vos Pablo por tu respuesta clarísima.
Aclaro que hoy en dia se pueden crear mas de un nodo para jugar un poco con el networking
grande bro!, gracias a ti pude empezar a ver kubernetes, gracias :D
Buenisimo, si la gente no entiende, entonces les toca empezar de nuevo desde 0 porque algo se saltaron en su aprendizaje... Saludos desde Bogotá Colombia... Tengo algunas dudas porque me gustaria implementarlo donde trabajo pero... normalmente yo no creo las imagenes de Docker con la app, no se si sea un poco arcaico como lo hago, pero pues no creo las imagenes, entonces me tocaria investigar mas como hacerlo como yo normalmente lo hago
Por cierto, 3 videos vistos, 3 Likes, 1 Suscripcion, te los ganaste mi viejo...
Acá se arma la guerra. Odio el frío 🤷🏼♂
Gracias !!!
Cuál sería la diferencia entre replication contróller y deployment ?
Impresionannnnte!!!
Hola pelado, una pregunta: Cuando hago un deployment que tiene migraciones ¿ En que etapa se deberían hacer? si la respuesta son "jobs", ¿Como aplico automaticamente el job una vez se haya cargado la imagen y que la migración sea idempotente? (Estoy usando terraform)
Muchas gracias, buenos videos
Buena pregunta. Eso lo tiene que manejar el servicio. Lo que debería haber es crear un lock cuando inicia y hacer la migración ahí mismo. De esa forma te aseguras que el mismo servicio se encargue de manejar las migraciones y nunca vas a tener un drama con que el servicio este corriendo sin la migración
@@PeladoNerd Hola pelado, gracias, al final lo hice en circle ci, en el script de post deploy que colgaste en tu video CI/CD.
./kubectl --kubeconfig=kubeconfig.yml set image deployment/django django-web=gcr.io/xxx/xxx:$COMMIT_SHA1 --record=true -n django-pods
# Check deployment rollout status every 10 seconds (max 10 minutes) until complete.
//.
.....
//
MYAPP_POD=$(./kubectl --kubeconfig=kubeconfig.yml get pods -l app=django-container -n django-pods | grep "^django.*Running" | awk '{print $1}')
./kubectl --kubeconfig=kubeconfig.yml exec "$MYAPP_POD" -n django-pods -- bash -c "python manage.py collectstatic --noinput"
./kubectl --kubeconfig=kubeconfig.yml exec "$MYAPP_POD" -n django-pods -- bash -c "python manage.py migrate"
Gracias!!
gracias
Magnifico gracias 🙏
Gracias porfin encuentro un vídeo donde dice que se tiene que compilar el Docker image y subirlo y en el yml apuntar a esa URL de la imagen 😭😭
Pregunta... como puedo saber el limite de pods que puedo escalar sobre un nodo?
alguno lo probo en windows y si tiene mi misma situación del porque minikube ip retorna 127.0.0.1 esta correcto esto?
Excelente Pelado! en mi caso no me balancea, pero de resto todo perfecto!
muy bueno increible genial
y como seria si quisiera hacer un canary?
si tengo 15 versiones de la app de la más vieja a la más nueva, en el proveedor de cloud va a haber 15 deployments?
Hay una opción para ver cuantas versiones se guardan, se llama revisionHistoryLimit y por defecto es 10: kubernetes.io/docs/concepts/workloads/controllers/deployment/#clean-up-policy
Disculpa solo me muestra eso no me muestra la ip del nodo la maquina virtual como la optengo???
augusto@augusto:~$ minikube status
m01
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
averigue minikube ip me mostro pero como hago para que se vea en status hay alguna configuracion que me falta?? debo crear antes un namespace?
Es posible que solo lo muestre con minikube ip ahora (este video lo hice hace un año)
@@PeladoNerd ok gracias ceguire con su curso gracias recien estoy entranto en este mundo de kubernetes y docker es por ello que lo estoy viendo en este año jajaja pero es muy bueno su canal
Consulta.. tengo un problema similar... y no me expone la IP, figura una IP usando el comando "minikube ip" pero no es accesible al desplegar la app... te paso lo mismo?
Buenísimo.
buenisimo
Fichero 01-hello-app-deployment.yaml para que funcione con la versión minikube 1.18.1-0:
-----
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-d
labels:
app: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
-----
Ojo, también habría que cambiar el manifiesto del nodeport, usando app: hello en lugar de role: hello
-----
apiVersion: v1
kind: Service
metadata:
name: hello-np
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: hello
-----
Hacete un PR en el repo :)
Buen video :)
Alguien sabe que reemplaza a Depoloyment?
KIND: Deployment
VERSION: extensions/v1beta1
DESCRIPTION:
DEPRECATED - This group version of Deployment is deprecated by
apps/v1beta2/Deployment.
Ahí lo dice :) simplemente cambia extensions/v1beta1 por lo otro
Pelado como va?
tengo un problema seguro que porque desde la version que vos usaste en el video a la que tengo yo ahora algo cambio: (el contenido del yaml) es el mismo al tuyo
patrol@paw:~$ kubectl apply -f 01-hello-app-deployment.yaml
error: error validating "01-hello-app-deployment.yaml": error valida ting data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ig nore these errors, turn validation off with --validate=false
Entiendo que ahora exige un selector tambien en el deploy de la app... Siguiendo el video veo que en el deploy del servicio ahi vos pones el selector role: hello, esta mismo se podria usar para la app?
Saludos
Si, proba agregando eso y te tiene que andar. Y si te anda, por favor hace un PR al repo para que quede arreglado para los próximos :)
@@PeladoNerd Gracias por la respuesta, claro yo habia tipeado tu ej viendo el video, ahora veo que en el repo esta actualizado.. Como tambien aprendi git con tus videos ahi me hice un clone del repo ;) vamos a ver que sale
#lacanaenlabarba
Si. Me volví loco mientras editaba, tendría que haber contratado a un equipo de efectos especiales para sacarla a lo Superman
Muy interesante.. pero vas algo rápido...
Tengo una consulta pelado help me
tengo problemas viendo el host externo de mi aplicacion tiro kubectl get svc --namespace magento -w magento-magento pero no sale nada
Hace kubectl get svc --all-namespaces. Capaz lo tenés en otro namespace o el nombre está mal
@@PeladoNerd eres un crack
porfavor ya no mas HELLO WORLD
jujaujaujauj esta cagado..
minikube start --nodes 100000000 -p SuperPelonK8BaldCluster