Kubernetes에서 임시 스토리지 관리

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

Kubernetes POD는 스크래치 공간, 캐싱 및 로그에 임시 스토리지를 사용합니다. 이 스토리지는 일시적이며 Pod의 수명 주기와 관련이 있습니다. 임시 스토리지는 여러 포드에서 공유되지 않으며 포드가 삭제되면 사라집니다.

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

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

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

다음 kubelet API 호출을 사용하여 지정된 노드의 각 Pod에 지정된 총 임시 저장 영역 및 양을 확인할 수 있습니다.
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. 배스천 생성을 누릅니다.
    4. 배스천 생성 페이지의 대상 가상 클라우드 네트워크(VCN)에 대해 Oracle Kubernetes Engine VCN과 클러스터 이름을 차례로 지정합니다. 대상 서브넷에 대해 Kubernetes API 끝점을 지정합니다. CIDR 블록 허용 목록에 대해 0.0.0.0/0을 입력한 다음 배스천 생성을 누릅니다.
    5. 배스천을 눌러 열고 세션 생성을 누릅니다.
    6. Username(사용자 이름) 값으로 opc를 입력하고 Compute instance(컴퓨트 인스턴스) 목록에서 노드를 선택합니다.
    7. SSH 키를 Add SSH Key(SSH 키 추가) 아래에 붙여넣습니다.
    8. 고급 옵션 표시를 누른 다음 대상 컴퓨트 인스턴스 IP 주소 목록에서 노드 또는 인스턴스의 IP 주소를 선택합니다. 노드 또는 인스턴스의 전용 IPv4 주소이며, 인스턴스의 정보 섹션에서 사용할 수 있습니다.
    9. 세션 생성을 누릅니다.
    10. 세션의 컨텍스트 메뉴에서 SSH 명령 복사를 누릅니다.
    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