Palabras para describir la configuración de K3S.
Esto es difícil. Es
muy difícil de configurar. ¿
No es esto exagerado? ¿
Qué es el balanceador de carga? ¿
Por qué necesito dos balanceadores de carga? ¿
Debería usar ese CD?
Necesito dos balanceadores de carga y
mantener viva la D. ¿
Qué es MetalLB? ¿Has
oído hablar de CubeVIP? ¿
No es eso un punto único de falla?
Sé que
automatizaré todo
hoy. No solo vamos a configurar K3S
con NCD y la instalación de HA con Cube
VIP y Middle of B, sino que también vamos
a automatizar todo para
que no podamos arruinarlo realmente. Entonces,
vamos a automatizar completamente la
instalación de K3S para que sea 100%
repetible
y luego lo desmantelaremos todo como
si nunca hubiera sucedido. Pero antes de hacerlo, un
gran agradecimiento a nuestro patrocinador Microcenter.
Si estás pensando en construir una nueva PC,
no busques más allá de
Microcenter. Si nunca has estado en
Microcenter, te estás perdiendo la oportunidad de ver
una gran selección de tecnología en persona.
Tienen todo para ti. Constructores de PC personalizados,
desde SSD y discos duros hasta
fuentes de alimentación, memoria, refrigeración por aire y
agua, placas base,
tarjetas de vídeo, procesadores y más. Microcenter
es su tienda única para
personalizar totalmente su próxima construcción de PC y no se
preocupe si es la primera vez que construye una
PC, tienen mucho personal útil y
elegible que está allí para ayudarlo
y lo orientará en la
dirección correcta para que no intente
aplicar pasta térmica como esta.
Microcenter ha tenido la amabilidad de brindarles a
todos los nuevos clientes un SSD gratuito y está
disponible solo en la tienda, así que vea el enlace
en la descripción para obtener más detalles. Entonces, ¿cómo
llegué aquí? Bueno, como puede que
sepa o no, he estado ejecutando K3S en mi propio
entorno durante bastante tiempo e
incluso tengo un video sobre cómo configurar K3S con
mi Sequel. Ahora, no hay nada de malo con
la versión K3S de mi Sequel, funciona muy
bien, pero en ese momento la versión LCD
no estaba disponible y la versión LCD es
súper interesante porque crea una
base de datos de alta disponibilidad en los nodos
en lugar de alojarla fuera del
clúster y justo en ese momento vi
Jeff Galen creó un video sobre Ansible y
eso me llevó por un camino sin salida aprendiendo
Ansible creando un video sobre Ansible y
automatizando muchas tareas bueno, ya sabes
cómo va eso de todos modos, así que encontré ese
repositorio de Github, lo cloné y creé algunas
máquinas virtuales y luego intenté
aprovisionar un clúster de alta disponibilidad,
pero había solo un problema: el
libro de jugadas de Ansible solo admitía poner en
marcha un nodo LCD y eso significaba solo un
nodo de servidor que no es Ha, quiero decir, está
configurado para Ha, pero tendría que
agregar manualmente nodos de servidor adicionales para
hacerlo Ha y eso no es divertido, así que
técnicamente no era Ha listo para usar,
así que decidí investigar en el código
y en las ramas y encontré una bifurcación
donde alguien realmente arregló ese problema
para que pudiera crear un
clúster de alta disponibilidad listo para usar con Ansible y
vi que también agregaron soporte para Cube
VIP, esto fue increíble porque esto es
exactamente lo que estaba tratando de hacer. Me encanta el
código abierto, así que un gran agradecimiento al usuario
212 850a,
esto me dio un buen punto de partida para
automatizar el descansa de nuevo, muchas gracias
a la comunidad de código abierto, Jeff Gearling
y al usuario 212 850a. Después de investigar
un poco, descubrí que la mayor parte
funcionaba, pero necesitaba algunas actualizaciones
y algunos cambios de configuración para funcionar
con la última versión de Qvim junto
con algunas otras características que quería agregar,
así que decidí arremangarme
y comenzar a trabajar en esta bifurcación en
mi propia rama y antes de hacerlo
público, quería lograr algunas
cosas. Quería asegurarme de que cualquiera que
usara esto pudiera comenzar con una
cantidad ilimitada de nodos. Quería asegurarme
de que Qvip fuera sólido como una roca y luego
crearía un balanceador de carga
que podría usar para hacer que K3s sea
tolerante a fallas. También quería automatizar un
balanceador de carga externo para que cuando
exponga el servicio obtenga una dirección IP
para ese servicio de su clúster y
luego cualquiera pueda usar esa dirección IP para
acceder a los servicios dentro de K3s, así que tenía
algunas opciones para este paso y una
aclaración rápida para estos dos
balanceadores de carga. El primer balanceador de carga que
normalmente necesita en K3s es un balanceador de carga
para su API de Kubernetes: este es el
balanceador de carga para el plano de control y
debe ser tolerante a fallas para que, si
emite comandos k3s, aún pueda obtener una
respuesta y el otro
balanceador de carga es un balanceador de carga de servicio o
Kubernetes para que exponga los servicios
en la mayoría de los entornos de nube, proporcionan un
balanceador de carga en la nube para que exponga los
servicios y este balanceador de carga de servicio del
que estoy hablando es para
entornos que no son de nube en
entornos autoalojados y, dado que no tenemos un
balanceador de carga en la nube que nos brinde direcciones IP para
exponer nuestros servicios en el exterior, necesitamos
usar algo que pueda emular un
balanceador de carga en la nube al que Kubernetes pueda solicitar
una dirección IP para que nuestros servicios
puedan exponerse, así que tuve que elegir entre
balanceadores de carga, QVIP en realidad puede hacer
ambas cosas, puede ser un balanceador de carga de servicio
o un balanceador de carga para su
plano de control para sus nodos LCD de Kubernetes, esto
sonaba como una gran solución porque
entonces no tenía que usar Metal lb,
pero me encanta Metal LV, pero asumir una
dependencia menos sonaba como una buena idea,
especialmente cuando se trata de Para los
cambios importantes, es menos difícil de administrar, así que,
por supuesto, la otra opción para exponer
mis servicios era simplemente usar Metal, aunque,
honestamente, después de horas y horas de intentar que el
balanceador de carga del servicio Qvic
pudiera funcionar con mis servicios, decidí
recurrir al viejo y confiable Metal LB
y Metal LB simplemente funciona y pude usar
mi configuración existente para ello, así que
realmente no fue una pérdida en absoluto, así que en este
punto tenía mi arquitectura prácticamente
decidida, Qubit para mi plano de control de Kubernetes
y Metal LLB para mi balanceador de carga de servicio
y una vez que resolví la creación de
múltiples nodos de servidor, configurando Cube
VIP y configurando Middle of B,
era hora de hacer algunas pruebas para mi
prueba, creé cinco nodos y estas son
notas de imagen de nube de Ubuntu estándar y
recientemente creé un video sobre el
aprovisionamiento de nuevas máquinas Ubuntu usando
Cloud Image y Cloud Init. Son el
servidor mínimo de Ubuntu perfecto para K3,
simplemente échale un vistazo. Así que una vez que tuve
estos cinco servidores en funcionamiento y
tomé nota de sus direcciones IP,
era hora de configurar MyAnsible.
playbook entonces aquí en el archivo groupbars
es donde se configuran todas mis variables para
ansible primero puedes especificar la
versión de k3s y luego puedes especificar un
usuario ansible y este es el usuario con el que
ansible se ejecutará y otro
consejo rápido si necesitas configurar ansible tengo
un video muy rápido sobre las
cosas mínimas que necesitas hacer para configurar
ansible también es una excelente introducción para esto lo
siguiente es configurar un directorio del sistema y
realmente no necesitarás tocar esto lo siguiente
es configurar una interfaz flannel de eth0 por
lo que flannel es responsable de la red
en k3s y es bastante denso pero si
quieres saber más al respecto deberías
revisar su repositorio github pero
según tengo entendido es responsable de la
comunicación de capa 3 entre nodos en un
clúster y entonces aquí lo configuro en 0 porque
esa es la interfaz ethernet en estas
máquinas virtuales luego estoy configurando un
punto final del servidor y esta es la
dirección ip del vip que se creará
para el plano de control de kubernetes y entonces se
crea este vip En lugar de tener que
crear balanceadores de carga externos junto
con Keepa Live, esto crea un VIP
que está altamente disponible y que se expone
a través del clúster de Kubernetes con el que
podemos comunicarnos y Kubernetes
también puede, por lo que es bastante asombroso que se
encargue de dos o tres máquinas virtuales adicionales
que ya no tienes que mantener.
A continuación, configuro mi token K3S y este
debería ser un secreto que
obviamente debes mantener en secreto, pero es tu
contraseña o tu token para K3S
y solo lo necesitarás al
principio o si te unes a
nodos adicionales más tarde. Luego, agregué algunos
argumentos adicionales a mi servidor y a mis agentes,
pero en lo que respecta al servidor, deshabilité
el balanceador de carga del servicio. Querremos
hacer eso si estamos ejecutando Metal of B o un
balanceador de carga del servicio, que es lo que estamos haciendo. Le estoy
diciendo que no implemente tráfico. Esto
depende de usted. Si desea implementar tráfico,
puede eliminar ese argumento, pero
lo eliminaré para poder instalarlo
con Helm más tarde porque me gusta
instalar el tráfico por mi cuenta más tarde con
Helm, pero si desea instalarlo,
puede simplemente eliminar esto. argumento el
siguiente argumento solo establece
permisos en la configuración cooperativa y esto es
realmente solo por conveniencia para que no tenga que
ejecutar sudo cuando estoy conectado de forma remota a un
nodo para ejecutar el control de cupé probablemente sea
una buena idea no hacer esto, pero me
cansé tanto de escribir sudo cada vez que estaba
probando esto las mil veces que lo hice
funcionar
que simplemente cambié los permisos de
este archivo, pero siéntete libre de eliminar ese
argumento si lo deseas y la siguiente cadena
de argumentos son bastantes,
pero los dejaré en la
documentación, pero para resumir
el resto de estos argumentos, así como los
argumentos del agente que ves aquí, es que descubrí
que necesitaba la mayoría de estos argumentos para hacer que
k3s sea un poco más receptivo. ¿Qué quiero
decir con eso? Uno de los valores predeterminados para k3s
es que si el nodo no está listo, no
programará pods adicionales hasta que
ese nodo esté listo, pero el tiempo de espera
es de unos cinco minutos, lo cual es
mucho tiempo, quiero decir que no es mucho tiempo si
estás ejecutando varias réplicas de un
pod y estás ejecutando pods en aj
casi no lo notarías en absoluto,
especialmente en instalaciones más grandes, pero
en instalaciones más pequeñas como los laboratorios caseros,
descubrí que cinco minutos es un
tiempo realmente largo, especialmente si estás ejecutando una
réplica de uno, lo que significa que tu servicio estará
inactivo durante al menos cinco minutos, así que
he buscado en Internet y encontré muchos de
estos argumentos y
los he estado usando en mi
laboratorio de producción en casa
durante aproximadamente un año y parecen
funcionar bastante bien, pero es posible que debas
hacer algunos ajustes según tus
servicios, tu hardware y lo que funcione
mejor para ti y, nuevamente, k3s funcionará
sin ninguno de esos argumentos que acabo de
mencionar y tal vez deberías probarlo de
esa manera primero, a continuación, configuro la
versión de etiqueta para cube vib y esta es solo
la etiqueta de imagen del contenedor, la
versión actual es
v0.4.2 y eso es lo que estoy especificando
aquí e hice cosas similares también para metal
lb, así que para metal lb hay un
contenedor de altavoz cuya última versión es
0.12.1 y luego también hay una etiqueta de controlador
que también configuré en 0.12.1 ahora
estos deberían estar en sincronía en el mismo
versión, pero lo hice configurable en mi
plantilla en caso de que no lo sean para no tener que
averiguarlo en
el futuro y luego elegí un rango de IP
para metal lb, por lo que este es el rango de IP
que cuando exponga servicios, se
expondrán y podrá comunicarse con
ellos. Le mostraré algunos ejemplos aquí en
un momento, pero configuré un rango de 192
168 30.80 hasta 90. así que obtengo
10,
así que obtengo 11 IP aquí, normalmente solo
necesito uno o dos, pero configuré el rango de
80 a 90 por si acaso después de eso
revisé mi host.ini para asegurarme de que tenía
todas las direcciones IP aquí y las
tres máquinas virtuales que voy a usar
para mis maestros son 38 39 y 40. estos
también se conocen como sus
notas del servidor y luego mis nodos de trabajo o mis
agentes serán 41 y 42. entonces
esto significa tres servidores con
plano de control de kubernetes y ncd, lo que lo hace altamente
disponible y luego dos nodos de trabajo para
ejecutar mis cargas de trabajo de usuario y si tuviera más
máquinas virtuales, simplemente las agregaría
a continuación, así que con todo esto configurado,
ejecuté el libro de jugadas del sitio y lo apunté a
mi host.ini, pero antes de hacer eso,
comencé a hacer ping a mi vip, obviamente
no está allí tan pronto como aparece,
debería responder, así que ejecuté el libro de jugadas
e instaló y configuró k3s en
uno de los nodos del servidor
poco después de eso, el vip comenzó a
responder, lo que significa que qvip está
instalado en esa máquina y el vip está
activo
y luego comenzó a unir otras
máquinas al clúster
y luego, poco después de eso, tuve un
clúster de kubernetes de alta disponibilidad en k3s
y ese es un clúster ha con ese cd
con un balanceador de carga que también es ha para
mi plano de control y balanceadores de carga aha para
todos mis servicios, pero necesitamos
verificar, espero que confíes en mí, pero
también verifiquemos para que podamos ingresar por ssh a uno de
nuestros nodos de servidor una vez que estemos allí, podemos
ejecutar sudo coop control kit nodes y
podemos ver que tenemos cinco nodos y
todos están en línea puedes ver que tengo tres
planos de control en cd masters
y dos trabajadores o agentes listos para cargas
de trabajo
super super genial
así que en lugar de ssh en este servidor
copiemos nuestra configuración de coup localmente para que
podamos ejecutar el resto de los comandos así que
salgamos de aquí querrás
crear un directorio para tu archivo de configuración de coup
si nunca has hecho esto antes o hacer una
copia de seguridad de tu archivo de configuración de coupe existente
si está ahí entonces simplemente haremos una
copia segura o scp de ese archivo desde uno de los
servidores a nuestra máquina local después de que se
transfiera podemos ejecutar un control de coupe
obtener nodos y ver lo mismo genial
así que ahora tenemos cube control ejecutándose en
esta máquina a continuación creé una
implementación de nginx super simple para kubernetes
esto implementa una versión alpine de nginx
y establece las réplicas en tres lo hice
ejecutando coop control apply dash
f y luego la ruta al
manifiesto de implementación y luego kubernetes me dijo
que se creó la implementación entonces
quería verificar para ver cómo
estaba funcionando esta implementación así que ejecuté coop
control describe deployment nginx y
puedes ver que está implementado y el
estado deseado es tres y se
actualizaron tres, tres en total, tres disponibles y
cero no disponibles, por lo que mis tres
pods nginx están en funcionamiento, pero esto
no me da acceso a estos pods
fuera de kubernetes. Aquí es donde
entra un servicio y un balanceador de carga. La
razón exacta por la que instalamos metal lb,
así que creé un archivo de servicio súper simple.
Este archivo de servicio es solo un servicio que
apunta a la aplicación de nginx que
acabamos de crear esa implementación y le decimos a
este servicio que lo exponga en el puerto 80 y
que el puerto de destino para ese contenedor
también es el puerto 80 y aquí es donde
ocurre la magia, le decimos que el
tipo es balanceador de carga de tipo esto le dice a
kubernetes que le diga a nuestro balanceador de carga en la nube que
nos dé una ip y nuestro
balanceador de carga en la nube en este momento es metal lb,
por lo que metal lb debería darnos una dirección ip
que especificamos en ese rango y si
todo eso sucede, deberíamos poder
acceder a nuestro servicio, entonces ejecuté coop
control apply dash f y luego la ruta
al archivo de servicio kubernetes me dijo que
creó el servicio para mí y luego
quise verificarlo, así que ejecuté coop
control describe service nginx y
pudimos ver aquí que expuso un
ingreso de balanceador de carga de una de las
direcciones IP que especificamos en metal lb,
por lo que esto significa que mi implementación nginx de
tres pods ahora está expuesta en un
balanceador de carga en esta IP 192 168 30.80 y si
vamos a esa dirección IP, podemos ver la
página de Hola Mundo desde el motor x, esto es
increíble, así que esto prueba de principio a fin que el
lb medio está funcionando, pero
nunca probamos realmente el lado ha de cubit,
sabemos que podemos emitir
comandos de kubernetes ahora mismo con goog control, pero
no tomamos ninguna de esas notas,
así que hagámoslo también, así que comencé a hacer
ping a ese vip y mientras lo hacía,
lo conecté de forma remota a mi primer nodo maestro o
al nodo del servidor que ejecuta el
plano de control y también es uno de los
nodos que ejecuta cube vip que está
suministrando este vip, así que decidí
apagarlo y como puedes ver a la derecha
sigo recibiendo respuestas y puedes
ver a la izquierda que no estoy recibiendo una
respuesta de esa máquina, así que esto significa que
tenemos un h a vip ahora no puedo
apagar un segundo nodo un clúster aja de
solo tres nodos solo puede perder una
máquina, así que si apago otra
máquina no tendré acceso a
kubernetes pero seguiré teniendo acceso
a todas mis cargas de trabajo que se están ejecutando es
solo que no puedo cambiar el estado
de kubernetes ni acceder a él a través del
control de cupé, así que
esto es increíble, así que inicié la copia de seguridad de ese
otro nodo y está respondiendo
y obviamente qbip sigue respondiendo entonces, ¿
qué se hace después de construir el
clúster k3s perfecto?
lo quemamos por supuesto, también hay un
libro de jugadas para restablecer totalmente k3s a
su estado inicial, por lo que ejecutar este
libro de jugadas y apuntar al mismo host
lo limpiará por completo limpiará
todos los nodos eliminará todos los contenedores y
lo restablecerá al estado en el que estaba antes de que
ejecutáramos este libro de jugadas esto fue muy
útil ya que estaba probando mis cambios
debe tener ejecuta esto al menos mil
veces y después de que esté hecho, volvemos a
un buen estado. Una nota: es posible que desees
reiniciarlos después. He
notado que el vip permanece activo y
responderá, así que tengo un libro de jugadas para
reiniciar todas estas máquinas y este
libro de jugadas realmente esperará a que
respondan antes de informar un éxito
así como así. Entonces, esto es todo con lo que
todos luchan al
configurar k3s. No más usar mysql y
hacer eso. Si no lo desea, no
más girar balanceadores de carga adicionales
y mantener un d en vivo y hacer
esos aj si no lo desea. No más
configurar metal lb o instalar con
helm si no lo desea. Solo un
libro de jugadas simple que hace girar todo
eso de una vez y luego puede
quemarlo si también lo desea. Nuevamente, un
gran agradecimiento a la comunidad k3s que
hizo este libro de jugadas original junto con
jeff gearling. Muchas gracias y también
gracias a github user212 850a.
Muchas gracias. Tendré enlaces en la
descripción a todo el código que
tengo en la descripción a continuación, así que ¿qué
piensas de poner en marcha una
versión verdaderamente ha de k3s usando ansible? ¿Hay
algo que deba aportar al
script para que te resulte más fácil? Házmelo
saber en la sección de comentarios a continuación y
recuerda que si encuentras algo útil en este
video,
no olvides darle me gusta y suscribirte.
Gracias por ver Fix the Lights. Si
no estuviste aquí la semana pasada, un pequeño episodio
con las luces. No pude entender
qué estaba pasando con mis luces inferiores.
Mis luces inferiores terminaron teniendo un pequeño
problema y me llevó mucho tiempo darme
cuenta de que terminó siendo una
regla de firewall. Así que si no es DNS, es una regla de firewall. Está
bien, cambiando la luz
tan pronto como las menciono,
si no es DNS, es una regla de firewall.
Ahora realmente estás probando las minas. Está
bien, va a suceder, va a
suceder.