0

kubernetes で構成可能なホスト パスを設定しようとしていますが、問題に直面しています。パスを持つ構成マップを作成し、プレースホルダーを構成マップ値に置き換えようとしています。これが私の構成です:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  namespace: app
spec:
  template:
    spec:
      containers:
      - name: php
        env:
        - name: PHP_FOLDER
          valueFrom:
            configMapKeyRef:
              name: local-paths
              key: CODE_PATH
      volumes:
      - name: src-code
        hostPath:
          path: PHP_FOLDER
          type: Directory

私も試しました

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  namespace: app
spec:
  template:
    spec:
      containers:
      - name: php
        env:
        - name: PHP_FOLDER
          valueFrom:
            configMapKeyRef:
              name: local-paths
              key: CODE_PATH
      volumes:
      - name: src-code
        hostPath:
          path: $(PHP_FOLDER)
          type: Directory 

エラーが発生する:Error response from daemon: create $(PHP_FOLDER): "$(PHP_FOLDER)" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute pathまたはMountVolume.SetUp failed for volume "src-code" : hostPath type check failed: PHP_FOLDER is not a directory

4

3 に答える 3

1

yaml ファイルで環境値を直接使用することはできません。あなたがしたことは実際にはもっと悪いことです。ConfigMaps またはシークレットは実行時に作成されます。つまり、コンテナーの実行が開始されるまで使用できません。ただし、ポッドまたはデプロイメントが作成される前に、yaml の解析が行われます。本番環境またはテストで kubernetes を使用するまでは、タイムラインをもっと練習する必要があると思います。

この場合のベスト プラクティスは、デプロイの直前に bash スクリプトを使用して yaml ファイルを変更し、自動化することです。

于 2019-08-13T17:27:49.493 に答える
0

他のユーザーが正しく述べているように、プレーンな yaml/kubectl では環境変数を使用できません。展開コマンドの前に無駄のないレイヤーを追加し、envsubst または ansible などでマニフェストをテンプレート化することをお勧めします

于 2019-08-13T20:04:00.513 に答える