GNU/Linux >> Tutoriales Linux >  >> Linux

Creación de un clúster de Kubernetes de plano de control único con kubeadm

Introducción

Kubernetes es un clúster y orquestación motor para contenedores Docker. En otras palabras, Kubernetes es una herramienta o software de código abierto que se utiliza para orquestar y administrar contenedores Docker en un entorno de clúster. Kubernetes también se conoce como k8s y fue desarrollado por Google y donado a la "Fundación Cloud Native Computing"

Objetivo

Esta configuración del clúster de kubernetes tendrá 1 nodo maestro con CentOS 7 y 2 nodos trabajadores también conocidos como súbditos tener servidores Windows 2k19 sistema operativo.

Instalaremos y configuraremos el clúster de kubernetes en las máquinas virtuales del centro de datos para administrar los contenedores de Docker. Este clúster incluye 1 maestro (Linux) y 2 nodos trabajadores (Windows), el maestro controlará las programaciones y las implementaciones de módulos en los nodos trabajadores.

Diagrama de arquitectura de Kubernetes

Alguna terminología de Kubernetes importante debe saber antes de iniciar la configuración

ETCD (nodo de clúster) :Kubernetes usa “etcd” como un almacén de base de datos de clave-valor. Almacena la configuración del clúster de Kubernetes en “etcd” .

administrador-controlador-kube: El administrador del controlador de Kubernetes es un demonio que incorpora los bucles de control principales que se envían con Kubernetes. En Kubernetes, un controlador es un bucle de control que observa el estado compartido del clúster a través del "apserver" y realiza cambios intentando mover el estado actual hacia el estado deseado. Ejemplos de controladores que se envían con Kubernetes hoy en día son el controlador de replicación, el controlador de puntos finales, el controlador de espacio de nombres y el controlador de cuentas de servicio

kube-apiserver :el servidor de la API de Kubernetes valida y configura los datos para los objetos de la API, que incluyen pods, servicios, controladores de replicación y otros. El servidor API da servicio a las operaciones REST y proporciona la interfaz para el estado compartido del clúster a través del cual interactúan todos los demás componentes.

programador de Kube: El programador de Kubernetes es una función específica de la carga de trabajo, consciente de la topología y rica en políticas que afecta significativamente la disponibilidad, el rendimiento y la capacidad. El programador debe tener en cuenta los requisitos de recursos individuales y colectivos, los requisitos de calidad del servicio, las restricciones de hardware/software/políticas, las especificaciones de afinidad y antiafinidad, la ubicación de los datos, la interferencia entre cargas de trabajo, los plazos, etc.

kubelet :El “kubelet” es el principal “agente de nodo ” que se ejecuta en cada nodo. Puede registrar el nodo con el apserver usando uno de los siguientes:el nombre de host; una bandera para anular el nombre de host; o lógica específica para un proveedor de nube.

proxy-kube :el proxy de red de Kubernetes se ejecuta en cada nodo. Esto refleja los servicios definidos en la API de Kubernetes en cada nodo y puede realizar reenvíos de flujo TCP, UDP y SCTP simples o reenvíos TCP, UDP y SCTP por turnos a través de un conjunto de back-ends.

Descripción de la configuración del clúster de Kubernetes

En la configuración de Kubernetes, tenemos 1 nodo maestro (CentOS 7) y 2 trabajadores (Win 2k19). Desde el nodo maestro podemos administrar el clúster y sus nodos usando ‘kubeadm ‘y ‘kubectl 'comando.

Kubernetes se puede instalar e implementar utilizando los siguientes métodos:

  • Minikube (es un clúster de kubernetes de un solo nodo)
  • Kops (configuración de kubernetes de múltiples nodos en AWS)
  • Kubeadm (Clúster multinodo en nuestras propias instalaciones)

En este artículo instalaremos la última versión de Kubernetes 1.16 en CentOS 7/RHEL 7 con la utilidad kubeadm. En esta configuración, tomamos 1 servidor CentOS 7 y 2 servidores Windows 2k19 con una instalación mínima. Un servidor actuará como nodo maestro y el resto, dos servidores serán nodos auxiliares o trabajadores

En el Master Node se instalarán los siguientes componentes

  • Servidor API – Proporciona la API de kubernetes usando Jason / Yaml sobre http, los estados de los objetos de la API se almacenan en etcd
  • Programador – Es un programa en el nodo maestro que realiza las tareas de programación, como el lanzamiento de contenedores en los nodos trabajadores según la disponibilidad de recursos
  • Administrador de controladores – El trabajo principal del administrador del controlador es monitorear los controladores de replicación y crear pods para mantener el estado deseado.
  • etc. – Es una base de datos de pares clave-valor. Almacena datos de configuración del clúster y el estado del clúster.
  • Utilidad Kubectl – Es una utilidad de línea de comandos que se conecta al servidor API en el puerto 6443. Los administradores la utilizan para crear pods, servicios, etc.

En los nodos trabajadores, se instalarán los siguientes componentes

  • Cubelet – Es un agente que se ejecuta en cada nodo trabajador, se conecta a Docker y se encarga de crear, iniciar y eliminar contenedores.
  • Proxy de Kube – Enruta el tráfico a los contenedores apropiados según la dirección IP y el número de puerto de la solicitud entrante. En otras palabras, podemos decir que se utiliza para la traducción de puertos.
  • Cápsula – Pod se puede definir como un grupo o varios niveles de contenedores que se implementan en un solo nodo trabajador o en un host Docker.

Pasos de instalación de Kubernetes 1.16 en CentOS 7

Paso 1: Establezca el nombre de host, deshabilite SELinux y configure el firewall, en nuestro caso, el firewall y SELinux están en estado deshabilitado y el nombre de host está configurado como kube-master. Y asegúrese de que todos los nodos estén

Paso 2 :configurar el repositorio de Kubernetes

Los paquetes de Kubernetes no están disponibles en los repositorios predeterminados de CentOS 7 y RHEL 7. Use las URL a continuación para configurar sus repositorios de paquetes.

Paso 3: Instale Kubeadm y Docker usando el siguiente comando

# yum install kubeadm docker -y

Luego inicie y habilite kubectl y docker servicio usando los siguientes comandos.

# systemctl restart docker && systemctl enable docker
# systemctl restart kubelet && systemctl enable kubelet

Paso 4 :Inicialice Kubernetes Master con ‘kubeadm init’

La salida del comando anterior sería algo así como a continuación

Como podemos ver en el resultado, kubernetes master se ha inicializado correctamente. Ejecute los siguientes comandos para usar el clúster como usuario raíz.

Paso 5 :implementar la red de pods en el clúster

Intente ejecutar los siguientes comandos para obtener el estado del clúster y los pods.

kubectl get nodes
kubectl get pods –all-namespaces

Para que el estado del clúster esté listo y el estado de kube-dns se esté ejecutando, implemente la red de módulos para que los contenedores de diferentes hosts se comuniquen entre sí. La red POD es la red superpuesta entre los nodos trabajadores.

Ejecute el siguiente comando para implementar la red.

Ahora ejecute los siguientes comandos para verificar el estado. Como podemos ver, el nodo maestro ahora está listo, ahora agregaremos nodos trabajadores a este clúster de kubernetes.

Selección y configuración de la solución de red del clúster de Kubernetes

Una vez que haya configurado un nodo maestro de Kubernetes, estará listo para elegir una solución de red. Hay varias formas de hacer que la subred del clúster virtual se pueda enrutar entre nodos. Elija una de las siguientes opciones para Kubernetes en Windows hoy:

  • Utilice un complemento CNI como Flannel para configurar una red superpuesta para usted.
  • Use un complemento CNI como Flannel para programar rutas para usted (usa el modo de red l2bridge).
  • Configure un conmutador inteligente en la parte superior del bastidor (ToR) para enrutar la subred.

Franela en modo vxlan

Flannel en modo vxlan se puede usar para configurar una red de superposición virtual configurable que usa túneles VXLAN para enrutar paquetes entre nodos.

Preparar maestro de Kubernetes para Flannel

Se recomienda una pequeña preparación en el maestro de Kubernetes en nuestro clúster. Se recomienda habilitar el tráfico IPv4 en puente a las cadenas de iptables cuando se utiliza Flannel. Esto se puede hacer usando el siguiente comando:

# sudo sysctl net.bridge.bridge-nf-call-iptables=1

Descargar y configurar Flannel

Descargue el manifiesto Flannel más reciente usando el siguiente comando:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Hay dos secciones que debe modificar para habilitar el backend de red vxlan:

  1. En net-conf.json sección de su kube-flannel.yml , vuelva a comprobar:
    • La subred del clúster (p. ej., "10.244.0.0/16") se configura según lo deseado.
    • VNI 4096 está configurado en el backend
    • El puerto 4789 está configurado en el backend
  2. En el cni-conf.json sección de su kube-flannel.yml , cambie el nombre de la red a “vxlan0” .

Después de aplicar los pasos anteriores, su net-conf.json debería tener el siguiente aspecto:

Tu cni-conf.json debería tener el siguiente aspecto:

Iniciar Flannel y validar

Inicie Flannel usando el comando

# kubectl apply -f kube-flannel.yml

A continuación, dado que los pods de Flannel están basados ​​en Linux, aplique nuestro parche Linux NodeSelector a kube-flannel-ds DaemonSet para apuntar solo a Linux usando los siguientes comandos para descargar y configurar NodeSelector

# wget https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
# kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

Después de unos minutos, debería ver todos los pods en ejecución si se implementó la red de pods de Flannel.

Unir los nodos trabajadores de Windows al clúster de Kubernetes

Una vez que haya configurado un nodo maestro de Kubernetes y seleccionado la solución de red deseada, estará listo para unirse a los nodos de Windows Server para formar un clúster. Esto requiere cierta preparación en los nodos de Windows antes de unirse.

Preparación de un nodo de Windows

Instalar Docker (requiere reiniciar)

Kubernetes usa Docker como motor de contenedor, por lo que debemos instalarlo. Puede seguir las instrucciones oficiales de Docs, las instrucciones de Docker o probar los siguientes pasos:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider
Restart-Computer –Force

Si está detrás de un proxy, se deben definir las siguientes variables de entorno de PowerShell:

[Entorno]::SetEnvironmentVariable(“HTTP_PROXY”, “http://proxy.example.com:80/”, [EnvironmentVariableTarget]::Machine)

[Entorno]::SetEnvironmentVariable(“HTTPS_PROXY”, “http://proxy.example.com:443/”, [EnvironmentVariableTarget]::Machine)

Si después de reiniciar ve el siguiente error:

Luego inicie el servicio docker manualmente:

ventana acoplable Iniciar servicio

Preparar Kubernetes para el directorio de Windows

Cree un directorio "Kubernetes para Windows" para almacenar archivos binarios de Kubernetes, así como scripts de implementación y archivos de configuración.

mkdir c:\k

Copiar certificado de Kubernetes

Copie el archivo del certificado de Kubernetes ($HOME/.kube/config ) del maestro a este nuevo C:\k directorio.

Descargar binarios de Kubernetes

Para poder ejecutar Kubernetes, primero debe descargar kubectl , kubelet , y kube-proxy binarios Puede descargarlos desde los enlaces en CHANGELOG.md archivo de los últimos lanzamientos.

  • Por ejemplo, aquí están los binarios de nodo v1.14.
  • Use una herramienta como Expand-Archive para extraer el archivo y colocar los archivos binarios en C:\k\ .

(Opcional) Configurar kubectl en Windows

Si desea controlar el clúster desde Windows, puede hacerlo mediante kubectl dominio. Primero, para hacer kubectl disponible fuera del C:\k\ directorio, modifique el PATH variable de entorno:

$env:Path += ";C:\k"

Si desea que este cambio sea permanente, modifique la variable en el destino de la máquina:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)

A continuación, verificaremos que el certificado del clúster sea válido. Para establecer la ubicación donde kubectl busca el archivo de configuración, puede pasar el --kubeconfig parámetro o modificar el KUBECONFIG Variable ambiental. Por ejemplo, si la configuración se encuentra en C:\k\config :

$env:KUBECONFIG="C:\k\config"

Para hacer que esta configuración sea permanente para el alcance del usuario actual:

[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

Finalmente, para verificar si la configuración se ha descubierto correctamente, puede usar:

kubectl config view

Si recibe un error de conexión

Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.

Debe volver a verificar la ubicación de kubeconfig o intentar copiarla nuevamente.

Si no ve ningún error, el nodo ya está listo para unirse al clúster.

Unirse al nodo de Windows

Según la solución de red que elija, puede:

  1. Únase a los nodos de Windows Server a un clúster Flannel (vxlan o host-gw) (estamos usando esta solución)
  2. Únase a los nodos de Windows Server a un clúster con un conmutador ToR

Unirse a un grupo de Flannel

Hay una colección de secuencias de comandos de implementación de Flannel en este repositorio de Microsoft que lo ayudan a unir este nodo al clúster.

Descargue el script Flannel start.ps1, cuyo contenido debe extraerse a C:\k :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/start.ps1 -o c:\k\start.ps1

Suponiendo que preparó su nodo de Windows y su c:\k El directorio se ve como se muestra a continuación, está listo para unirse al nodo.

Unirse al nodo de Windows

Para simplificar el proceso de unirse a un nodo de Windows, solo necesita ejecutar un único script de Windows para iniciar kubelet , kube-proxy , flanneld y únete al nodo.

cd c:\k

.\start.ps1 -ManagementIP <Windows Node IP> -NetworkMode <network mode>  -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Log directory>

Después de ejecutar esto, debería poder:

  • Ver nodos de Windows unidos mediante kubectl get nodes
  • Vea 3 ventanas de powershell abiertas, una para kubelet, otra para flanneld y otra para kube-proxy
  • Vea los procesos de agente de host para flanneld, kubelet y kube-proxy que se ejecutan en el nodo


Linux
  1. Configurar el clúster de Kubernetes con Rancher

  2. Configure Kubernetes Cluster en Ubuntu 20.04 usando kubeadm

  3. Cómo vaciar un nodo en Kubernetes

  4. kubectl apply vs create:¿Cuál usar para crear recursos en el entorno de clúster de Kubernetes?

  5. grastate.dat con seqno -1 en un clúster en buen estado. ¿Por qué?

Cómo configurar Kubernetes 1.5 con kubeadm en CentOS

Cómo instalar Apache Hadoop en RHEL 8 (clúster de nodo único)

Cómo implementar el clúster de Kubernetes en AWS con Amazon EKS

Cómo implementar Kubernetes de un solo nodo con Microk8s en Ubuntu 20.04

Cómo instalar Hadoop Single Node Cluster (Pseudonode) en CentOS 7

Cómo configurar un clúster de Linux con 2 nodos en RedHat y CentOS