Como configurar um cluster etcd altamente disponível em nível de produção

No artigo anterior , apresentamos a arquitetura e os cenários de implantação dos K3s em detalhes e fornecemos uma boa orientação para aqueles que ainda não entenderam os K3s. Portanto, neste artigo, exploraremos como configurar um cluster etcd de 3 nós, que será usado em um cluster K3s de vários nós de alta disponibilidade.

etcd é um dos projetos de código aberto mais populares no ecossistema nativo da nuvem. É um projeto incubado pela Cloud Native Computing Foundation (CNCF) e agora se tornou um componente central da infraestrutura do Kubernetes.

No final deste tutorial, você concluirá a implantação de um cluster etcd de 3 nós com TLS habilitado como um armazenamento de dados externo para um cluster K3s altamente disponível com vários mestres.

Primeiro, certifique-se de ter 3 hosts Linux com endereços IP estáticos. Em meu ambiente experimental, executo 4 minicomputadores Intel NUC. Esses 4 computadores estão executando o Ubuntu 18.04 com endereços IP variando de 10.0.0.60 a 10.0.0.63. Instalaremos o etcd em hosts com endereços IP 10.0.0.60, 10.0.0.61 e 10.0.0.62. Você deve substituir esses endereços IP por seu próprio conjunto de endereços quando praticar por conta própria.

Baixe o arquivo binário etcd

Em cada host Linux, execute o seguinte comando para baixar e instalar a versão mais recente do arquivo binário:

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

Insira a descrição da imagem aqui

Gerar e distribuir certificados

Usaremos a ferramenta cfssl da Cloudflare para gerar certificados e chaves. Se você usa um Mac como estação de trabalho, pode instalá-lo usando o Homebrew.

brew install cfssl

Insira a descrição da imagem aqui

Crie um diretório denominado certs e execute o seguinte comando para gerar o certificado CA e o certificado do servidor e a combinação de chaves para cada host.

mkdir certs && cd certs

Primeiro, crie um certificado CA, que será usado por todos os servidores e clientes 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

Isso irá gerar três arquivos- ca-key.pem, ca.peme ca.csr.

Em seguida, geraremos certificados e chaves para o primeiro nó

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 as etapas acima para os próximos dois nós.

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

Não se esqueça de substituir o endereço IP e o nome do nó pela sua própria combinação.

Neste ponto, geramos certificados e chaves para a CA e todos os três nós.

Insira a descrição da imagem aqui

Agora é hora de começar a distribuir certificados para cada nó do cluster.

Execute o seguinte comando, substitua o nome de usuário e o endereço IP e copie o certificado para o nó correspondente.

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 em cada nó e execute o seguinte comando para mover o certificado para o diretório apropriado.

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

Concluímos a geração e distribuição de certificados em cada nó. A seguir, criaremos arquivos de configuração e arquivos de unidade Systemd para cada nó.

Configure e inicie o cluster etcd

No nó 1, crie um arquivo chamado etcd.conf no diretório etc / etcd com o seguinte conteúdo:

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"

O arquivo para o nó 2 usa o seguinte conteúdo:

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, crie um arquivo de configuração para o nó 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"

Não se esqueça de alterar o endereço IP dedicado da rede.

Após a conclusão da configuração, podemos criar arquivos de unidade systemd em cada nó.

Crie um arquivo etcd.service em / lib / system / systemd com o seguinte conteúdo:

[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

Uma vez que a configuração de cada nó foi movida para um arquivo dedicado ( /etc/etcd/etcd.conf), os arquivos de unidade de todos os nós permanecem inalterados.

Agora estamos prontos para iniciar o serviço. Execute o seguinte comando em cada nó para iniciar o cluster etcd:

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

Certifique-se de que o serviço etcd tenha sido iniciado e não haja erros em sua operação.

sudo systemctl status etcd

Insira a descrição da imagem aqui

Teste e verifique o cluster

SSH em um dos nós e conecte-se ao cluster por meio do 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

Inserimos uma chave no banco de dados etcd. Vamos ver se conseguimos recuperá-lo.

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

Insira a descrição da imagem aqui

A seguir, vamos usar o endpoint da API para verificar a integridade do cluster.

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

Insira a descrição da imagem aqui

Por fim, vamos garantir que todos os nós participem do cluster.

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

Insira a descrição da imagem aqui

Parabéns! Agora você tem um cluster etcd seguro, distribuído e altamente disponível, que está pronto para o ambiente de cluster K3s em nível de produção.

No próximo artigo, vou mostrar em detalhes como instalar e configurar um cluster K3s de 4 nós com um plano de controle altamente disponível. Fique ligado ~!

Acho que você gosta

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