meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
virtualizacion:kubernetes [2018/12/07 15:02] – [Referencias] lcvirtualizacion:kubernetes [2023/01/18 14:11] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
-{{tag>docker kubernetes centos}} +===== Kubernetes ===== 
-===== Instalación de Kubernetes en Centos ===== +Kubernetes lo podemos definir como un orquestador de contenedores (container). Es decir nos va a permitir gestionar contenedores en una o varias máquinas.
-La Wikipedida define [[https://es.wikipedia.org/wiki/Kubernetes|Kubernetes]] como (referido en inglés comúnmente como “K8s”** un sistema de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores** +
  
-A esta clase de software se la conoce como orquestadores, existen varios cada uno tienen sus propias [[https://www.ackstorm.com/orquestadores-mesos-kubernetes-swarm/|características]]+Un container contiene exclusivamente los servicios necesarios para que la aplicación que se empaqueta pueda correr sin ningún problema se pueda replicar de acuerdo a nuestras necesidades.
  
-==== Pasos previos ==== 
-Vamos a realizar los siguientes pasos tanto en el manager como en el resto de nodos 
-Lo primero será deshabilitar la swap  
-  * temporalmente (hasta que reiniciemos )con el comando **swapoff -a ** 
-  * Definitivamente editando el fichero /etc/fstab y comentando la línea de la partición del swap 
-  * Activamos el modo bridge   . Para ello creamos un fichero de configuración para que se cargue en /etc/sysctl.d incluido el manager 
-<sxh>cat <<EOF >  /etc/sysctl.d/k8s.conf 
-net.bridge.bridge-nf-call-ip6tables = 1 
-net.bridge.bridge-nf-call-iptables = 1 
-EOF</sxh> 
  
-y aplicamos los cambios con <sxh>sysctl --system</sxh> +Alguna de las ventajas de usar kubernetes son: 
-  * deshabilitamos [[linux:centos:selinux|SElinux]] +  * Escalabilidad 
-  * instalamos docker <sxh>yum install -y docker</sxh> +  * Tolerancia a fallos  
-  * Lo ponemos para que arranque al inicio <sxh>systemctl enable docker && systemctl start docker</sxh>+  * Balanceo de carga 
 +  * Gestión de Volúmenes
  
-==== Instalación de Kubernetes ==== +==== Conceptos ====
-=== Pasos a realizar en todos los nodos (incluido el manager) === +
-<sxh>cat <<EOF > /etc/yum.repos.d/kubernetes.repo +
-[kubernetes] +
-name=Kubernetes +
-baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 +
-enabled=1 +
-gpgcheck=1 +
-repo_gpgcheck=1 +
-gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg +
-EOF +
-</sxh>+
  
-Instalamos los paquetes +=== Componentes de Kubernetes === 
-<sxh>yum update +== Estructura física == 
-yum install -y kubelet kubeadm kubectl</sxh+  * Nodos 
-Lo ponemos para que arranque al inicio  +  * Master.  
-<sxh>systemctl enable kubelet && systemctl start kubelet</sxh>+== Estructura Lógica == 
 +  * POD -> Un Pod es el objeto más pequeño y la unidad básica desplegable en Kubernetes. Un pod tiene la función de encapsular uno o varios container 
 +  * Volumes 
 +  * Namespace 
 +  * Label/LabelSelector 
 +  * Controladores
  
-Comprobamos que kubernetes y docker están en el mismo grupo de control ( cgroup)+==== Controladores en Kubernetes ==== 
 +  * ReplicationController 
 +  * ReplicaSet 
 +  * Deployments 
 +  * DaemonSet 
 +  * StatefulSet 
 +  * Jobs 
 +  * CronJobs
  
-Para verificar el cgroup de docker <sxh>docker info | grep -i cgroup</sxh>+=== ReplicatoinController === 
 +  * Garantiza la ejecución de un número determinado de POD’s. 
 +  * Similar a un supervisor. 
 +  * Sobrevive a disrupción. 
 +=== ReplicaSet === 
 +  * Similar al ReplicationController 
 +  * Admite labelSet. 
 +  * No se recomienda. 
 +  * Se puede usar en HPA. 
 +=== Deployments === 
 +  * Proporciona actualizaciones declarativas para POD’s y ReplicaSets. 
 +  * Permite crear/eliminar conjuntos de réplicas 
 +  * No se debe administrar ReplicaSets de un Deployment, todos los casos de uso deben ser cubiertos manipulando el Deployment 
 +=== DaemonSet === 
 +  * Garantiza un POD en cada nodo. 
 +  * Garbage collector. 
 +  * Eliminar un DaemonSet eliminará los PODs creados. 
 +  * En un DaemonSet no se definen ReplicaSets ya que automáticamente va a desplegarlo en cada nodo de nuestro cluster.  
 +  * El DaemonSet se usa mucha para desplegar pods de monitorización en cada nodo de un cluster 
 +=== StatefulSet === 
 +  * Administra aplicaciones con estado. 
 +  * Proporciona garantías sobre el orden y la exclusividad de los PODs. 
 +  * A diferencia de un Deployment, mantiene una identidad adhesiva para cada POD. 
 +=== Jobs === 
 +  * Asegura que X POD acaben correctamente. 
 +  * Permite ejecutar modulos en paralelo. 
 +  * Hasta no tener un % de éxito no se considera acabado el Job. 
 +=== CronJobs === 
 +  * Ejecuta jobs en el tiempo. 
 +  * Una vez en el tiempo repetidamente una vez en el tiempo. 
 +  * Se escribe en formato cron.
  
-Para añadir kubernetes al mismo cgroup <sxh>sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf</sxh>+===== Referencias ===== 
 +  * https://github.com/iesgn/curso_kubernetes_cep 
 +  * https://github.com/iesgn/curso_kubernetes_2020 
 +  * https://ualmtorres.github.io/SeminarioKubernetes/
  
-Reiniciamos los servicios <sxh>systemctl daemon-reload 
-systemctl restart kubelet</sxh> 
- 
-=== Pasos a realizar sólo en el Manager === 
-Iniciamos el cluster <sxh>kubeadm init</sxh>  
-<note>hay varias [[https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/|opciones]] que podemos usar para definir el interfaz que da servicio o la red para los pods.  
-Por ejemplo kubeadm init --apiserver-advertise-address=192.168.1.99 --pod-network-cidr=192.168.1.0/16</note> 
- 
-Cuando este comando termina nos aparecerá un comando con el token y el hash para unir los nodos. Este comando deberemos de guardarlos para añadir los nodos. 
- 
-Antes de usar Kubernetes deberemos de ejecutar los siguientes comandos para terminar la configuración.  
- 
-  * Si kubernetes lo vamos a lanzar como root sólo debemos ejecutar el siguiente comando <sxh>export KUBECONFIG=/etc/kubernetes/admin.conf</sxh> 
-  * Si lo vamos a lanzar como otro usuario deberemos de crear un directorio para la configuración, copiar los archivos necesarios y darle permisos sobre dichos archivos<sxh> 
-mkdir -p $HOME/.kube 
-sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
-sudo chown $(id -u):$(id -g) $HOME/.kube/config 
-</sxh> 
- 
-Ahora debemos de definir el modelo de red que queremos usar en kubernetes , hay varias aproximaciones cada una con distitas características (https://kubernetes.io/docs/concepts/cluster-administration/networking/) 
- 
-Si por ejemplo vamos a usar [[https://github.com/coreos/flannel#flannel|flannel]] ejecutariamos en el manager <sxh>kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml</sxh> 
- 
-Si usamos [[https://www.weave.works/oss/net/|weave]] el comando sería <sxh> kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"</sxh> 
- 
-Si queremos comprobar si se ha instalado correctamente podemos ejecutar <sxh>kubectl  get pods --all-namespaces</sxh> nos deberías aparecer un pods llamada weave-net-wvlbx con el estado **running** 
- 
-=== Paso final en los nodos === 
-Como último punto tenemos que añadir los nodos al manager. Para ello usaremos el comando que habiamos guardado cuando iniciamos el cluster  y lo ejecutamos en los nodos que vamos a unir al cluster  
-<sxh>kubeadm join ipmanager:6443 --token MITOKEN --discovery-token-ca-cert-hash MIDISCOVERY_TOKEN</sxh> 
-<note>MITOKEN y MIDISCOVERY_TOKEN son los que nos dio el manager al iniciarlo</note> 
- 
-==== Funcionamiento ==== 
- 
- 
- 
- 
-Para ver que todo está funcionando y los nodos están registrados ejecutamos en el manager <sxh>kubectl get nodes</sxh>