[解決済み] Dockerのenvファイルに相当するKubernetesの機能
2022-05-14 11:02:48
質問
背景は?
現在、私たちはサービスにDockerとDocker Composeを使用しています。私たちは、異なる環境のための設定を、アプリケーションによって読み取られる環境変数を定義するファイルに外部化しました。例えば
prod.env
というファイルがあります。
ENV_VAR_ONE=Something Prod
ENV_VAR_TWO=Something else Prod
というように
test.env
というファイルがあります。
ENV_VAR_ONE=Something Test
ENV_VAR_TWO=Something else Test
このように、単純に
prod.env
または
test.env
ファイルを作成し、コンテナを起動する。
docker run --env-file prod.env <image>
我々のアプリケーションは、次に
prod.env
.
質問です。
- Kubernetes で、このようにハードコーディングする代わりに、ファイルから環境変数を提供する方法はありますか (たとえば、ポッドを定義する場合など)。
apiVersion: v1 kind: ポッド メタデータ ラベル コンテキスト: docker-k8s-lab 名前: mysql-pod 名前: mysql-pod spec: コンテナ - env: - 名前: MYSQL_USER 値: mysql - 名前: MYSQL_PASSWORD 値: mysql - 名前: MYSQL_DATABASE 値: サンプル - 名前: MYSQL_ROOT_PASSWORD 値: supersecret image: "mysql:latest" 名前: mysql ポート - コンテナポート: 3306
- これが不可能な場合、推奨されるアプローチは何ですか?
どのように解決するのですか?
コンテナの環境変数は 秘密 または コンフィグマップ . 扱うデータが機密性の高いもの(パスワードなど)の場合はSecretsを、そうでない場合はConfigMapsを使用します。
Podの定義で、コンテナがSecretから値を取得するように指定します。
apiVersion: v1
kind: Pod
metadata:
labels:
context: docker-k8s-lab
name: mysql-pod
name: mysql-pod
spec:
containers:
- image: "mysql:latest"
name: mysql
ports:
- containerPort: 3306
envFrom:
- secretRef:
name: mysql-secret
この構文は、Kubernetes 1.6以降でのみ利用可能であることに注意してください。それ以前のバージョンのKubernetesでは、各値を手動で指定する必要があります、例.
env:
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_USER
(ただし
env
は配列を値として取る)
そして、すべての値に対して繰り返す。
どちらの方法を使うにせよ、これで本番用と開発用の2種類のSecretを定義することができます。
dev-secret.yamlを使用します。
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
MYSQL_USER: bXlzcWwK
MYSQL_PASSWORD: bXlzcWwK
MYSQL_DATABASE: c2FtcGxlCg==
MYSQL_ROOT_PASSWORD: c3VwZXJzZWNyZXQK
prod-secret.yamlを使用します。
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
MYSQL_USER: am9obgo=
MYSQL_PASSWORD: c2VjdXJlCg==
MYSQL_DATABASE: cHJvZC1kYgo=
MYSQL_ROOT_PASSWORD: cm9vdHkK
そして正しいシークレットを正しいKubernetesクラスタにデプロイします。
kubectl config use-context dev
kubectl create -f dev-secret.yaml
kubectl config use-context prod
kubectl create -f prod-secret.yaml
これでPodが起動するたびに、Secretで指定された値から環境変数に値が設定されるようになりました。
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】NginxのFastCGIでゲートウェイのタイムアウトを防ぐには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン