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

推薦する

ホームシアタークラブのプロジェクト計画に関する簡単な分析

この記事は、以前 Lao Snail が企業のために行った企画です。重要な断片と概要を抜粋して皆さん...

PS メールはウェブサイトのランキングを下げる可能性があります。不満を抱かないでください。

このタイトルはちょっと怖くて信じられないと思うかもしれません。はい、私も最初はあなたと同じ反応をしま...

民間医療業界におけるWeChatマーケティングのメリットとデメリット

WeChat マーケティングに関しては、誰もがよく知っていると思います。ただし、WeChat 上のユ...

謝文:法的基準と事実的基準

AppleとSamsungの特許戦争は暫定的な結果となり、Appleが圧勝し、Samsungが惨敗し...

B2Cウェブサイトのどのような側面がコンバージョン率を向上させることができるか

B2Cモールを運営している友人は皆、このような気持ちになったことがあるはずです。彼らはいつも、自分の...

クラウド: デジタルイノベーションの未来

コストの最適化に加えて、企業が持続可能性を確保するために重要な側面が 2 つあります。それはスピード...

Kuaiboは今日トラブルに巻き込まれた。多数の警察がその巣穴を襲撃した。

さらに読む: Qvodは調査に対して次のように回答した。「同社は通常通り営業しており、誰かが逮捕され...

百度鉄馬、網易ブログなど52のウェブサイトがギャングや暴力への関与の疑いで捜査中

新華網、北京、6月5日(記者:屈静)記者が5日、国家新聞出版広電総局から得た情報によると、Sina....

ソフトウェアダウンロードサイトの最適化における草の根ウェブマスターの経験

卒業後、SEOの仕事に就きました。安定した仕事と安定した給料により、落ち着きのない著者は自分のウェブ...

オンラインで募集している友人への10の心からの言葉

私は、オンライン求人ビジネスに3年間携わってきました。長すぎず短すぎず、それ以前に携わっていたECサ...

SEOリーダーへ:チームを率いて生き残る方法

サービス業界の人員として、SEO 担当者は自発的または意図的にチームを編成し、SEO サービスを提供...

Google App EngineはPHP環境をサポート

Google の公式ブログによると、Google App Engine は 4 番目の言語である P...

タオバオの技術開発レビュー(第3部):Oracle/Alipay/Wangwang

オラクル/アリペイ/ワンワン  タオバオは個人のウェブサイトとしてはそれほど長い歴史はありません。し...

共同購入の新しいトレンド:海外の3大共同購入ウェブサイトからヒントを得る

導入海外の大手共同購入サイト3社の事例から、海外の共同購入サイトは中流・高級消費者層を優遇し、高水準...