kubernetes - kusTOMize を使用して hostPath パスを設定する

okwaves2024-01-25  9

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

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。