Kubernetesでのエフェメラル・ストレージの管理
Kubernetesポッドにはエフェメラル(一時)ローカル・ストレージが必要です。
Kubernetesポッドは、スクラッチ領域、キャッシュおよびログにエフェメラル・ストレージを使用します。このストレージは一時的なもので、ポッドのライフサイクルに固有です。一時記憶域はポッド間で共有されず、ポッドが削除されると消えます。
Kubernetesエフェメラル・ストレージの詳細は、Kubernetesドキュメントのローカル・エフェメラル・ストレージを参照してください。
次のステップはOracle Kubernetes Engineに適用されますが、他のKubernetes環境では概念が類似しています。
ノード・プールでは、ノードはポッド・ストレージにブート・ボリュームを使用します。イメージは/var
ディレクトリに格納されるため、エフェメラル記憶域のほとんどはルート・パーティション内のイメージによって占有されます。ブート・ボリュームに必要な領域は、Oracle Blockchain Platform Enterprise Editionのインスタンスをインストールして、そのノードにチェーンコードを作成するたびに増加します。
kubectl get --raw "/api/v1/nodes/<node IP>/proxy/stats/summary"
JSON結果のrootfs
およびfs
セクションには、容量と使用可能なバイトが表示されます。
ノードの実行中にブート・ボリュームのサイズを変更して、エフェメラル・ストレージの量を更新できます。詳細は、Oracle Kubernetes Engineのノード・プールの更新を参照してください。
- Oracle Kubernetes Engineクラスタの「リソース」で、「ノード・プール」を選択します。
- 「Edit」をクリックします。「ノード・プールの編集」ページで、「カスタム・ブート・ボリューム・サイズの指定」を選択し、「ブート・ボリューム・サイズ」の値をGBで入力します。作成されるノードは、エフェメラル・ストレージにこの値を使用します。
- ノード・プールのワーカー・ノードごとに、次のステップを実行してブート・ボリュームのサイズを変更します。
- ノードの横にある下矢印をクリックすると、ノードに関する詳細情報が表示されます。
- ノードのブート・ボリュームに移動し、「編集」をクリックします。
- 「ボリュームの編集」ページの「ボリューム・サイズおよびパフォーマンス」で、「ボリューム・サイズ」の値をGBで指定し、「変更の保存」をクリックします。
- 次のステップを実行して要塞セッションを設定し、それを使用してプライベート・ワーカー・ノードに接続します。
- インスタンスの詳細ページで、「Oracle Cloud Agent」タブをクリックし、要塞プラグインを有効にします。
- 検索バーで要塞を検索し、「サービス」の下の「要塞アイデンティティとセキュリティ」を結果でクリックします。
- 「要塞の作成」をクリックします。
- 「要塞の作成」ページで、ターゲット仮想クラウド・ネットワーク(VCN)に対して、Oracle Kubernetes Engine VCNに続けてクラスタ名を指定します。「ターゲット・サブネット」に、Kubernetes APIエンドポイントを指定します。「CIDRブロック許可リスト」に0.0.0.0/0と入力し、「要塞の作成」をクリックします。
- 要塞をクリックして開き、「セッションの作成」をクリックします。
- 「ユーザー名」の値にopcと入力し、「コンピュート・インスタンス」リストからノードを選択します。
- 「SSHキーの追加」の下にSSHキーを貼り付けます。
- 「拡張オプションの表示」をクリックし、「ターゲット・コンピュート・インスタンスのIPアドレス」リストからノードまたはインスタンスのIPアドレスを選択します。これはノードまたはインスタンスのプライベートIPv4アドレスで、インスタンスの情報セクションで使用できます。
- 「セッションの作成」をクリックします。
- セッションのコンテキスト・メニューから、「SSHコマンドのコピー」をクリックします。
- SSHコマンドで-iパラメータを使用して秘密キーを指定することで、SSH経由でノードにログインできるようになりました。
- クラスタ内のワーカー・ノードごとに前のステップを繰り返します。
- ノードごとに、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を使用して、クラスタ内の各ノードで実行されている各ポッドのエフェメラル・ストレージ使用量を取得します。
#!/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