Monte arquivos ou diretórios do host em pods para acessar diretamente logs de nós, arquivos de configuração ou dados compartilhados de desenvolvimento.
Como funciona
Visão geral do processo
Após o agendamento de um pod em um nó, o kubelet monta o volume HostPath antes do início do container. Ele valida e prepara o caminho do host definido em path com base no type da configuração hostPath.
DirectoryOrCreate: Verifica se opathdo host existe. Caso não exista, cria um diretório vazio com permissões 0755, com proprietário e grupo correspondentes aos do kubelet.Directory: Confirma se opathdo host existe e é um diretório. Se a condição não for atendida, o pod falha ao iniciar.FileOrCreate: Verifica se opathdo host existe. Na ausência do arquivo, cria um arquivo vazio com permissões 0644, com proprietário e grupo correspondentes aos do kubelet.File: Confirma se opathdo host existe e é um arquivo. Se a condição não for atendida, o pod falha ao iniciar.
Após a validação, o kubelet faz a montagem bind do path do host no container. Todas as operações de leitura e escrita no ponto de montagem são direcionadas ao sistema de arquivos do nó host.
Métodos de uso
Montar um volume HostPath diretamente em um pod: Defina o
hostPathdiretamente na seçãovolumesdo manifesto do pod. Esta abordagem é simples, mas acopla fortemente o armazenamento à aplicação. Não recomendada para cargas de trabalho de produção que exigem manutenção de longo prazo ou podem precisar de alterações no armazenamento.Montar um volume HostPath usando PV e PVC: Defina o
hostPathem um PV independente, solicitado pelo pod via PVC. Este método desacopla o armazenamento da aplicação, permitindo gerenciar o armazenamento de forma independente sem modificar a configuração do pod.
Aplicabilidade
Suportado apenas em nós ECS. Não disponível para recursos de computação serverless como ECI e ACS. Não recomendado em discos locais.
Método um: Montagem direta de HostPath
-
Crie um arquivo chamado
pod-hostpath-direct.yaml.Monta o diretório
/datado nó em/testno pod.apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 name: test-container volumeMounts: - mountPath: /test name: test-volume volumes: - name: test-volume hostPath: # Specify the path on the host node. path: /data # Specify the volume type. type: DirectoryOrCreate -
Implante o pod.
kubectl apply -f pod-hostpath-direct.yaml -
Verifique a montagem.
Crie um arquivo dentro do pod e confirme sua existência no nó.
-
Crie um arquivo no pod.
Crie o arquivo
test.txtno diretório/test(ponto de montagem) do pod.kubectl exec test-pod -- sh -c 'echo "This file was created from within the Pod." > /test/test.txt' -
Obtenha o nome do nó onde o pod está em execução.
NODE_NAME=$(kubectl get pod test-pod -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME" -
Verifique o arquivo no nó.
Faça logon no nó e execute
ls /datapara verificar se o arquivo existe no diretório/data.Se a saída incluir
test.txt, o volume HostPath foi montado com sucesso.
-
Método dois: Montagem com PV e PVC
-
Crie um arquivo chamado
pv-pvc-hostpath.yaml.Cria um PV apontando para o diretório
/datado host, um PVC que solicita o armazenamento e um pod que utiliza o PVC.# --- PersistentVolume definition --- apiVersion: v1 kind: PersistentVolume metadata: name: hostpath-pv labels: type: local spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/data" --- # --- PersistentVolumeClaim definition --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hostpath-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi # Use a selector to bind the PVC to the PV created earlier. selector: matchLabels: type: local --- # --- Pod definition --- apiVersion: v1 kind: Pod metadata: name: test-pod-pvc spec: containers: - name: test-container image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - mountPath: "/usr/share/nginx/html" name: storage volumes: - name: storage persistentVolumeClaim: # Reference the PVC defined earlier. claimName: hostpath-pvc -
Crie o PV, o PVC e o pod.
kubectl apply -f pv-pvc-hostpath.yaml -
Verifique a montagem.
Crie um arquivo dentro do pod e confirme sua existência no nó.
-
Crie um arquivo no pod.
Crie o arquivo
test.txtno diretório/usr/share/nginx/html(ponto de montagem) do pod.kubectl exec test-pod-pvc -- sh -c 'echo "File from PV/PVC Pod." > /usr/share/nginx/html/test.txt' -
Obtenha o nome do nó onde o pod está em execução.
NODE_NAME=$(kubectl get pod test-pod-pvc -o jsonpath='{.spec.nodeName}') echo "Pod is running on node: $NODE_NAME" -
Verifique o arquivo no nó.
Faça logon no nó e execute
ls /datapara verificar se o arquivo existe no diretório/data.Se a saída incluir
test.txt, o volume HostPath via PV/PVC foi montado com sucesso.
-
Considerações para produção
-
Reforce o isolamento de segurança
Monte como somente leitura: Se a aplicação apenas lê dados do nó, defina
readOnly: truena seçãovolumeMountspara evitar gravações acidentais no nó host.Siga o princípio do menor privilégio: Evite montar o diretório raiz (
/) ou diretórios sensíveis como/etce/var. Utilize um diretório dedicado.
-
Monitore os recursos do nó
Monitore o disco do host: Containers que gravam em um volume HostPath consomem espaço em disco do nó. Configure monitoramento e alertas para partições de disco a fim de evitar exaustão do armazenamento.
Avalie o impacto de I/O: Leituras e escritas frequentes em um volume HostPath consomem recursos de I/O do nó, o que pode afetar outros pods ou a estabilidade do kubelet. Avalie o impacto de I/O antes de usar HostPath em produção.
-
Um volume HostPath vincula o pod ao armazenamento físico de um nó específico. Os dados ficam atrelados a esse nó e tornam-se indisponíveis se o pod for reagendado em outro local.
-
Inadequado para aplicações com estado que exigem alta disponibilidade, como bancos de dados ou caches.
Os dados existem apenas em um único nó. Quando um pod é reagendado para outro nó, o acesso aos dados originais é perdido.
O acesso ao sistema de arquivos do nó host quebra o isolamento do container. Se houver configuração incorreta (por exemplo, montagem do diretório raiz
/) ou se o container apresentar uma vulnerabilidade, a segurança e a estabilidade do nó podem ser comprometidas.
Não compatível com nós que possuem sistema de arquivos raiz somente leitura, como o ContainerOS.
Perguntas frequentes
Os dados persistem se um pod for recriado?
Depende do nó para o qual o pod é agendado.
Agendado no mesmo nó: O pod monta o mesmo diretório e consegue acessar todos os dados existentes.
Agendado em um nó diferente: O pod monta um diretório vazio. Os dados permanecem no nó original, mas ficam inacessíveis.
-