Kubernetes에서 임시 스토리지 관리

Kubernetes 포드는 임시(임시) 로컬 스토리지가 필요합니다.

Kubernetes POD는 스크래치 공간, 캐싱 및 로그에 임시 스토리지를 사용합니다. 이 스토리지는 일시적이며 포드의 수명 주기에 따라 다릅니다. 임시 스토리지는 Pod 간에 공유되지 않으며 Pod가 삭제될 때 사라집니다.

Kubernetes 임시 스토리지에 대한 일반적인 정보는 Kubernetes 설명서의 로컬 임시 스토리지를 참조하십시오.

다음 단계는 Oracle Kubernetes Engine에 적용되지만 개념은 다른 Kubernetes 환경에서 유사합니다.

노드 풀에서 노드는 Pod 스토리지에 해당 부트 볼륨을 사용합니다. 이미지는 /var 디렉토리에 저장되기 때문에 대부분의 임시 저장 영역은 루트 분할 영역의 이미지에 의해 사용됩니다. Oracle Blockchain Platform Enterprise Edition 인스턴스를 설치하고 해당 노드에 체인코드를 생성할 때마다 부트 볼륨에 필요한 공간이 늘어납니다.

다음 kubelet API 호출을 사용하여 지정된 노드의 각 포드에 지정된 총 임시 스토리지 및 양을 확인할 수 있습니다.
kubectl get --raw "/api/v1/nodes/<node IP>/proxy/stats/summary"
JSON 결과의 rootfsfs 섹션에는 용량과 사용 가능한 바이트가 표시됩니다.

노드가 실행 중인 동안 부트 볼륨의 크기를 조정하여 임시 저장소의 양을 업데이트할 수 있습니다. 자세한 내용은 Oracle Kubernetes Engine용 노드 풀 업데이트를 참조하십시오.

실행 중인 노드가 있는 Oracle Kubernetes Engine 클러스터의 임시 스토리지 크기를 조정하려면 다음 단계를 완료하십시오.
  1. Oracle Kubernetes Engine 클러스터의 리소스에서 노드 풀을 선택합니다.
  2. 편집을 누릅니다. 노드 풀 편집 페이지에서 사용자 정의 부트 볼륨 크기 지정을 선택한 다음 부트 볼륨 크기 값(GB)을 입력합니다. 생성된 모든 노드는 임시 저장 영역에 이 값을 사용합니다.
  3. 노드 풀의 각 작업자 노드에 대해 다음 단계를 완료하여 부트 볼륨의 크기를 조정합니다.
    1. 노드 옆의 아래쪽 화살표를 눌러 노드에 대한 자세한 정보를 확인합니다.
    2. 노드의 부트 볼륨으로 이동한 다음 편집을 누릅니다.
    3. 볼륨 편집 페이지의 볼륨 크기 및 성능에서 볼륨 크기 값을 GB 단위로 지정한 다음 변경 사항 저장을 누릅니다.
  4. 배스천 세션을 설정하려면 다음 단계를 완료하고 프라이빗 워커 노드에 접속하는 데 사용하십시오.
    1. 인스턴스 세부정보 페이지에서 Oracle Cloud 에이전트 탭을 누른 다음 배스천 플러그인을 사용으로 설정합니다.
    2. 검색 표시줄에서 배스천을 검색한 다음 결과에서 서비스 아래의 배스천 ID 및 보안을 누릅니다.
    3. Create bastion을 누릅니다.
    4. 배스천 생성 페이지에서 대상 가상 클라우드 네트워크(VCN)에 대해 Oracle Kubernetes 엔진 VCN과 클러스터 이름을 차례로 지정합니다. 대상 서브넷에 대해 Kubernetes API 엔드포인트를 지정합니다. CIDR 블록 허용 목록에 대해 0.0.0.0/0을 입력한 다음 배스천 생성을 누릅니다.
    5. 배스천을 눌러 연 다음 세션 생성을 누릅니다.
    6. 사용자 이름 값에 opc를 입력하고 컴퓨트 인스턴스 목록에서 노드를 선택합니다.
    7. SSH 키 추가 아래에 SSH 키를 붙여 넣습니다.
    8. 고급 옵션 표시를 누른 다음 대상 컴퓨트 인스턴스 IP 주소 목록에서 노드 또는 인스턴스의 IP 주소를 선택합니다. 인스턴스의 정보 섹션에서 사용할 수 있는 노드 또는 인스턴스의 전용 IPv4 주소입니다.
    9. 세션 생성을 누릅니다.
    10. 세션의 컨텍스트 메뉴에서 Copy SSH command를 누릅니다.
    11. 이제 SSH 명령에서 -i 매개변수와 함께 프라이빗 키를 제공하여 SSH를 통해 노드에 로그인할 수 있습니다.
    12. 클러스터의 각 작업자 노드에 대해 이전 단계를 반복합니다.
  5. 각 노드에 대해 SSH를 통해 노드에 로그인한 후 다음 명령을 실행하여 인스턴스 또는 노드에 추가된 새 블록 저장 장치를 스캔한 다음 스토리지를 사용할 수 있을 때 파일 시스템을 확장합니다.
    sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
    echo "1" | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2`/device/rescan
    sudo /usr/libexec/oci-growfs -y

임시 저장 영역 사용량 확인

다음 스크립트를 실행하여 Oracle Kubernetes Engine에서 실행 중인 인스턴스의 임시 스토리지 사용량을 확인할 수 있습니다. 이 스크립트는 Kubernetes API를 사용하여 클러스터의 각 노드에서 실행 중인 각 Pod에 대한 임시 스토리지 사용량을 검색합니다.

#!/usr/bin/env bash
  
kubectl proxy --append-server-path &
  
set -eo pipefail
  
{
    echo "NODE NAMESPACE POD EPHEMRAL_USED"
    for node in $(kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'); do
        curl -fsSL "http://127.0.0.1:8001/api/v1/nodes/$node/proxy/stats/summary" |
            yq '.pods[] | [.podRef.namespace, .podRef.name, .ephemeral-storage.usedBytes] | join(" ")' |
            while read -r namespace name usedBytes; do
                # A pod might have no running containers and consequently no ephemeral-storage usage.
                echo "$node" "$namespace" "$name" "$(numfmt --to iec "${usedBytes:-0}")"
            done
    done | sort -k4,4rh
} | column -t