En este tutorial de Kubeadm, exploraremos todo lo que necesita saber sobre los comandos de Kubeadm y cómo usarlos para crear clústeres y administrar componentes de clústeres en Kubernetes (K8s).
No solo aprenderá a crear su propio clúster de Kubernetes con Kubeadm, sino que también dominará el arte de administrar los componentes del clúster y descubrirá las prácticas recomendadas de Kubeadm.
Únase a nosotros en este emocionante viaje al mundo de Kubeadm, donde desbloqueará el poder de orquestar contenedores con facilidad.
¡Sumerjámonos y convirtámonos juntos en expertos de Kubeadm! Antes de profundizar en kubeadm
, ¿qué es exactamente Kubernetes autohospedado (K8)?
Kubernetes autohospedado, también conocido como implementación de Kubernetes "bare metal" o "local", se refiere a la ejecución de Kubernetes directamente en máquinas físicas o virtuales sin depender de un servicio de Kubernetes administrado proporcionado por un proveedor de la nube (como EKS de AWS). ).
Estos son algunos pros y contras de los Kubernetes autohospedados:
Con Kubernetes autohospedado, tiene control total sobre la configuración, las redes y la infraestructura del clúster. Esto le permite personalizar y optimizar el clúster de acuerdo con sus requisitos específicos y capacidades de infraestructura.
Kubernetes autohospedado puede ser más rentable, especialmente para implementaciones a largo plazo, en comparación con el uso de servicios de Kubernetes administrados que a menudo incurren en tarifas adicionales. El alojamiento propio le permite aprovechar los recursos de hardware existentes y evitar los costos generales de los servicios administrados. (y ahorrar un montón de dinero)
Kubernetes de alojamiento propio le brinda control directo sobre las medidas de seguridad, como las políticas de red, el cifrado, los controles de acceso y los requisitos de cumplimiento. Esto le permite implementar las mejores prácticas de seguridad de Kubernetes específicas para las necesidades y los estándares regulatorios de su organización. (log4j, ¿te suena algo?)
Kubernetes autohospedado le permite asignar recursos exclusivamente a su clúster sin compartirlos con otros inquilinos. Esto permite una mejor utilización de los recursos y evita posibles problemas de rendimiento que pueden surgir de la contención de recursos en un entorno compartido.
Kubernetes autohospedado requiere experiencia en la gestión y el mantenimiento de la infraestructura subyacente.
Usted es responsable de aprovisionar, configurar y monitorear los servidores, las redes, el almacenamiento y otros componentes del clúster. Esto puede llevar mucho tiempo y requerir recursos dedicados y contratación adicional.
El escalado de clústeres de Kubernetes autohospedados puede ser más complejo en comparación con los servicios administrados que ofrecen capacidades de escalado automatizado.
Debe planificar y aprovisionar recursos con anticipación para manejar las cargas máximas, y agregar o eliminar nodos puede requerir una intervención manual.
Kubernetes autohospedado presenta complejidades operativas adicionales, como la gestión de actualizaciones, parches, copias de seguridad y alta disponibilidad. Estas tareas requieren una planificación, prueba y coordinación cuidadosas para garantizar una interrupción mínima del clúster y las aplicaciones o, de lo contrario, un aumento en el tiempo de inactividad de la producción.
Kubeadm es una herramienta de línea de comandos que simplifica el proceso de configuración y administración de un clúster de Kubernetes, lo que facilita que los miembros de la comunidad técnica se sumerjan en el mundo de la orquestación de contenedores.
Piense en kubeadm
como su asistente de confianza que se ocupa de los detalles esenciales de la configuración del clúster , lo que le permite concentrarse en el panorama general.
Automatiza tareas complejas como configurar componentes esenciales, generar certificados y garantizar que su clúster siga las mejores prácticas.
Echemos un vistazo a algunos ejemplos y comandos para comprender mejor cómo funciona kubeadm
.
Comando de ejemplo n.º 1: ` kubeadm init
`
Aquí se explica cómo usar el comando anterior.
kubeadm init --pod-network-cidr=192.168.0.0/16
Este comando inicializa el plano de control en el nodo principal. Genera los certificados necesarios, configura el servidor API, etc. y otros componentes vitales.
El indicador ` --pod-network-cidr ` especifica el rango de direcciones IP para la red del módulo en el clúster.
Comando de ejemplo n.º 2: ` kubeadm join
`
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
Este comando une un nodo trabajador al clúster. Debe proporcionar la IP y el puerto del nodo maestro, junto con un token y un hash de certificado de CA de token de descubrimiento, que se pueden obtener durante la inicialización del plano de control.
Comando: ` kubeadm reset
`
kubeadm reset --force
Este comando restablece un clúster, elimina todos los componentes instalados y devuelve el nodo a su estado anterior a Kubernetes. El indicador ` --force ` garantiza un restablecimiento completo.
Comando: ` kubeadm upgrade
Aquí se explica cómo usar el comando kubeadm
anterior.
kubeadm upgrade plan
Este comando lo ayuda a actualizar su versión de Kubernetes. Comprueba las actualizaciones disponibles y proporciona un plan para actualizar los componentes del plano de control.
Aquí hay una lista de comandos de kubeadm de uso común, seguida de un ejemplo relevante.
kubeadm init --pod-network-cidr=192.168.0.0/16
En el ejemplo anterior, el comando inicializa el plano de control en el nodo maestro, genera certificados y configura los componentes esenciales. El indicador ` --pod-network-cidr ` especifica el rango de direcciones IP de la red del módulo.
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
El comando anterior une un nodo de trabajo al clúster al conectarse al nodo maestro especificado mediante un token y un hash de certificado de CA de token de descubrimiento.
kubeadm reset --force
El comando anterior restablece un nodo, elimina todos los componentes de Kubernetes instalados y lo devuelve a su estado anterior a Kubernetes. El indicador ` --force ` garantiza un restablecimiento completo.
kubeadm upgrade plan
El comando anterior proporciona un plan de actualización, verificando las actualizaciones disponibles para los componentes del plano de control.
kubeadm token create
Este comando kubeadm administra los tokens de autenticación que se usan para unir nodos al clúster. Este ejemplo genera un nuevo token.
kubeadm config print init-defaults
El comando anterior administra los archivos de configuración de kubeadm. Este ejemplo imprime la configuración predeterminada para la inicialización del clúster.
kubeadm version
El comando anterior imprime la versión de kubeadm.
kubeadm config images list
Utilice el comando anterior para imprimir una lista de imágenes necesarias para la versión actual de Kubernetes.
Este comando lo ayuda a determinar las imágenes de contenedor necesarias para la administración manual de imágenes de contenedor. Reemplace ` list ` con ` pull ` para extraer imágenes de configuración.
kubeadm token create --print-join-command
El comando anterior genera un nuevo token que se puede usar para unir nodos al clúster. El indicador ` --print-join-command ` muestra el comando de unión que se ejecutará en los nodos trabajadores.
kubeadm token list
El comando anterior enumera los tokens activos junto con su tiempo de creación y vencimiento asociados.
kubeadm token delete <token_value>
Use el comando anterior para eliminar un token específico, dejándolo inutilizable para las uniones de nodos.
kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml
El comando anterior migra un archivo de configuración de una versión anterior a una nueva versión, lo que permite actualizaciones sin problemas de la configuración.
kubeadm certs check-expirationkubeadm certs certificate-key
Los comandos anteriores comprueban el estado de caducidad de los certificados utilizados por los componentes del plano de control y proporcionan advertencias para los certificados que están a punto de caducar. El segundo comando genera la clave.
kubeadm init phase kubelet-start --config config.yaml
A partir de un archivo InitConfiguration, el comando anterior crea un archivo de entorno dinámico con banderas de kubelet.
kubeadm join phase control-plane-prepare
El comando anterior ejecuta una fase específica durante la unión de un nodo trabajador al plano de control. Este ejemplo ejecuta la fase ` control-plane-prepare` , que prepara el nodo trabajador para convertirse en un nodo del plano de control.
kubeadm kubeconfig user --client-name=foo --config=bar
Use el comando anterior para generar un archivo kubeconfig
para un usuario adicional llamado foo usando una barra de archivos de configuración kubeadm.
kubeadm reset phase preflight
El comando anterior ejecuta una fase específica durante el proceso de reinicio de un nodo. Este ejemplo ejecuta la fase ` preflight
, que realiza comprobaciones previas al reinicio antes de eliminar los componentes de Kubernetes.
kubeadm upgrade plan
El comando anterior muestra un plan de actualización para los componentes del plano de control, que muestra las versiones disponibles y las acciones necesarias para la actualización.
kubeadm upgrade apply v1.22.2
Utilice el comando anterior para aplicar una versión específica de Kubernetes al plano de control, actualizando sus componentes a la versión especificada.
kubeadm upgrade node
Este comando actualiza kubelet
y kube-proxy en un nodo trabajador para que coincidan con la versión del plano de control.
Para crear un clúster de Kubernetes con kubeadm
, debe asegurarse de que su entorno cumpla con los requisitos previos necesarios.
Aquí hay una guía paso a paso sobre cómo crear un clúster de Kubernetes usando kubeadm
, incluidos los requisitos previos, instrucciones detalladas, ejemplos y comandos.
Dos o más máquinas que ejecutan una distribución de Linux compatible (p. ej., Ubuntu, CentOS o Red Hat Enterprise Linux) con Docker instalado.
Se recomiendan 2 GiB o más de RAM por máquina; cualquier cosa menos deja espacio limitado para su software.
Deshabilite el espacio de intercambio en todas las máquinas.
Configure un nombre de host único, una dirección MAC y product_uuid para cada máquina.
Todas las máquinas en el clúster tienen conectividad de red completa. Puede conectarse a una red pública o privada.
Abra los puertos necesarios (por ejemplo, 6443, 2379-2380, 10250, 10251, 10252) en su firewall.
En todas las máquinas, instale Docker utilizando la guía de Docker para su distribución de Linux.
Instale ` kubeadm
`, ` kubelet
` y ` kubectl
` usando los siguientes comandos en todas las máquinas:
sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
En el nodo del plano de control deseado, inicialice el clúster con el comando ` kubeadm init
`:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
Nota: Ajuste el indicador ` --pod-network-cidr ` si planea usar una red de pod diferente.
Una vez completada la inicialización, el comando generará un comando ` kubeadm join
` con un token y un hash. Asegúrese de copiar este comando, ya que se usará para unir los nodos trabajadores al clúster más adelante.
kubectl
En el nodo del plano de control, cree el directorio necesario y copie el archivo kubeconfig
:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
En el nodo del plano de control, implemente un complemento de red de pod. Por ejemplo, puedes usar Calico:
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml
En cada nodo trabajador, ejecute el comando ` kubeadm join
` que se generó durante la inicialización del plano de control (desde el Paso 2). Este comando normalmente se ve así:
sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
En el nodo del plano de control, verifique el estado del clúster usando ` kubectl
`:
kubectl get nodes
¡Felicidades! Ha creado correctamente un clúster de Kubernetes utilizando ` kubeadm
`. Ahora puede implementar y administrar sus aplicaciones en el clúster.
kubeadm
Para administrar los componentes del clúster con kubeadm
, puede usar varios comandos para realizar tareas como actualizar el clúster, agregar o quitar nodos y administrar el plano de control.
Aquí hay una guía paso a paso sobre cómo administrar los componentes del clúster con kubeadm
, incluidos comandos detallados con comentarios de código.
Compruebe la versión actual de Kubernetes en el nodo del plano de control:
kubectl version --short
Actualice ` kubeadm
`, ` kubelet
` y ` kubectl
` en todos los nodos para que coincidan con la versión deseada de Kubernetes:
# Upgrade kubeadmsudo apt-get updatesudo apt-get install -y kubeadm=<desired_version># Upgrade kubelet and kubectlsudo apt-get updatesudo apt-get install -y kubelet=<desired_version> kubectl=<desired_version># Hold the packages to prevent automatic upgradessudo apt-mark hold kubeadm kubelet kubectl
En el nodo del plano de control, inicie el proceso de actualización:
sudo kubeadm upgrade plansudo kubeadm upgrade apply <desired_version>
Upgrade the kubelet configuration on all nodes:
sudo kubeadm upgrade node
Verifique el estado de la actualización:
kubectl get nodeskubectl version --short
En el nodo del plano de control, genere un nuevo comando kubeadm join :
sudo kubeadm token create --print-join-command
En los nodos trabajadores, ejecute el comando kubeadm join para unirlos al clúster:
sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
Verifique el estado de los nuevos nodos trabajadores:
kubectl get nodes
Drene el nodo que desea eliminar:
kubectl drain <node_name> --ignore-daemonsets
En el nodo del plano de control, elimine el nodo:
sudo kubeadm reset
En el nodo del plano de control, elimine el nodo del clúster:
kubectl delete node <node_name>
Actualice los componentes del plano de control en el nodo del plano de control:
sudo apt-get update sudo apt-get install -y kubeadm=<desired_version> kubelet=<desired_version> kubectl=<desired_version> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <desired_version> sudo systemctl restart kubelet
Verifique el estado de la actualización:
kubectl get nodes kubectl version --short
Drain the control plane node you want to remove:
kubectl drain <control_plane_node> --ignore-daemonsets
En el nodo del plano de control, elimine los componentes del plano de control con el siguiente comando kubeadm .
sudo kubeadm reset
En el nodo del plano de control, elimine el nodo del plano de control del clúster:
kubectl delete node <control_plane_node>
Nota: Administrar los componentes del clúster con kubeadm requiere precaución, ya que puede afectar la estabilidad y la disponibilidad del clúster. Asegúrese de tener un plan de respaldo y siga la documentación oficial de Kubernetes para obtener instrucciones detalladas específicas para su configuración y requisitos.
Cuando se utiliza para los fines previstos, Kubeadm es una herramienta excelente. Aquí hay tres prácticas recomendadas que debe recordar para usar la herramienta adecuada para el trabajo y aprovechar al máximo kubeadm.
En general, kubeadm no debe utilizarse para clústeres de producción porque carece de la capacidad de escalado automático de nodos y clústeres. Esto se debe al hecho de que el escalado automático de nodos requiere el control de la infraestructura y el hardware subyacentes, que kubeadm delegó a otras herramientas.
Kubeadm no tiene un clúster multi-etcd de forma predeterminada para almacenar el estado del clúster. Realice copias de seguridad regulares de etcd en caso de que algo salga mal.
Kubeadm no puede apagar máquinas que no están en uso.
Por lo tanto, para optimizar el costo en el clúster de Kubernetes mediante kubeadm
, deberá usar una solución externa para realizar un seguimiento de los nodos de trabajo y su utilización de recursos.
También publicado aquí.
La imagen principal de este artículo fue generada porAI Image Generator de HackerNoon a través de los "contenedores" de aviso.