Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use HostPath volumes

Última atualização: Jun 27, 2026

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 o path do 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 o path do host existe e é um diretório. Se a condição não for atendida, o pod falha ao iniciar.

  • FileOrCreate: Verifica se o path do 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 o path do 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 hostPath diretamente na seção volumes do 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 hostPath em 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

  1. Crie um arquivo chamado pod-hostpath-direct.yaml.

    Monta o diretório /data do nó em /test no 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
  2. Implante o pod.

    kubectl apply -f pod-hostpath-direct.yaml
  3. Verifique a montagem.

    Crie um arquivo dentro do pod e confirme sua existência no nó.

    1. Crie um arquivo no pod.

      Crie o arquivo test.txt no 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'
    2. 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"
    3. Verifique o arquivo no nó.

      Faça logon no nó e execute ls /data para 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

  1. Crie um arquivo chamado pv-pvc-hostpath.yaml.

    Cria um PV apontando para o diretório /data do 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
  2. Crie o PV, o PVC e o pod.

    kubectl apply -f pv-pvc-hostpath.yaml
  3. Verifique a montagem.

    Crie um arquivo dentro do pod e confirme sua existência no nó.

    1. Crie um arquivo no pod.

      Crie o arquivo test.txt no 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'
    2. 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"
    3. Verifique o arquivo no nó.

      Faça logon no nó e execute ls /data para 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: true na seção volumeMounts para 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 /etc e /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.