Introducción a Kubernetes

1

Todo lo que aprenderás sobre Kubernetes

2

Repaso de contenedores e introducción a k8s

3

De pods a contenedores

4

¿Cómo funciona la arquitectura de red de Kubernetes?

5

Modelos declarativos e imperativos

6

Visión general del modelo de red

7

Recomendaciones

8

Introducción a aplicación de prueba

9

Instalando nuestro primer cluster con Minikube, Kubeadm

10

Instalando nuestro primer cluster con Kubeadm

11

Desplegando el Cluster en AWS con EKS

12

Desplegando una aplicación de prueba con EKS

Primer contacto con un cluster de kubernetes

13

Usando kubectl

14

Creación y manejo de pods

15

Deployments y replica sets

Balanceo de carga y service discovery

16

Accediendo a nuestros PODS a través de servicios

17

Enrutando el tráfico utilizando servicios

18

Desplegando nuestra app en k8s

Escalando nuestra aplicación

19

Exponiendo servicios interna y externamente (kubectl-proxy)

20

Kubernetes dashboard

21

Balanceo de carga y Daemon sets

22

Despliegues controlados

23

Healthchecks

Optimizando el uso de nuestro cluster

24

Gestionar stacks con Helm

25

Gestionando la configuración aplicativas utilizando Config Maps

26

Volúmenes

Autorización y Namespaces

27

Introducción a namespaces

28

Despliegue múltiples instancias de la misma aplicación en un solo cluster.

29

Autenticación y autorización

30

Service account tokens

31

RBAC

Fin del curso

32

Recomendaciones para implementar Kubernetes en tu organización o proyectos

Bonus

33

Clase en vivo: workflows de Kubernetes usando git

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Kubernetes

Curso de Kubernetes

Marcos Lilljedahl

Marcos Lilljedahl

Instalando nuestro primer cluster con Kubeadm

10/33
Recursos

Aportes 39

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Al parecer la página labs.play-with-k8s.com ya no está funcionando, pero pueden realizar las mismas dinámicas de esta clase en la siguiente liga:

play-with-kubernetes.com

sí funciona Play with Kuberntes

Para ingresar puedes hacerlo con la ID de docker o github, yo entre mi ID de docker la primera vez no carga, de ahi recargue la página y entré

The most Popular CNI plugins:

  • flannel.
  • calico.
  • weave.
  • canal. (una combinación de múltiples plugins)

Weave:
Weave crea una red superpuesta de malla entre cada uno de los nodos del clúster, lo que permite un enrutamiento flexible entre los participantes. Esto, junto con algunas otras características únicas, permite a Weave enrutar inteligentemente en situaciones que de otro modo podrían causar problemas.

Fuente: https://rancher.com/blog/2019/2019-03-21-comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/
A mi se me instalo kube-router con CNI:
kube-router:
El Kube-router es una solución turnkey para redes de Kubernetes con el objetivo de proporcionar simplicidad operativa. La creación de redes es difícil como tal. En un clúster de Kubernetes típico, necesitaría instalar varios componentes de red para diversas funciones. Con muchas partes móviles, hace que las redes de Kubernetes sean aún más difíciles. El Kube-router proporciona una alternativa cohesiva pero esbelta y poderosa para varios componentes de red que usaría.

Kube-router proporcionar un alto rendimiento es el núcleo de todas las elecciones de diseño realizadas en Kube-router. Ya sea el uso de IPVS / LVS para proxy de servicio o el uso de enrutamiento directo a través de los nodos para redes de pod, etc.

Fuente: https://www.kube-router.io/

Por si a alguien no le funciona el CTRL +C y el CTRL +V (Es un tedio teclear los tokens letra por letra). Al parecer el problema es recurrente en Firefox, si pueden usen un browser basado en Chromium.

El copy y el paste funcionan con:

CTRL + Insert -> Copy
SHIFT + Insert -> Paste

no me gusta que uses esto para enseñar kubeadm. sido mucho mejor configurar todo desde 0 para aprender.

Excelente.

Play-with-k8s no esta funcionando. Me toco instalar el ambiente en maquinas virtuales en mi PC y todo ha funcionado.

Va muy rapido y explica y nombra 500 mil cosas por segundo, es imposible seguirlo. Asume muchos conocimientos que no tenemos porque saber. La verdad explica muy mal , se nota que tiene muchos conocimientos, pero su fuerte no es enseñar

Para la fecha 29/11/2021 no funciono la pagina se quedo en negro y kubeadmin no funciona para windows. habia empezado super el curso pero estas ultimas clases necesitan actualización.
Anexo documentación
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

KUBEADM
#Inicializar kubeadm en nodo master
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

#desplegar cluster en nodo esclavo
kubeadm join 192.168.0.23:6443 --token ipi2op.681hwzhftemu6p7a \
    --discovery-token-ca-cert-hash sha256:9e56a4f601b04c8aa6b014630ef91690a9dbdb719173458a3e9e1952e6


tengo el siguiente error al ejecutar el siguiente comando para realzar la intancia del nodo1.

COMANDO:

kubeadm init --apiserver-advertise-address $(hostname -i)

ERROR:

[init] using Kubernetes version: v1.11.10
[preflight] running pre-flight checks
        [WARNING Port-10251]: Port 10251 is in use
        [WARNING Port-10252]: Port 10252 is in use
        [WARNING FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
        [WARNING FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
        [WARNING FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
        [WARNING FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
        [WARNING Service-Docker]: docker service is not active, please run 'systemctl start docker.service'
        [WARNING FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
I1118 03:59:58.006231    4930 kernel_validator.go:81] Validating kernel version
I1118 03:59:58.010252    4930 kernel_validator.go:96] Validating kernel config
[preflight] The system verification failed. Printing the output from the verification:
KERNEL_VERSION: 4.4.0-165-generic
DOCKER_VERSION: 18.06.1-ce
OS: Linux
CGROUPS_CPU: enabled
CGROUPS_CPUACCT: enabled
CGROUPS_CPUSET: enabled
CGROUPS_DEVICES: enabled
CGROUPS_FREEZER: enabled
CGROUPS_MEMORY: enabled
        [WARNING SystemVerification]: docker version is greater than the most recently validated version. Docker version: 18.06.1-ce. Max validated version: 17.03
        [WARNING SystemVerification]: failed to parse kernel config: unable to load kernel module "configs": output - "", err - exit status 1
        [WARNING Port-10250]: Port 10250 is in use
        [WARNING DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight/images] Pulling images required for setting up a Kubernetes cluster
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[preflight] WARNING: unable to stop the kubelet service momentarily: [exit status 1]
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[preflight] Activating the kubelet service
[preflight] WARNING: unable to start the kubelet service: [exit status 1]
[preflight] please ensure kubelet is reloaded and running manually.
[certificates] Using the existing ca certificate and key.
[certificates] Using the existing apiserver certificate and key.
[certificates] Using the existing apiserver-kubelet-client certificate and key.
[certificates] Using the existing sa key.
[certificates] Using the existing front-proxy-ca certificate and key.
[certificates] Using the existing front-proxy-client certificate and key.
[certificates] Using the existing etcd/ca certificate and key.
[certificates] Using the existing etcd/server certificate and key.
[certificates] Using the existing etcd/peer certificate and key.
[certificates] Using the existing etcd/healthcheck-client certificate and key.
[certificates] Using the existing apiserver-etcd-client certificate and key.
[certificates] valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/scheduler.conf"
[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests"
[init] this might take a minute or longer if the control plane images have to be pulled

                Unfortunately, an error has occurred:
                        timed out waiting for the condition

                This error is likely caused by:
                        - The kubelet is not running
                        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
                        - No internet connection is available so the kubelet cannot pull or find the following control plane images:
                                - k8s.gcr.io/kube-apiserver-amd64:v1.11.10
                                - k8s.gcr.io/kube-controller-manager-amd64:v1.11.10
                                - k8s.gcr.io/kube-scheduler-amd64:v1.11.10
                                - k8s.gcr.io/etcd-amd64:3.2.18
                                - You can check or miligate this in beforehand with "kubeadmconfig images pull" to make sure the images
                                  are downloaded locally and cached.

                If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
                        - 'systemctl status kubelet'
                        - 'journalctl -xeu kubelet'

                Additionally, a control plane component may have crashed or exited when started by the container runtime.
                To troubleshoot, l
                          WARNING!!!!

 This is a sandbox environment. Using personal credentials
 is HIGHLY! discouraged. Any consequences of doing so, are
 completely the user's responsibilites.

[node1 ~]$ kubeadm init --apiserver-advertise-address $(hostname -i)
Initializing machine ID from random generator.
[init] using Kubernetes version: v1.11.10
[preflight] running pre-flight checks
        [WARNING Service-Docker]: docker service is not active, please run 'systemctl start d
ocker.service'
        [WARNING FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bri
dge/bridge-nf-call-iptables does not exist
I1118 03:47:05.161205    1004 kernel_validator.go:81] Validating kernel version
I1118 03:47:05.162964    1004 kernel_validator.go:96] Validating kernel config
[preflight] The system verification failed. Printing the output from the verification:
KERNEL_VERSION: 4.4.0-165-generic
DOCKER_VERSION: 18.06.1-ce
OS: Linux
CGROUPS_CPU: enabled
CGROUPS_CPUACCT: enabledCGROUPS_CPUSET: enabled
CGROUPS_DEVICES: enabled
CGROUPS_FREEZER: enabled
CGROUPS_MEMORY: enabled
        [WARNING SystemVerification]: docker version is greater than the most recently valida
ted version. Docker version: 18.06.1-ce. Max validated version: 17.03
        [WARNING SystemVerification]: failed to parse kernel config: unable to load kernel mo
dule "configs": output - "", err - exit status 1
[preflight/images] Pulling images required for setting up a Kubernetes cluster
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[preflight] Activating the kubelet service
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [node1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.0.23]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [node1 localhost] and IPs [127.0.0.1 ::1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [node1 localhost] and IPs [192.168.0.23 127.0.0.1 ::1]
[certificates] Generated etcd/healthcheck-client certificate and key.
[certificates] Generated apiserver-etcd-client certificate and key.
[certificates] valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests"
[init] this might take a minute or longer if the control plane images have to be pulled

                Unfortunately, an error has occurred:
                        timed out waiting for the condition

                This error is likely caused by:
                        - The kubelet is not running
                        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
                        - No internet connection is available so the kubelet cannot pull or find the following control plane images:
                                - k8s.gcr.io/kube-apiserver-amd64:v1.11.10
                                - k8s.gcr.io/kube-controller-manager-amd64:v1.11.10
                                - k8s.gcr.io/kube-scheduler-amd64:v1.11.10
                                - k8s.gcr.io/etcd-amd64:3.2.18
                                - You can check or miligate this in beforehand with "kubeadmconfig images pull" to make sure the images
                                  are downloaded locally and cached.

                If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
                        - 'systemctl status kubelet'
                        - 'journalctl -xeu kubelet'

                Additionally, a control plane component may have crashed or exited when started by the container runtime.
                To troubleshoot, list all containers using your preferred container runtimesCLI, e.g. docker.

Abril 2021, la pagina esta funcionando, pero debes darle un refresh en caso de que se ponga lenta.

A la fecha que hago este comentario (14-11-2020), los pasos que seguí para poder seguir esta clase fueron los siguientes:

  1. Ingresar a https://labs.play-with-k8s.com/
  2. Iniciar sesión con mi usuario de GitHub, pueden usar su ID de Docker.
  3. Ya pude seguir la clase con normalidad.

Los que deseen trabajar con kubeadm desde maquinas virtuales, este tuto me funcionó desde cero.
https://github.com/justmeandopensource/kubernetes/blob/master/docs/install-cluster-ubuntu-20.md
https://www.youtube.com/watch?v=mMmxMoprxiY

Nuevo comando para levantar la red

kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

La pagina no funciona

La pagina https://labs.play-with-k8s.com/ esta con error 500. ayuda

a la fecha funciona perfectamente el sitio https://labs.play-with-k8s.com …incluso pude acceder correctamente a nginx desde el navegador, tal como se intento al final de la clase

lo unico malo es que en windows no me deja copiar los comandos desde la terminal del navegador en https://play-with-k8s.com con Ctrl+C… o al menos no se como hacerlo, me toco copiarlos desde el inspector de codigo del navegador T.T

Yo en mi caso, quería hacerlo en mis MVs, ya que tengo intención de desplegarlo en mi empresa. Por lo que seguí los pasos de la página de kubernetes para instalar kubeadm: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
Una vez instalado kubeadm, seguí los pasos del profesor, y ya tuve mi clúster:

[email protected]:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
us2104nodo1 Ready control-plane,master 25h v1.22.2
us2104nodo2 Ready <none> 24h v1.22.2

Listo.

[node1 ~]$ kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
node1   Ready    control-plane,master   9m29s   v1.20.1
node2   Ready    <none>                 35s     v1.20.1
[n
[node1 ~]$ kubectl get services
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP      10.96.0.1       <none>        443/TCP        16m
my-nginx-svc   LoadBalancer   10.111.127.91   <pending>     80:31000/TCP   28s

Como installar Kubeadmin

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Bueno, haber si si funciona la pagina

Hola, he estado intentando ingresar a play with k8s pero me da un error al momento de dar clic en start;

La aplicación está con errores, no crea ninguna instancia luego de hacer clic en crear instancia, podrías solucionarlo, por favor?

Hola, intente crear una instancia en play with Kubernates pero nunca se crea, alguien mas tiene ese issue? saludos.

buenas, se me presento una duda… se pueden tener nodos con distintas versiones de kubernetes?

https://labs.play-with-k8s.com/ en la pagina no logra crear nueva instancia.

repasando 😃

Cuando entra a la página e intento crear un nodo, en ocasiones se queda pasmado., en otras ocasiones si abre el nodo, pero cuando creo el control-plane con la instrucción indicada, marca un error indicando que ya no tiene espacio en disco. ¿Que hago en esos escenarios?

la pagina https://labs.play-with-k8s.com/#, se queda congelada al poner start…que podria ser??

Super 😃

Excelente el espacio de Play with Kubernetes…
https://labs.play-with-k8s.com/

Muy versátil

Gracias

no me responde el curl desde dentro del sitio sin embargo si esta el servicio.

[node1 ~]$ kubectl get service
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP      10.96.0.1        <none>        443/TCP        124m
my-nginx-svc   LoadBalancer   10.106.254.178   <pending>     80:30238/TCP   14m
[node1 ~]$ curl 10.106.254.178:30238
^C
[node1 ~]$

Tengo problemas con esto DOCKER_GRAPH_DRIVER: vfs
Aparece en rojo y luego no puedo unir el otro nodo. No sé si tiene que ver, pero no me agrega el otro nodo.

Play with k8s no me anduvo de primera, tuve que salir y volver a ingresar 2 veces y recién ahí pude.
Excelente herramienta.

Al hacer sudo kubectl get pods
Me dice the connection to the server mi ip:8443 was refused did you especify the right host or port

Veo que al resto de compañ[email protected] les generó ciertos inconvenientes seguir el contenido de esta clase, la única parte que no pude realizar fue la misma que no le salió al profesor: acceder al contenedor desplegado de nginx con la URL que nos da el sitio web de Play With k8s.

A mi me parece muy bien que arrancamos usando esta plataforma, porque podemos probar cosas sin necesidad de gastar dinero en infra.

muestra un error 500 me registré con github y docker 😕