クラウドネイティブ | K8s での VolumeMounts.subPath の賢い使い方

クラウドネイティブ | K8s での VolumeMounts.subPath の賢い使い方

1. 概要

場合によっては、単一の Pod 内で複数のパーティがボリュームを共有して使用すると便利なことがあります。 volumeMounts.subPath プロパティを使用すると、参照されるボリューム内のルート パスではなくサブパスを指定できます。

公式ドキュメント: https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#using-subpath

2. 使用シナリオ

  1. 複数のパスを使用してマウントされた 1 つの共有ボリューム。
  2. ConfigMap または Secret は特定のディレクトリ内の特定のパスにマウントされており、そのディレクトリ内に上書きしたくない他のファイルがあります。

3. 共有ボリュームで複数のパスをマウントするために使用する

configmap/secret として使用される場合、subPath は configmap/secret のサブパスを表します。

[例1] マウントディレクトリ、hostPath

 APIバージョン: v1
種類:ポッド
メタデータ:
名前:私のランプサイト
仕様:
nodeName : local - 168 - 182 - 110 # テストの便宜上、スケジューリングマシンを指定します
コンテナ:
-名前: mysql
画像: mysql
環境:
-名前: MYSQL_ROOT_PASSWORD
: "rootpasswd"
ボリュームマウント:
- mountPath : / var / lib / mysql #コンテナ内のパスにマウント
name : site - data #マウントされたデバイスの名前。ボリュームに対応している必要があります[ * ] .name
subPath : mysql # ボリューム パス内のサブパス (ボリューム パス ディレクトリの下に空の mysql ディレクトリが自動的に作成されます)
-名前: php
画像: PHP : 7.0 - Apache
ボリュームマウント:
- mountPath : / var / www / html #コンテナ内のパスにマウント
name : site - data # ボリューム パス内のサブパス (site - data [空のディレクトリ] はボリューム パス ディレクトリに自動的に作成されます)
サブパス: html
巻数:
- name : nginx #上記と同じです。これはローカル ファイル パスです。上記はコンテナ内のパスです。
ホストパス:
パス: / opt / k8s / subPath / lamp #このパスを作成する必要があります

[例2] ディレクトリpvcをマウントする

 # ストレージクラス
種類:ストレージクラス
apiバージョン:ストレージ.k8s .io / v1
メタデータ:
名前:ローカルストレージ
プロビジョナー: kubernetes .io / no -プロビジョナー
ボリュームバインディングモード: WaitForFirstConsumer
---
#PVC
APIバージョン: v1
種類:永続ボリューム
メタデータ:
名前:ローカルランプPV
ラベル:
名前:ローカルランプPV
仕様:
容量
ストレージ: 1 Gi
アクセスモード:
-一度だけ読み書き可能
persistentVolumeReclaimPolicy :保持
storageClassName :ローカル-ストレージ
地元
パス: / opt / k8s / subPath / lamp - pvc
ノードアフィニティ:
必須
ノードセレクタ用語:
-一致する表現:
-キー: kubernetes.io/ホスト名
演算子:

-ローカル- 168 - 182 - 110

---
#PVC
種類: PersistentVolumeClaim
APIバージョン: v1
メタデータ:
名前:私のランプサイトデータ
仕様:
アクセスモード:
-一度だけ読み書き可能
リソース
リクエスト:
ストレージ: 1 Gi
storageClassName :ローカル-ストレージ
セレクター:
マッチラベル:
名前:ローカルランプPV
---
APIバージョン: v1
種類:ポッド
メタデータ:
名前:私のランプサイトPVC
仕様:
コンテナ:
-名前: mysql
画像: mysql
環境:
-名前: MYSQL_ROOT_PASSWORD
: "rootpasswd"
ボリュームマウント:
-マウントパス: / var / lib / mysql
名前:サイト-データ
サブパス: mysql
-名前: php
画像: PHP : 7.0 - Apache
ボリュームマウント:
-マウントパス: / var / www / html
名前:サイト-データ
サブパス: html
巻数:
-名前:サイト-データ
永続ボリュームクレーム:
クレーム名:私のランプサイトデータ

PVC テンプレートを使用する場合は、PVC を手動で作成する必要はありません。次に例を示します。

 volumeClaimTemplates : #PVCテンプレートとして考えることができます
-メタデータ:
名前: nginx - pvc
仕様:
アクセスモード: [ "ReadWriteOnce" ]
storageClassName : "local-storage" #ストレージクラス名。これは上記の nginx - sc.yamlのメタデータ.nameです。
リソース
リクエスト:
ストレージ: 1 Gi

[例3] 1つのファイルを共有する subPath がフォルダーではなくファイルの場合はどうなるでしょうか?同様に、subPath を通じてファイルを指定するだけです。 subPath では相対ディレクトリを使用する必要があることに注意してください。詳細は以下の通りです。

 apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ:
名前:デプロイメント-テスト
仕様:
レプリカ 1
セレクター:
マッチラベル:
アプリ: nginx - pod
テンプレート
メタデータ:
ラベル:
アプリ: nginx - pod
仕様:
nodeName : local - 168 - 182 - 110 # テストの便宜上、スケジューリングマシンを指定します
コンテナ:
-名前: nginx
イメージ: docker .io / library / nginx :最新
ボリュームマウント:
-マウントパス: /etc/nginx/nginx.conf
名前: nginx - conf
サブパス: nginx - conf
巻数:
- name : nginx - conf #上記と同じです。これはローカル ファイル パスです。上記はコンテナ内のパスです。
ホストパス:
パス: / opt / k8s / subPath / nginx #このパスを作成する必要があります

[結論] ホストマシン上のファイルが優先され、ポッド内の元のデフォルトファイルの内容が上書きされます。

4. ConfigMapとSecretでsubPathを使用する

configmap/secret として使用される場合、subPath は configmap/secret のサブパスを表します。 subPath​ を使用しない場合、コンテナー内の元のファイル (volumeMounts.mountPath​ に対応するディレクトリ) はクリアされ、ConfigMap ファイルと Secret ファイルは volumeMounts.mountPath​ に対応するディレクトリに配置されます。

[例1] ConfigMap

 APIバージョン: v1
種類: ConfigMap
メタデータ:
名前: nginx - conf
データ
nginx.conf : |+
ワーカープロセス1 ;
イベント{
ワーカー接続1024 ;
}
http {
mime .typesをインクルードします
default_type アプリケーション/オクテットストリーム;
ファイル送信オン;
キープアライブタイムアウト65 ;
サーバー{
聞く80 ;
サーバー名 ローカルホスト;
位置/ {
ルートhtml ;
インデックス インデックス.htmlインデックス.htm ;
}
エラーページ500 502 503 504 / 50 x .html ;
場所= / 50 x .html {
ルートhtml ;
}
}
}
---
apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ:
名前:デプロイメント- test2
仕様:
レプリカ 1
セレクター:
マッチラベル:
アプリ: nginx - pod
テンプレート
メタデータ:
ラベル:
アプリ: nginx - pod
仕様:
nodeName : local - 168 - 182 - 110 # テストの便宜上、スケジューリングマシンを指定します
コンテナ:
-名前: nginx
イメージ: docker .io / library / nginx :最新
ボリュームマウント:
- name : nginx - cm # volumes.nameと同じ
マウントパス: /etc/nginx/nginx.conf
サブパス: nginx.conf
巻数:
-名前: nginx - cm
構成マップ:
名前: nginx - conf # configMap 名

[例1] 秘密

 APIバージョン: v1
種類:秘密
メタデータ:
名前: mysecret
タイプ:不透明
データ
ユーザー名: admin
パスワード: MWYyZDFlMmU2N2Rm

---

vim myapp -デモ.yaml
apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ:
名前: mysql -デモ
名前空間:デフォルト
仕様:
レプリカ 1
セレクター:
マッチラベル:
アプリ: myapp
テンプレート
メタデータ:
ラベル:
アプリ: myapp
仕様:
コンテナ:
-名前: myapp
画像: mysql
imagePullPolicy : IfNotPresent
ポート:
-名前: http
コンテナポート: 80
ボリュームマウント:
-名前: mysql
マウントパス: / tmp / data
サブパス:データ
巻数:
-名前: mysql
秘密
secretName :私の秘密

[結論] データファイル情報は /tmp ディレクトリに保存され、存在する場合は上書きされます。存在しない場合は自動的に作成されます。

最後に、volumeMounts.subPath についてまとめます。

  • SubPath は、実際にはボリュームによってマウントされたサブディレクトリまたは単一のファイルです。ディレクトリか単一ファイルかは、ボリュームでマウントされたディレクトリ内に、subPath で定義されたファイル (ファイルまたはディレクトリ) があるかどうかによって決まります。そうでない場合は、ボリュームに対応するディレクトリにサブパス ディレクトリが作成されます。
  • ConfigMap および Secret で subPath が使用されている場合、subPath が指定されていないと、volumeMounts.mountPath に対応するディレクトリ内のすべてのファイルがクリアされ、ConfigMap または Secret で定義されたファイルのみが保存されます。

volumeMounts.subPath の使い方は以上です。ご質問がございましたら、メッセージを残してください。次回の記事はさらに面白いものになる予定です。しばらくお待ちください〜

<<:  Kubernetes セキュリティからクラウドネイティブ アプリケーション セキュリティへ

>>:  IDCが2022年第3四半期のパブリッククラウドサービス市場レポートを発表、天一クラウドは中国のパブリッククラウドIaaS+PaaS市場で第3位にランクイン

推薦する

APPプロモーションの核となる競争力:ASO戦略の総合集!

ASOは、App Store Optimization の略で、中国語でアプリケーションストア最適化...

データパケット: US VPS、月額 3.46 ドル、1G メモリ/16 コア/50g NVMe/30T トラフィック

datapacket™ ( Data Packet Networks LLC ) は、米国テキサス州...

過去1年間のアリババクラウドハイブリッドクラウド:18の省政府クラウドにサービスを提供

2020 年を振り返ると、この流行はクラウド コンピューティングの発展に大きな影響を与えました。調査...

2023 年までに世界でトップ 10 に入る量子コンピューティング企業

量子コンピューティングは、私たちの世界を変えるコンピューティングに対するまったく新しいアプローチを表...

Weimian.comは数百万の広告料の未払いに直面し、プレッシャーを軽減するために人員削減を行った。

寒い冬の間、電子商取引の注目度の高い戦略はB2Cスタートアップに適しているでしょうか?元従業員が暴露...

SEOのルール: ウェブサイトの価値志向を最適化する方法

「ウェブサイトの最適化」という用語は、ウェブマスターにとっては非常に馴染み深いものです。どんなウェブ...

小さな失敗:大学生市場をターゲットにした電子商取引の失敗事例、Dashu.com

【はじめに】中国初の大学キャンパス市場に特化した電子商取引サイトが2011年9月に開設され、その公式...

#黒5# 安価な「バーチャルホスト」情報のまとめ。信頼性が高く、手間をかけずに小規模なウェブサイトを構築できます。

2018 年のブラック フライデーには期待できるものがあまりないと誰もが言いますが、「ウェブ ホステ...

外部リンクが存在する理由についての簡単な説明

SEO 最適化は、一般的にオンサイト最適化とオフサイト最適化の 2 つの部分に分けられます。オンサイ...

speedykvm - $31/年/KVM/Win/1g メモリ/50g ハードディスク/5T トラフィック

speedykvm は、「Volatile」と呼ばれる新しいタイプの VPS を開始しました。通常の...

傍観者から CTO へ: Cloud Foundry Foundation での 5 年間

[51CTO.com クイック翻訳] 最近、Cloud Foundry プロジェクトがわずか 5 年...

SEOは投資収益率の高いSEMモデルではない

Baidu 百科事典では、投資収益率について次のように説明しています。投資収益率 (ROI) とは、...

Baidu が初の「ソーシャルメディア共有データレポート」を発表

百度が初の「ソーシャルメディア共有データレポート」を発表、ユーザーの1日あたりの平均共有量は60%増...

愛邦の変革から見る垂直生活検索:地域情報の爆発

最近、Aibang.comは戦略的なアップグレードを発表し、新しい生活検索サービスであるNearby...