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
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
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.pem
y 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.
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
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
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
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
¡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 ~!