kusTOMize を使用して、環境変数からボリュームの hostPath を指定することはできますか?
コンテナで構成されるデプロイメントを記述した Kubernetes マニフェストがあります。
開発中は、別のイメージ (開発ツールを含む) を使用し、ホストからコンテナーにコードをマウントします。こうすることで、再デプロイすることなくコードを変更できます。
patchStategicMerge を使用して運用イメージを開発中に使用するイメージに置き換え、コードをコンテナにマウントします。
kustomization.yaml
kind: Kustomization
bases:
- ../../base
patchesStrategicMerge:
- my-service.yaml
my-service.yaml
---
apiVersion: apps/v1
...
...
spec:
containers:
- name: myservice
image: myservice-dev-image:1.0.0
command: ['CompileDaemon', '--build=make build', '--command=./myservice']
volumeMounts:
- name: code
mountPath: /go/src/app
volumes:
- name: code
hostPath:
path: /source/mycodepath/github.com/myservice
私がやりたいのは、環境変数を介してパスを構成可能にし、特定のパス (/source/mycodepath/) を git にチェックインする必要がなく、他の開発者が簡単にできるようにすることです。独自の環境で使用してください。
kusTOMize を使用してこれを行うことは可能ですか?
1
環境変数を使用してそれを行う方法はわかりませんが、別のパスを持つオーバーレイを定義することは可能です。オーバーレイのカスタマイズを確認してください。これはオーバーレイを使用したものです github.com/kubernetes-sigs/kusTOMize/tree/master/examples/…
– ジャスティン・タンブリン
2020 年 9 月 3 日 11:55
あなたの質問は「(ラップトップからの)ローカル パスをポッドにマウントする方法」に要約できると思います。さらに、ポッドはどこで実行しますか?スタンドアロンの k8s で実行しますか、それともホスト/ラップトップ/PC (minikube など) で直接 k8s を実行しますか、それとも GKE、EKS などの管理されたものですか?
– ニック
2020 年 9 月 4 日 11:44
@ニックはまだわかりません。ラップトップからローカル パスをマウントする方法を知っています。問題は、私のラップトップではパスが /users/bob/github/somecode であり、co-w である可能性があることです。オーカーのラップトップは /users/sue/github/mycode にあります。オーバーレイを使用する場合は、オーバーレイ内でパスを定義できます。しかし、それを git にチェックインしたくありません。 docker-compose では相対パスを使用してこれを解決しますが、これは k8s では機能しないようです。
– コーダー ジョーンズ
2020 年 9 月 4 日 13:08
@JustinTamblyn ありがとう。オーバーレイを使用しています。問題は、ボリューム パスを変更せずに、さまざまな開発者が共有できるオーバーレイを作成するにはどうすればよいかということです。変数または相対パスを使用すると便利です。
– コーダー・ジョーンズ
2020 年 9 月 4 日 13:10
@CoderJones 理解できたと思います。答えとして何かまとめておきます
– ジャスティン・タンブリン
2020 年 9 月 4 日 15:46
------------------------
次のディレクトリ構造を作成します
k8s
k8s/ベース
k8s/オーバーレイ
k8s/オーバーレイ/ボブ
k8s/オーバーレイ/スー
まず、ベースを作成する必要があります。ベースはデフォルトのテンプレートであり、両方の人に適用される部分を提供します。 k8s/base で app.yaml というファイルを作成し、populate に次の内容を入力します (実際にここに貼り付けます。他の一般的なビットを --- と改行で区切ってそこに配置することもできます)。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myservice
namespace: default
spec:
strategy:
type: RollingUpdate
replicas: 1
template:
metadata:
labels:
name: myservice
app: myservice
spec:
containers:
- name: myservice
image: myservice-dev-image:1.0.0
command: ['CompileDaemon', '--build=make build', '--command=./myservice']
volumeMounts:
- name: code
mountPath: /go/src/app
volumes:
- name: code
hostPath:
path: /xxx
次に、同じディレクトリ (k8s/base) に kustomization.yaml という名前の別のファイルを作成し、次の内容を追加します。
resources:
- app.yaml
次に、2 つのオーバーレイを作成します。1 つはボブ用、もう 1 つはスー用です。
k8s/overlays/bob で、Bob のカスタム変更を app.yaml として作成し、以下を入力しましょう。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myservice
namespace: default
spec:
template:
spec:
volumes:
- name: code
hostPath:
path: /users/bob/code
ここで、k8s/overlays/bob にも次の内容を含む kustomization.yaml という名前の別のファイルを作成します。
resources:
- ../../base
patchesStrategicMerge:
- app.yaml
k8s/overlays/bob 内の 2 つのファイルを k8s/overlays/sue ディレクトリにコピーし、ボリューム内のパスを変更するだけです: bit。
次に、kusTOMize ビルドを実行して、結果のバージョン (bob と sue) を生成する必要があります。
k8s ダイレクトの場合ry はコード ディレクトリにあり、ターミナルを開きます (KusTOMize がインストールされている状態で次のコマンドを実行します)。
kustomize build k8s/overlays/bob
これにより、Bob のカスタム化がどのようになるかがわかります。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myservice
namespace: default
spec:
replicas: 1
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: myservice
name: myservice
spec:
containers:
- command:
- CompileDaemon
- --build=make build
- --command=./myservice
image: myservice-dev-image:1.0.0
name: myservice
volumeMounts:
- mountPath: /go/src/app
name: code
volumes:
- hostPath:
path: /users/bob/code
name: code
これを適用するには、次のコマンドを実行します。
kustomize build k8s/overlays/bob | kubectl apply -f -
Sue を適用するには、次のコマンドを実行します。
kustomize build k8s/overlays/sue| kubectl apply -f -
Yaml はスペースに敏感であり、これが Stackoverflow の回答にうまく収まるかどうかはわかりません。そのため、Github にも載せました: https://github.com/just1689/kusTOMize-local-storage