クラウドネイティブ | 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位にランクイン

推薦する

Webmaster Network からの毎日のレポート: 360 と Jike が協力して Yahoo のホームページを変更

1. ジャック・マーが市場を混乱させるために戻ってきて、検索業界は「三脚三脚」のパターンを呈している...

ウェブサイトのキーワードランキングでは制御できない要素を数える

ウェブサイトのランキングの変化は、SEO を行う人が最も懸念していることです。SEO 作業を行うと、...

AWS が 8 つのカテゴリで 22 の新機能をリリース

[元記事は51CTO.comより] 米国時間2017年11月29日、Amazonの子会社であるAWS...

まだ仮想化に抵抗していますか?仮想化技術に関する4つの誤解

コンピュータ ハードウェアの仮想化が産業用アプリケーションでその価値を証明するにつれて、ますます多く...

Baiduの外部最適化を行う方法についての考察

ウェブサイト運営の最適化のプロセスにおいて、Baidu の検索エンジン最適化は間違いなく最大の市場シ...

アップデートは停止しましたか? Baidu Shareはメンテナンスされていないようです

看看GPS地図网のウェブマスターによると、Baidu Shareは更新を停止した可能性があります。そ...

2012年を振り返るシンプルな事例分析

幸いなことに、12 月 21 日のいわゆる「世界の終わり」は来ませんでした。したがって、最適化の旅は...

西安湘市はアマゾン ウェブ サービス (AWS) と提携し、北西部地域の顧客をクラウド変革に導く

クラウドコンピューティングの時代を迎え、従来のシステムインテグレーターやソフトウェア開発者がどのよう...

Baidu Knowsにおける世論と広報の予防と対処方法

ウェブサイトのキーワードのランキングを最適化する場合でも、検索エンジンでの製品コンテンツのカバレッジ...

WeChatインタラクティブマーケティング運用テンプレート設定戦略

WeChat インタラクティブ マーケティングの別の言い方は、実際には感情マーケティングです。これは...

Alibaba Cloud Serverless Application Engine (SAE) の新アップグレード: アプリケーション作成コストが数秒で 40% 削減

8月4日、アリババクラウドは、ワンストップアプリケーションホスティングプラットフォームであるServ...

ブランドマーケティングにおけるWeiboの貢献

Weiboは、ほとんどの中国ネットユーザーが毎日情報を得るために必ず使用する主要なプラットフォームと...

平安科技区海英が51CTO「2018年中国IT産業優秀人物賞」を受賞

最近、由51CTO主上の《中国上海》ITインプレッション Normal 0 7.8 磅 0 2 fa...

サイトのスナップショットが追いつかない4つの理由について簡単に説明します。

ウェブマスターが困惑し、無力感を感じることが多いのは、サイトのスナップショットが遅れていて、追いつけ...

呂宋宋:ウェブページの速度は検索ランキングに影響しないかもしれない

ウェブサイトの読み込み速度は、地域、帯域幅、インターネット速度など、さまざまな要因によって影響を受け...