반응형

목차

  1. 워커 노드 파일시스템의 파일 접근
  2. hostPath 볼륨
  3. hostPath 볼륨을 사용하는 시스템 파드 검사

워커 노드 파일시스템의 파일 접근

일반적으로 파드 내부에서 실행되는 컨테이너가 기본 호스트 노드의 파일 시스템에 있는 파일에 액세스할 수 없습니다. 파드는 호스트 시스템에서 격리되고 클러스터의 여러 노드 간에 이식 가능하도록 설계되었기 때문입니다.

호스트의 파일 시스템에 대한 액세스를 제한함으로써 쿠버네티스는 컨테이너화된 애플리케이션과 기본 시스템 간의 보안 경계를 적용합니다. 이러한 격리는 잠재적인 보안 위험을 방지하고 파드에서 실행되는 애플리케이션이 실수로 또는 악의적으로 호스트의 중요한 파일에 액세스하거나 수정할 수 없도록 합니다.

그러나 경우에 따라 호스트 파일 시스템의 특정 파일 또는 디렉터리에 대한 파드 액세스 권한을 부여해야 할 수도 있습니다. 예를 들어 호스트와 컨테이너 간에 구성 파일 또는 데이터 디렉터리를 공유해야 할 수 있습니다.

 

이러한 경우 'HostPath' 유형의 볼륨을 사용하여 호스트에서 Pod로 필요한 파일 또는 디렉터리를 마운트할 수 있습니다. 'HostPath' 볼륨을 사용하면 호스트 시스템이 잠재적인 보안 위험에 노출되고 다른 노드에서 파드의 이식성이 제한될 수 있으므로 주의해서 사용해야 합니다.


hostPath 볼륨

hostPath 볼륨은 노드 파일시스템의 특정 파일이나 디렉터리를 가리킵니다. 동일 노드에 실행 중인 파드가 hostPath 볼륨의 동일 경로를 사용 중이면 동일한 파일이 표시됩니다.

 

hostPath 볼륨은 퍼시스턴트 스토리지의 한 유형으로 gitRepo나 emptyDir 볼륨의 콘텐츠는 파드가 종료되면 삭제되는 반면, hostPath 볼륨의 콘텐츠는 삭제되지 않습니다. 파드가 삭제되면 다음 파드가 호스트의 동일 경로를 가리키는 hostPath 볼륨을 사용하고, 이전 파드와 동일한 노드에 스케줄링된다는 조건에서 새로운 파드는 이 전 파드가 남긴 모든 항목을 볼 수 있습니다.

 

hostPath 볼륨을 데이터베이스의 데이터 디렉터리를 저장할 위치로 사용할 생각이라면 다시 고려해볼 필요가 있습니다. 볼륨의 콘텐츠는 특정 노드의 파일시스템에 저장되므로 데 이터베이스 파드가 다른 노드로 다시 스케줄링되면 더 이상 이전 데이터를 볼 수가 없습니다. hostPath 볼륨은 파드가 어떤 노드에 스케줄링되느냐에 따라 민감하기 때문에 일반적인 파드에 사용하는 것은 좋은 생각이 아닙니다.


hostPath 볼륨을 사용하는 시스템 파드 검사

hostPath를 적절하게 사용하는 방법을 살펴보겠습니다. 새로운 파드를 생성하는 대신 이미 이 볼륨 유형을 사용하는 시스템 전역 파드가 있는지 확인해봅시다. 여러 개의 시스템 파드들이 kube-system 네임스페이스에서 실행 중입니다. 다음과 명령어로 조회가 가능합니다.

 

$ kubectl get pods --namespace kube-system READY STATUS

 

조회된 파드가 어떤 종류의 볼륨을 사용하는지 살펴보기 위해 다음 명령어를 사용할 수 있습니다. 다음 예시의 파드 이름은 사용 환경 마다 조금씩 다르니 해당 내용을 바로 입력하는 것이 아닌 위 방법으로 확인 후에 입력하는 것이 맞습니다.

 

$ kubectl describe po fluentd-kubia-4ebc2f1e-9a3e --namespace kube-system 

 

Name: fluentd-cloud-logging-gke-kubia-default-pool-4ebc2f1e-9a3e
Namespace: kube-system
...
    Volumes:
        varlog: 
        Type: HostPath (bare host directory volume)
        Path: /var/log
    varlibdockercontainers:
        Type: HostPath (bare host directory volume)
        Path: /var/lib/docker/containers

파드가 노드의 /var/log/var/lib/docker/containers 디렉터리에 접근하기 위해 hostPath 두 개를 사용합니다. 다른 파드들도 살펴 보면 대부분이 노드의 로그파일이나 kubeconfig(쿠버네티스 구성 파일), CA 인증서를 접근 하기 위해 이 유형의 볼륨을 사용한다는 것을 볼 수 있습니다.

 

다른 파드를 검사해보면 그중 어느 것도 hostPath 볼륨을 자체 데이터를 저장하기 위 한 목적으로 사용하지 않는다는 것을 볼 수 있습니다. hostPath는 단순하게 노드 데이터에 접근하기 위해 사용 합니다. 그러나 Minikube로 생성된 것과 같은 단일 노드 클러스터에서 hostPath 볼륨을 퍼시스턴트 스토리지를 테스트하는 데 종종 사용하기도 합니다. 다중 노드 클러스 터에서 퍼시스턴트 데이터를 적절히 저장하는 데 사용하는 다른 유형의 볼륨을 살펴볼 필요가 있습니다.

 

노드의 시스템 파일에 읽기/쓰기를 하는 경우에만 hostPath 볼륨을 사용한다는 것을 기억해야합니다. 여러 파드에 걸쳐 데이터를 유지하기 위해서는 절대 사용하지 않는 것은 권해드립니다.


다음 내용들도 같이 다루려 했으나 그러면 앞도적인 스크롤의 압박으로 독자분들께서 보는게 쉽지 않을 것 같아 다음 포스팅으로 빼게 되었습니다.

반응형