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:
- 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
- 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
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:
- Únase a los nodos de Windows Server a un clúster Flannel (vxlan o host-gw) (estamos usando esta solución)
- Ú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