NodeLocal DNSCache
Introdução
NodeLocal DNSCache é um complemento desenvolvido com base na comunidade NodeLocal DNSCache. Esse complemento funciona como um DaemonSet para executar o proxy de cache do DNS em nós de cluster para melhorar o desempenho do DNS do cluster.
Comunidade de código aberto: https://github.com/kubernetes/dns
Restrições
- Esse recurso está disponível apenas para clusters de v1.19 ou posterior.
Instalar o complemento
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, localize NodeLocal DNSCache à direita e clique em Install.
- Na página Install Add-on, configure as especificações.
Tabela 1 Especificações de complemento Parâmetro
Descrição
Add-on Specifications
Selecione Standalone, HA ou Custom para Add-on Specifications.
Instances
Número de pods que serão criados para corresponder às especificações do complemento selecionado.
Se você selecionar Custom, poderá ajustar o número de pods conforme necessário.
Containers
As cotas de CPU e memória do contêiner permitidas para as especificações adicionais selecionadas.
Se você selecionar Custom, poderá ajustar as especificações do contêiner conforme necessário.
- Configure os parâmetros do complemento.
- enable_dnsconfig_admission: depois que essa função for ativada, um controlador de injeção dinâmica de DNSConfig será criado. O controlador intercepta solicitações de criação de pods no namespace rotulado com node-localdns-injection=enabled com base em Admission Webhook e configura automaticamente Pod dnsConfig que usa o cache do DNS. Se essa função estiver desabilitada ou se o pod pertencer a um namespace que não seja de destino, será necessário configurar manualmente DNSConfig para o pod.
- Target Namespace: esse parâmetro está disponível depois que DNSConfig Automatic Injection está ativada. Somente NodeLocal DNSCache da v1.3.0 ou posterior suporta essa função.
- All Enabled: o CCE adiciona o rótulo node-local-dns-injection=enabled a todos os namespaces criados, excluindo os internos (como o kube-system), identifica solicitações de criação de namespace e adiciona automaticamente o rótulo aos namespaces recém-criados.
- Manual configuration: você deve adicionar manualmente o rótulo node-local-dns-injection=enabled aos namespaces que exigem a injeção de DNSConfig. Para mais detalhes, consulte Gerenciar rótulos de namespace.
- Configure as políticas de agendamento para o complemento.
- As políticas de agendamento não entram em vigor em instâncias complementares do tipo DaemonSet.
- Ao configurar a implementação de várias AZs ou a afinidade de nó, verifique se há nós que atendem à política de agendamento e se os recursos são suficientes no cluster. Caso contrário, o complemento não pode ser executado.
Tabela 2 Configurações para programação de complementos Parâmetro
Descrição
Multi-AZ Deployment
- Preferred: os pods de Implementação do complemento serão agendados preferencialmente para nós em diferentes AZs. Se todos os nós no cluster forem implementados na mesma AZ, os pods serão agendados para essa AZ.
- Forcible: os pods de Implementação do complemento serão forçosamente agendados para nós em diferentes AZs. Se houver menos AZs do que pods, os pods extras não funcionarão.
Node Affinity
- Incompatibility: a afinidade de nó está desabilitada para o complemento.
- Node Affinity: especifique os nós em que o complemento é implementado. Se você não especificar os nós, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.
- Specified Node Pool Scheduling: especifique o pool de nós em que o complemento é implementado. Se você não especificar o pool de nós, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.
- Custom Policies: insira os rótulos dos nós em que o complemento será implementado para políticas de agendamento mais flexíveis. Se você não especificar rótulos de nó, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.
Se várias políticas de afinidade personalizadas estiverem configuradas, certifique-se de que existem nós que atendam a todas as políticas de afinidade no cluster. Caso contrário, o complemento não pode ser executado.
Taints and Tolerations
O uso de manchas e tolerâncias permite (não forçosamente) que Implementação do complemento seja agendada para um nó com as manchas correspondentes e controla as políticas de despejo de Implementação depois que o nó onde a Implementação está localizada é contaminado.
O complemento adiciona a política de tolerância padrão para as manchas node.kubernetes.io/not-ready e node.kubernetes.io/unreachable, respectivamente. A janela de tempo de tolerância é 60s.
Para mais detalhes, consulte Manchas e tolerâncias.
- Clique em Install.
Componentes
Componente |
Descrição |
Tipo de recurso |
---|---|---|
node-local-dns-admission-controller |
Injeção automática de DNSConfig |
Implementação |
node-local-dns-cache |
Proxy de cache do DNS em nós para melhorar o desempenho do DNS do cluster |
DaemonSet |
Usar o DNSCache do NodeLocal
Por padrão, as solicitações de aplicativos são enviadas por meio do proxy de CoreDNS. Para usar node-local-dns como proxy de cache de DNS, use um dos seguintes métodos:
- Injeção automática: configure automaticamente o campo dnsConfig do pod ao criar o pod. (Pods não podem ser injetados automaticamente em namespaces do sistema, como kube-system.)
- Configuração manual: configure manualmente o campo dnsConfig do pod.
Injeção automática
Devem ser satisfeitas as seguintes condições:
- A injeção automática de DNSConfig foi ativada durante a instalação do complemento.
- O rótulo node-local-dns-injection=enabled foi adicionado ao namespace. Por exemplo, execute o seguinte comando para adicionar o rótulo ao namespace default:
kubectl label namespace default node-local-dns-injection=enabled
- O novo pod não é executado em namespaces do sistema, como namespace de kube-system e kube-public.
- O rótulo node-local-dns-injection=disabled para desabilitar a injeção de DNS não é adicionado ao novo pod.
- O novo pod usa a rede de host e DNSPolicy é ClusterFirstWithHostNet. Como alternativa, o pod não usa a rede host e DNSPolicy é ClusterFirst.
Depois que a injeção automática é ativada, as seguintes configurações do dnsConfig são adicionadas automaticamente ao pod criado. Além do endereço DNSCache do NodeLocal 169.254.20.10, o endereço de CoreDNS 10.247.3.10 é adicionado a nameservers, garantindo alta disponibilidade do servidor DNS do serviço.
... dnsConfig: nameservers: - 169.254.20.10 - 10.247.3.10 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: timeout value: '' - name: ndots value: '5' - name: single-request-reopen ...
Configuração manual
Adicione manualmente as configurações de dnsConfig ao pod.
Crie um pod e adicione o endereço IP do DNSCache do NodeLocal 169.254.20.10 à configuração de nameservers de DNSConfig.
Os endereços de DNSCache do NodeLocal de diferentes tipos de cluster são os seguintes:
- Cluster do CCE: 169.254.20.10
- Cluster do CCE Turbo: 169.254.1.1
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 dnsConfig: nameservers: - 169.254.20.10 - 10.247.3.10 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: ndots value: '2' imagePullSecrets: - name: default-secret
Desinstalar o complemento
A desinstalação do complemento afetará os pods que usaram o endereço node-local-dns para a resolução de nomes de domínio. Antes de desinstalar o complemento, exclua o rótulo node-local-dns-injection=enabled dos namespaces envolvidos e exclua e recrie os pods com esse rótulo.
- Verifique o complemento.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, localize NodeLocal DNSCache à direita e clique em Edit.
- Na área Parameters, verifique se DNSConfig Automatic Injection está ativada.
Se DNSConfig Automatic Injection tiver sido ativada:
- No painel de navegação, escolha Namespaces.
- Localize as linhas que contêm os namespaces com o rótulo node-local-dns-injection=enabled e exclua o rótulo. Para mais detalhes, consulte Gerenciar rótulos de namespace.
- Exclua os pods nesses namespaces e recrie pods.
Se DNSConfig Automatic Injection não tiver sido ativada:
- Use o kubectl para acessar o cluster.
- Verifique os pods com DNSConfig injetada manualmente. Se vários namespaces estiverem envolvidos, verifique todos os pods nesses namespaces.
Por exemplo, para verificar pods no namespace default, execute o seguinte comando:
kubectl get pod -n default -o yaml
- Remova manualmente DNSConfig e recriar pods.
- Desinstale NodeLocal DNSCache.
- No painel de navegação, escolha Add-ons. Localize NodeLocal DNSCache e clique em Uninstall.
- Na caixa de diálogo exibida, clique em Yes.