Cómo configurar un clúster etcd de alta disponibilidad a nivel de producción

En el artículo anterior , presentamos la arquitectura y los escenarios de implementación de K3 en detalle y proporcionamos una buena dirección para aquellos que aún no han entendido los K3. Por lo tanto, en este artículo exploraremos cómo configurar un clúster etcd de 3 nodos, que se utilizará en un clúster K3s de múltiples nodos de alta disponibilidad.

etcd es uno de los proyectos de código abierto más populares en el ecosistema nativo de la nube. Es un proyecto incubado por la Cloud Native Computing Foundation (CNCF) y ahora se ha convertido en un componente central de la infraestructura de Kubernetes.

Al final de este tutorial, completará la implementación de un clúster etcd de 3 nodos con TLS habilitado como almacenamiento de datos externo para un clúster K3s de alta disponibilidad con múltiples maestros.

Primero, asegúrese de tener 3 hosts Linux con direcciones IP estáticas. En mi entorno experimental, estoy ejecutando 4 mini computadoras Intel NUC. Estas 4 computadoras ejecutan Ubuntu 18.04, con direcciones IP que van desde 10.0.0.60 a 10.0.0.63. Instalaremos etcd en hosts con direcciones IP 10.0.0.60, 10.0.0.61 y 10.0.0.62. Debe reemplazar estas direcciones IP con su propio conjunto de direcciones cuando practique por su cuenta.

Descargar el archivo binario etcd

En cada host Linux, ejecute el siguiente comando para descargar e instalar la última versión del archivo binario:

ETCD_VER=v3.4.10
 
DOWNLOAD_URL=https://storage.googleapis.com/etcd
 
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
 
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
 
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
 
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
 
chmod +x /tmp/etcd-download-test/etcd
chmod +x /tmp/etcd-download-test/etcdctl 
 
#Verify the downloads
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
 
#Move them to the bin folder
sudo mv /tmp/etcd-download-test/etcd /usr/local/bin
sudo mv /tmp/etcd-download-test/etcdctl /usr/local/bin

Inserte la descripción de la imagen aquí

Generar y distribuir certificados

Usaremos la herramienta cfssl de Cloudflare para generar certificados y claves. Si usa una Mac como estación de trabajo, puede instalarla usando Homebrew.

brew install cfssl

Inserte la descripción de la imagen aquí

Cree un directorio llamado certs y ejecute el siguiente comando para generar el certificado de CA y el certificado de servidor y la combinación de claves para cada host.

mkdir certs && cd certs

Primero, cree un certificado de CA, que será utilizado por todos los servidores y clientes de etcd.

echo '{"CN":"CA","key":{"algo":"rsa","size":2048}}' | cfssl gencert -initca - | cfssljson -bare ca -
echo '{"signing":{"default":{"expiry":"43800h","usages":["signing","key encipherment","server auth","client auth"]}}}' > ca-config.json

Esto generará tres Files- ca-key.pem, ca.pemy ca.csr.

A continuación, generaremos certificados y claves para el primer nodo.

export NAME=node-1
export ADDRESS=10.0.0.60,$NAME
echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME

Repita los pasos anteriores para los siguientes dos nodos.

export NAME=node-2
export ADDRESS=10.0.0.61,$NAME
echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME
export NAME=node-3
export ADDRESS=10.0.0.62,$NAME

No olvide reemplazar la dirección IP y el nombre del nodo con su propia combinación.

En este punto, hemos generado certificados y claves para la CA y los tres nodos.

Inserte la descripción de la imagen aquí

Ahora es el momento de comenzar a distribuir certificados a cada nodo del clúster.

Ejecute el siguiente comando, reemplace el nombre de usuario y la dirección IP y copie el certificado en el nodo correspondiente.

HOST=10.0.0.60
USER=ubuntu
 
scp ca.pem $USER@$HOST:etcd-ca.crt
scp node-1.pem $USER@$HOST:server.crt
scp node-1-key.pem $USER@$HOST:server.key

SSH en cada nodo y ejecute el siguiente comando para mover el certificado al directorio apropiado.

HOST=10.0.0.60
USER=ubuntu
 
ssh $USER@$HOST
sudo mkdir -p /etc/etcd
sudo mv * /etc/etcd
sudo chmod 600 /etc/etcd/server.key

Hemos completado la generación y distribución de certificados en cada nodo. A continuación, crearemos archivos de configuración y archivos de unidad Systemd para cada nodo.

Configurar e iniciar el clúster etcd

En el nodo 1, cree un archivo llamado etcd.conf en el directorio etc / etcd con el siguiente contenido:

ETCD_NAME=node-1
ETCD_LISTEN_PEER_URLS="https://10.0.0.60:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.60:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.60:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.60:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"

El archivo para el nodo 2 usa el siguiente contenido:

ETCD_NAME=node-2
ETCD_LISTEN_PEER_URLS="https://10.0.0.61:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.61:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.61:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.61:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"

Finalmente, cree un archivo de configuración para el nodo 3.

ETCD_NAME=node-3
ETCD_LISTEN_PEER_URLS="https://10.0.0.62:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.62:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.62:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.62:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"

No olvide cambiar la dirección IP dedicada de su red.

Una vez completada la configuración, podemos crear archivos de unidad systemd en cada nodo.

Cree un archivo etcd.service en / lib / system / systemd con el siguiente contenido:

[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
 
[Service]
Type=notify
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000
 
[Install]
WantedBy=multi-user.target

Dado que la configuración de cada nodo se ha movido a un archivo dedicado ( /etc/etcd/etcd.conf), los archivos unitarios de todos los nodos permanecen sin cambios.

Ahora estamos listos para iniciar el servicio. Ejecute el siguiente comando en cada nodo para iniciar el clúster etcd:

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd

Asegúrese de que el servicio etcd se haya iniciado y que no haya errores en su funcionamiento.

sudo systemctl status etcd

Inserte la descripción de la imagen aquí

Probar y verificar el clúster

SSH en uno de los nodos y conéctese al clúster a través de etcd CLI.

etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key put foo bar

Insertamos una clave en la base de datos etcd. Veamos si podemos recuperarlo.

etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key get foo

Inserte la descripción de la imagen aquí

A continuación, usemos el punto final de la API para verificar el estado del clúster.

curl --cacert /etc/etcd/etcd-ca.crt --cert /etc/etcd/server.crt --key /etc/etcd/server.key https://10.0.0.60:2379/health

Inserte la descripción de la imagen aquí

Finalmente, asegurémonos de que todos los nodos participen en el clúster.

etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key member list

Inserte la descripción de la imagen aquí

¡Felicidades! Ahora tiene un clúster etcd seguro, distribuido y de alta disponibilidad, que está listo para el entorno de clúster K3s de nivel de producción.

En el siguiente artículo, le mostraré en detalle cómo instalar y configurar un clúster K3s de 4 nodos con un plano de control de alta disponibilidad. ¡Estén atentos ~!

Supongo que te gusta

Origin blog.csdn.net/qq_42206813/article/details/108800891
Recomendado
Clasificación