Falando sobre Kube-OVN

Introdução ao Kube-OVN       

         O Kube-OVN é um sistema de orquestração de rede nativo em nuvem de nível empresarial sob CNCF. Ele combina os recursos de SDN e nativo em nuvem para fornecer funções avançadas, desempenho extremo e boa operabilidade.

        O Kube-OVN pode fornecer suporte para cenários de aplicativos complexos, como gerenciamento de rede entre nuvens, interconexão entre arquitetura e infraestrutura de rede tradicional e aterrissagem de cluster de borda . Atualmente, o Kube-OVN se tornou uma das soluções de rede Kubernetes mais populares na comunidade de código aberto e realizou com sucesso milhares de projetos corporativos de grande escala em nível de cluster, desembarque de projetos no exterior e tentativas iniciais de comercialização.

Recursos do Kube-OVN

Funções ricas:

Se você sente falta dos recursos avançados de rede no campo SDN, mas está lutando para encontrá-los no campo nativo da nuvem, o Kube-OVN será sua melhor escolha.

Com os recursos maduros de OVS/OVN no campo SDN, o Kube-OVN traz as ricas funções de virtualização de rede para o campo nativo da nuvem. Atualmente suporta gerenciamento de sub-rede, alocação de IP estático, gateway distribuído/centralizado, rede híbrida Underlay/Overlay, rede VPC multilocatário, rede de interconexão entre clusters, gerenciamento de QoS, gerenciamento de placas de várias redes, controle de rede ACL, espelhamento de tráfego, suporte ARM , suporte para Windows e muitos outros recursos.

Desempenho extremo:

Se você está preocupado com a perda de desempenho adicional causada pela rede de contêineres, veja como o Kube-OVN otimiza o desempenho ao extremo.

No plano de dados, por meio de uma série de otimização cuidadosa da tabela de fluxo e do kernel, e com a ajuda de tecnologias emergentes, como eBPF, DPDK e descarregamento de cartão de rede inteligente, o Kube-OVN pode obter desempenho de rede host semelhante ou superior em termos de latência e taxa de transferência. No plano de controle, o Kube-OVN pode oferecer suporte a clusters de grande escala com milhares de nós e dezenas de milhares de pods por meio da adaptação de tabelas de fluxo upstream do OVN e do uso e otimização de várias tecnologias de cache.

Além disso, o Kube-OVN otimiza constantemente o uso de recursos como CPU e memória para se adaptar a cenários com recursos limitados, como bordas.

Boa operacionalidade:

 Se você está preocupado com a operação e manutenção da rede de contêineres, o Kube-OVN possui muitas ferramentas integradas para ajudá-lo a simplificar as operações de operação e manutenção.

O Kube-OVN fornece um script de instalação com um clique para ajudar os usuários a criar rapidamente uma rede de contêineres pronta para produção. Ao mesmo tempo, os indicadores de monitoramento integrados e o painel Grafana podem ajudar os usuários a estabelecer um sistema de monitoramento completo. Ferramentas poderosas de linha de comando podem simplificar a operação diária e as operações de manutenção dos usuários. Ao combinar com o Cilium, os usuários podem aprimorar a observabilidade da rede utilizando os recursos do eBPF. Além disso, a capacidade de espelhamento de tráfego pode facilitar o monitoramento de tráfego definido pelo usuário e a conexão com sistemas NPM tradicionais.

Fundo de design do Kube-OVN

1. O mais importante é que as soluções de código aberto existentes são difíceis de atender às necessidades de nossos clientes, como divisão de sub-rede, IP fixo, QoS, isolamento de VLAN, espelhamento de tráfego, etc., que são funções comuns em redes tradicionais. Todas as soluções de rede de código aberto estão ausentes. Como resultado, quando for realmente implementado, descobrirá que não há solução de rede de código aberto que possa ser usada. Ele só pode continuar discutindo com o departamento de rede, departamento de sistema e departamento de aplicativo e abandonar alguns dos funções de rede originais para implementar contêineres. Esperamos enriquecer os recursos existentes da rede de contêineres por meio de meios técnicos para ajudar os clientes a implementar os contêineres com mais facilidade.

2. Do ponto de vista de nossa própria manutenção da nuvem de contêineres, os problemas relacionados à rede da plataforma de contêineres são os mais difíceis de solucionar. Um problema de falha de rede pode envolver vários componentes, como rede Pod, CNI, Service, Iptables, IPVS, Ingress, DNS, NetworkPolicy, Loadbalancer, etc. conhecimento de muitos componentes princípio. Esperamos unificar o plano de dados do tráfego de rede e parar de espalhá-lo para vários componentes, de modo a reduzir a complexidade da manutenção.

3. Após a pesquisa, acreditamos que o conjunto de componentes de rede OVN/OVS é relativamente completo em função e pode realizar todas as funções de rede do OpenStack; Além disso, o OVS já é um switch virtual testado pelo tempo, e sua estabilidade é garantida. Em termos de desempenho, também existem várias soluções de DPDK e aceleração de hardware para suportá-lo. Temos soluções quando o desempenho é realmente necessário. Além disso, aprendemos que alguns fornecedores de nuvem de contêineres públicos realmente usam OVN para redes de contêineres internamente e não somos os primeiros mártires.

Combinando esses fatores, decidimos desenvolver uma solução de rede baseada em OVN, ou seja, Kube-OVN. Por um lado, pode atender às necessidades dos clientes e de nós mesmos; por outro lado, o código aberto também pode ajudar a comunidade a progredir juntos.

Princípios de design e ideias de Kube-OVN

1. Traduzir o conceito e função da rede OpenStack para Kubernetes. A rede OpenStack foi desenvolvida por muitos anos, e muitos projetos e conceitos basicamente se tornaram padrões SDN. Esperamos que a OVN possa não apenas introduzir algumas funções avançadas, mas também alguns conceitos de rede maduros, como VPC, sub-rede, multilocação, FIP, SecurityGroup, etc., para aprimorar os recursos gerais da rede Kubernetes.

2. Unifique o plano de dados da rede. Esperamos usar o Kubernetes como o plano de controle da rede. Todas as funções do plano de dados podem ser realizadas por meio do OVN, incluindo Service, DNS e NetworkPolicy, o que simplifica o trabalho de manutenção.

3. Abrange as funções de outras soluções de rede de código aberto tanto quanto possível. Para nós, não queremos oferecer suporte a vários plug-ins de rede ao mesmo tempo, cada cliente é diferente, o que também é muito caro para nós. Nós mesmos esperamos ter uma solução de rede como a máquina de balde que cubra todas as funções necessárias e tenha alguns recursos.

4. Torne-o o mais fácil possível de instalar e usar. A instalação e o uso de OVN e OVS são relativamente complicados e o limite é relativamente alto. Esperamos simplificá-lo e diminuir o limite para os usuários. É conveniente para entrega e melhor promoção.

A arquitetura geral e a realização de funções do Kube-OVN

 

Primeiro, observe a arquitetura do componente, o yaml de instalação do próprio Kube-OVN inclui a instalação e configuração do OVN e OVS, a lógica do próprio Kube-OVN concentra-se principalmente na parte azul da figura kube-ovn-controller, kube-ovn- cni e kube-ovn-cniserver. A lógica mais importante no kube-ovn-controller pode ser considerada como um controlador de recursos do Kubernetes, que observará todas as alterações de recursos relacionados à rede no Kubernetes, como Pod, Node, Namespace, Service, Endpoint e NetworkPolicy. Sempre que um recurso for alterado, o kube-ovn-controller calculará o estado esperado e traduzirá a alteração correspondente da rede no objeto de recurso do banco de dados norte OVN . Ao mesmo tempo, o kube-ovn-controller configurará as informações de rede específicas, como o IP atribuído, Mac, gateway e outras informações e, em seguida, gravará de volta nos recursos do Kubernetes na forma de anotação para facilitar o processamento subsequente.

O próprio kube-ovn-cni é uma camada muito fina. Sua principal função é adaptar o protocolo CNI para se conectar com o Kubelet e enviar comandos padrão cni add/del para o kube-ovn-cniserver em cada máquina para processamento subsequente. E o kube-ovn-cniserver verificará a anotação correspondente aos recursos no Kubernetes de acordo com os parâmetros de entrada e operará o OVS e a rede de contêineres em cada máquina.

Para dar um exemplo de criação de um Pod, após o Pod ser entregue ao apiserver, o kube-ovn-controller assistirá para gerar um novo Pod e, em seguida, chamará a interface de ovn-nb para criar uma interface de switch virtual. , GW e outras informações são gravadas na Anotação deste Pod. Em seguida, quando kubelet criar um pod, ele chamará kube-ovn-cni e kube-ovn-cni passará as informações para kube-ovn-cniserver. O CNIServer verificará a anotação do pod para obter informações específicas de IP e Mac para configurar o OVS local e a NIC do contêiner e concluir todo o fluxo de trabalho. O processo de outro serviço e NetworkPolicy também é semelhante a este.

Modelo de rede implementado por Kube-OVN

Flanela e muitas redes são implementadas com um nó e uma sub-rede. Descobrimos que esse modelo de sub-rede é muito inflexível e difícil de expandir. Portanto, no Kube-OVN, adotamos o modelo de um Namespace e uma sub-rede.As sub-redes podem cruzar nós, o que está mais de acordo com as expectativas e o gerenciamento do usuário. Cada sub-rede corresponde a um comutador virtual no OVN. As regras de tráfego, como LB, DNS e ACL, também são aplicadas ao comutador virtual, o que facilita o controle de permissão mais refinado posteriormente, como a implementação de funções como VPC e multilocação.

Todos os comutadores virtuais estão atualmente conectados a um roteador virtual global, que pode garantir a interoperabilidade da rede de contêiner padrão, e o isolamento futuro também pode ser facilmente controlado no nível de roteamento. Além disso, existe uma sub-rede especial Node, que adicionará uma placa de rede OVS a cada host .Essa rede conecta principalmente o Node à rede do contêiner, para que a rede entre o host e o contêiner possa se comunicar. Deve-se observar que os comutadores virtuais e roteadores virtuais aqui são lógicos e são distribuídos em todos os nós por meio da tabela de fluxo em implementação, portanto, não há problema de ponto único.

O gateway é responsável por acessar a rede fora do cluster.Existem atualmente duas implementações, uma é distribuída, e cada host pode ser usado como um nó de saída do Ood rodando nele. O outro é centralizado. Você pode configurar um nó de gateway em um Namespace como o gateway usado pelos Pods no Namespace atual para sair da rede. Dessa forma, todo tráfego de saída usa um IP específico nat para sair, que é conveniente para auditoria externa e controles de firewall. Obviamente, o nó de gateway também não pode fazer nat, de modo que o IP do contêiner possa ser exposto diretamente à rede externa, de modo a obter uma conexão direta entre as redes interna e externa.

Preparação da instalação

        O Kube-OVN é um componente de rede que está em conformidade com a especificação CNI e sua operação precisa contar com o ambiente Kubernetes e o módulo de rede do kernel correspondente. Veja a seguir o sistema operacional testado e a versão do software, a configuração do ambiente e as informações necessárias sobre a porta aberta.

Requisitos da versão do software

  • Kubernetes >= 1.16 e < 1.24, versão 1.19 ou posterior é recomendado.
  • Docker >= 1.12.6, Containerd >= 1.3.4。
  • Sistema operacional: CentOS 7/8, Ubuntu 16.04/18.04/20.04.
  • Para outras distribuições Linux, você precisa verificar se há geneve, openvswitch, ip_tables e iptable_nat nos módulos do kernel. O trabalho normal do Kube-OVN depende dos módulos acima.

Precauções:

(1) Se a versão do kernel for 3.10.0-862, há um bug no módulo netfilter do kernel, que fará com que o balanceador de carga integrado do Kube-OVN não funcione, e o kernel precisa ser Recomenda-se usar o kernel mais recente da versão oficial do CentOS para garantir a segurança do sistema. Para bugs de kernel relacionados, consulte IPs flutuantes quebrados após atualização do kernel para Centos/RHEL 7.5 - DNAT não está funcionando.
(2) O kernel 4.18.0-372.9.1.el8.x86_64 do Rocky Linux 8.6 tem um problema de comunicação TCP A conexão TCP falhou no Rocky Linux 8.6, atualize o kernel para 4.18.0-372.13.1.el8_6.x86_64 ou mais tarde.
(3) Se a versão do kernel for 4.4, há um problema com o módulo openvswitch do kernel correspondente. Recomenda-se atualizar ou compilar manualmente a nova versão do módulo openvswitch para atualizar (4) O estabelecimento do túnel Geneve precisa verificar o IPv6, você
pode verifique os parâmetros de inicialização do kernel através de cat /proc/cmdline. Para bugs relacionados ao kernel, consulte Geneve tunnels don't work when ipv6 is disabled.

Configuração do ambiente

  • A inicialização do kernel precisa habilitar o ipv6, se os parâmetros de inicialização do kernel incluírem ipv6.disable=1, ele precisa ser definido como 0.
  • O kube-proxy funciona normalmente e o Kube-OVN pode acessar o kube-apiserver por meio do SVC IP.
  • Confirme se o parâmetro de configuração do kubelet ativou o CNI e se a configuração está no caminho padrão. Os seguintes parâmetros devem ser incluídos quando o kubelet for iniciado --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir =/etc/cni/net.d.
  • Confirme se outros plug-ins de rede não estão instalados ou outros plug-ins de rede foram limpos e verifique se não há outros arquivos de configuração de plug-in de rede no caminho /etc/cni/net.d/. Se você instalou outros plug-ins de rede antes, é recomendável reiniciar a máquina após a exclusão para limpar os recursos de rede residuais.

Instalação do Kube-OVN

Uma instalação chave

        Kube-OVN fornece um script de instalação de um clique que pode ajudá-lo a instalar rapidamente uma rede de contêiner Kube-OVN altamente disponível e pronta para produção, que é implantada como uma rede Overlay por padrão.

Baixe o script de instalação da versão estável 

wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/dist/images/install.sh

Se você estiver interessado nos recursos mais recentes da ramificação mestre, faça o download do script de implantação da versão de desenvolvimento usando o seguinte comando:

wget https://raw.githubusercontent.com/kubeovn/kube-ovn/master/dist/images/install.sh

Modificar parâmetros de configuração

Abra o script com um editor e modifique as seguintes variáveis ​​para seus valores esperados:

REGISTRY="kubeovn"                     # 镜像仓库地址
VERSION="v1.10.6"                      # 镜像版本/Tag
POD_CIDR="10.16.0.0/16"                # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12"                # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16"              # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠 
LABEL="node-role.kubernetes.io/master" # 部署 OVN DB 节点的标签
IFACE=""                               # 容器网络所使用的的宿主机网卡名,如果为空则使用 Kubernetes 中的 Node IP 所在网卡
TUNNEL_TYPE="geneve"                   # 隧道封装协议,可选 geneve, vxlan 或 stt,stt 需要单独编译 ovs 内核模块

Uma expressão regular pode ser usada para corresponder a nomes de placas de rede, por exemplo  IFACE=enp6s0f0,eth.*, .

Execute o script de instalação

bash install.sh

Use sealos para implantar Kubernetes e Kube-OVN com um clique

        Como uma distribuição do Kubernetes, o sealos pode ajudar os usuários a inicializar rapidamente um cluster de contêiner do zero por meio de um método de uso minimalista e um armazém de espelho doméstico. Usando sealos, os usuários podem implantar um cluster Kubernetes com Kube-OVN instalado em alguns minutos com um único comando.

Baixe e instale sealos

wget https://github.com/labring/sealos/releases/download/v4.0.0/sealos_4.0.0_linux_amd64.tar.gz 
 && tar zxvf sealos_4.0.0_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

Implantar K8s e kube-ovn

sealos run labring/kubernetes:v1.24.3 labring/kube-ovn:v1.10.5 \
  --masters [masters ips seperated by comma] \
  --nodes [nodes ips seperated by comma] -p [your-ssh-passwd]

Referências:

https://kubeovn.github.io/docs/v1.10.x/

https://www.alauda.cn/open/detail/id/377.html

https://cloud.tencent.com/developer/article/1475917

Acho que você gosta

Origin blog.csdn.net/lovebaby1689/article/details/126717183
Recomendado
Clasificación