Ao configurar parâmetros do kernel, o AlloyDB Omni pode usar a memória do sistema e os recursos de E/S de maneira mais eficiente ao processar cargas de trabalho pesadas.
Pré-requisito
Antes de começar, verifique se os nós do Kubernetes executam o kernel do Linux 6.1 ou mais recente, especificamente um kernel que seja compatível com as flags MADV_COLLAPSE e MADV_POPULATE_WRITE. Para mais informações sobre essas flags, consulte a Documentação de madwise no Linux.
Aplicar as configurações do kernel recomendadas aos nós do Kubernetes
A seguinte tabela lista os parâmetros obrigatórios do kernel e os valores correspondentes para nós do Kubernetes que executam pods de cluster de banco de dados:
| Arquivo | Valor |
|---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabledPara informações sobre memória compartilhada, consulte Suporte a páginas enormes transparentes. |
within_size ou always |
/proc/sys/vm/max_map_countPara informações sobre o número de áreas de mapa de memória que um processo pode criar, consulte Documentação de /proc/sys/vm |
Maior ou igual a 1073741824 |
Para configurar os parâmetros do kernel em nós do Kubernetes usando um DaemonSet, faça o seguinte:
Aplique rótulos aos nós em que você planeja executar clusters de banco de dados usando as instruções descritas em Adicionar um rótulo a um nó.
Para definir os parâmetros do kernel em nós rotulados como
LABEL_KEY=LABEL_VALUE, crie um DaemonSet:cat << EOF | kubectl apply -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: alloydb-omni-kernel-tuning namespace: DS_NAMESPACE spec: selector: matchLabels: name: alloydb-omni-kernel-tuning template: metadata: labels: name: alloydb-omni-kernel-tuning spec: volumes: - name: host-sys hostPath: path: /sys nodeSelector: LABEL_KEY: "LABEL_VALUE" restartPolicy: Always terminationGracePeriodSeconds: 1 initContainers: - name: enable-thp-mmc image: INIT_IMAGE volumeMounts: - name: host-sys mountPath: /sys securityContext: privileged: true command: ["sh", "-c", "sysctl -w vm.max_map_count=MAX_MAP_COUNT && echo within_size >/sys/kernel/mm/transparent_hugepage/shmem_enabled"] containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE command: ["watch", "-n", "600", "cat", "/sys/kernel/mm/transparent_hugepage/shmem_enabled"] EOFSubstitua o seguinte:
DS_NAMESPACE: o namespace em que você quer implantar o DaemonSet, por exemplo,default.LABEL_KEY: o identificador do rótulo, por exemplo,workload.LABEL_VALUE: os dados associados ao identificador do rótulo, por exemplo,database.INIT_IMAGE: o nome da imagem usada para o contêiner de inicialização.MAX_MAP_COUNT: o número máximo de áreas de mapeamento de memória que um processo pode criar, por exemplo,1073741824.CONTAINER_NAME: o nome do contêiner principal, por exemplo,main.CONTAINER_IMAGE: o nome da imagem usada para o contêiner principal, por exemplo,latest.
Depois de implantar o DaemonSet, para verificar se todos os pods no cluster do Kubernetes estão no estado
Runninge se você tem um pod para cada nó com o rótuloLABEL_KEY=LABEL_VALUE, use o seguinte comando:kubectl get pods -l LABEL_KEY=LABEL_VALUEUm exemplo de resposta é parecido com este:
NAME READY STATUS RESTARTS AGE alloydb-omni-kernel-tuning-2dkwh 1/1 Running 0 22s alloydb-omni-kernel-tuning-pgkbj 1/1 Running 0 19sPara verificar se a flag do kernel foi aplicada, execute o seguinte comando para cada um dos pods identificados após a implantação do DaemonSet:
kubectl logs POD_NAMESubstitua
POD_NAMEpelo nome do pod do qual você quer analisar os registros.Um exemplo de resposta é parecido com este:
always [within_size] advise never deny force
Executar clusters de banco de dados em nós do Kubernetes com os parâmetros do kernel recomendados
Para implantar clusters de banco de dados em nós do Kubernetes com os parâmetros do kernel recomendados, adicione uma seção nodeAffinity a uma das seguintes seções do manifesto do cluster de banco de dados:
primarySpec.schedulingConfigpara instâncias primáriasspec.schedulingConfigpara instâncias do pool de leitura
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
Para mais informações sobre como executar clusters de banco de dados em nós específicos do Kubernetes, consulte Atribuir nós a um cluster de banco de dados usando a programação.
Verificar a aplicação de parâmetros do kernel
Para verificar se os parâmetros do kernel foram aplicados aos pods de banco de dados, faça o seguinte:
Se a alta disponibilidade estiver ativada, especificamente se
spec.availability.numberOfStandbysestiver definido como um valor maior que zero, verifique se o recurso personalizado do banco de dados mostraDBClusterReadyna coluna DBCLUSTERPHASE eTruena coluna HAREADYSTATUS.kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAMESubstitua o seguinte:
DBCLUSTER_NAME: o nome do cluster de banco de dados que você está verificando.DBCLUSTER_NAMESPACE: o nome do namespace específico em que o cluster de banco de dados está localizado.
Um exemplo de resposta é parecido com este:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True ReadyListe os pods do Kubernetes que pertencem ao cluster de banco de dados:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAMEPara verificar informações sobre a memória compartilhada, execute o seguinte comando:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfoA resposta precisa conter números diferentes de zero em todas as entradas.
Um exemplo de resposta é parecido com este:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kBSe você observar
0 kBem alguma das entradas, reinicie o pod correspondente:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAMERepita as etapas de 1 a 5 depois que o pod estiver no estado
Running.