エンタープライズアプリケーションのデプロイには、広範な構成管理が必要です。アプリケーションイメージに構成をハードコーディングすると、アプリケーションが特定の環境に結合され、環境ごとに新しいイメージをビルドする必要があります。Kubernetes の ConfigMap は、構成をアプリケーションコードから分離することで、この問題を解決します。機密性の低い設定データを外部に保存し、実行時に Pod に挿入できます。これにより、複数の環境で同じアプリケーションイメージを使用できます。機密データには Secret を使用してください。
選択ガイド
ボリュームとしてマウント (推奨):このメソッドは、設定データをファイルとして公開します。ConfigMap への変更は、Pod を再起動することなく、マウントされたファイルに自動的に同期されます。このメソッドは、完全な設定ファイルの管理や、動的な更新が必要なシナリオで使用します。
環境変数として挿入:このメソッドは、設定を環境変数としてコンテナーに直接挿入します。このメソッドは、実行時引数や機能フラグなどの単純なキーと値のパラメーターに使用します。
設定項目の作成
このセクションでは、サンプル Nginx Deployment 用の ConfigMap を作成する方法について説明します。
コンソール
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
サンプルの設定項目を作成します: [名前空間] を
defaultに設定し、[作成] をクリックします。ConfigMap の名前を入力します。次に、[+ 追加] をクリックし、設定項目の [名前] と [値] を入力して、[OK] をクリックします。
ConfigMap名: app-config
名前と値を入力して設定項目を追加します。[ファイルからインポート] をクリックして、JSON ファイルから ConfigMap を作成することもできます。
nginx.conf:server { listen 80; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 "healthy\n"; add_header Content-Type text/plain; } }
kubectl
ConfigMap を作成します。
kubectl create configmap app-config \ --namespace=default \ --from-literal=nginx.conf="$(cat <<'EOF' server { listen 80; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 "healthy\n"; add_header Content-Type text/plain; } } EOF )"ConfigMap を確認します。出力の
DATA: 1は、設定項目が作成されたことを示します。kubectl get configmap app-config
Pod で ConfigMap を使用
ワークロードとそれが使用する ConfigMap は、同じクラスターおよび名前空間にある必要があります。
メソッド 1:ボリュームマウント
コンソールでの設定
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
Deployment を作成します。
[ステートレス] ページで、[イメージから作成] をクリックします。
[基本情報] ページで、アプリケーションの基本情報を設定します。
[名前]:
nginx-volume-demo。[名前空間]:default。[レプリカ]:
2。[タイプ]:ステートレス (Deployment)。
[次へ] をクリックして [コンテナー設定] ページに進みます。
[イメージ名] と [ポート] を設定します。
イメージ名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6コンテナーポート:80、プロトコル:TCP。
重要このイメージをプルするには、クラスターがパブリックネットワークにアクセスできる必要があります。クラスターの作成時に、デフォルトで有効になっている[VPC の SNAT を構成]を選択した場合、追加の構成は必要ありません。それ以外の場合、詳細については、「ACK クラスターのインターネットアクセスを有効にする」をご参照ください。
[ボリューム] セクションで、[ローカルストレージの追加] をクリックして ConfigMap のマウントを追加します。情報を設定した後、[次へ] をクリックします。
[PV タイプ]:[ConfigMap]。[名前]:
nginx-config。[マウントソース]:app-config。[コンテナーパス]:/etc/nginx/conf.d。
[詳細設定] ページで、必要に応じてスケーリング、スケジューリング、ラベルとアノテーションを設定し、[作成] をクリックします。
[作成完了] ページで、アプリケーションタスクを表示します。
[アプリケーション作成タスクが送信されました] パネルで、[アプリケーション詳細の表示] をクリックし、コンテナー化されたアプリケーションのステータスが
実行中であることを確認します。
ConfigMap ファイルがマウントされていることを確認します。
ログインするコンテナー (例:nginx-volume-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginx を選択してコンテナーにログインします。
出力に nginx.conf ファイルが含まれています。これは ConfigMap がマウントされていることを示します。
ls -la /etc/nginx/conf.d/ファイルの内容を確認します。
cat /etc/nginx/conf.d/nginx.conf出力は設定項目の内容と同じです。これは、アプリケーションが ConfigMap をボリュームとしてマウントすることで、ConfigMap データにアクセスできることを示します。
Kubectl での設定
nginx-volume-demo.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-volume-demo namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-volume template: metadata: labels: app: nginx-volume spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/conf.d volumes: - name: nginx-config configMap: name: app-config items: - key: nginx.conf path: nginx.confDeployment を作成します。
kubectl apply -f nginx-volume-demo.yamlDeployment を確認します。Pod のステータスが
実行中であれば、アプリケーションは作成されています。kubectl get pods -l app=nginx-volume -n default出力に nginx.conf ファイルが含まれています。これは ConfigMap がマウントされていることを示します。
kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/conf.d/ファイルの内容を確認します。
kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/conf.d/nginx.conf出力は設定項目の内容と同じです。これは、アプリケーションが ConfigMap をボリュームとしてマウントすることで、ConfigMap データにアクセスできることを示します。
メソッド 2:環境変数インジェクション
コンソールでの設定
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
Deployment を作成します。
[ステートレス] ページで、[イメージから作成] をクリックします。
[基本情報] ページで、アプリケーションの基本情報を設定します。
[アプリケーション名]:
nginx-env-demo。[名前空間]:default。[レプリカ]:
2。[タイプ]:ステートレス (Deployment)。
[次へ] をクリックして [コンテナー設定] ページに進みます。
[イメージ名] と [ポート] を設定します。
イメージ名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6コンテナーポート:80、プロトコル:TCP。
重要このイメージをプルする前に、クラスターはパブリックネットワークにアクセスできる必要があります。クラスターの作成時に、デフォルトで有効になっている[VPC の SNAT を構成]を選択した場合、追加の構成は不要です。それ以外の場合は、詳細については「ACK クラスターのインターネットアクセスを有効にする」をご参照ください。
[環境変数] セクションで、[追加] をクリックします。情報を設定した後、[次へ] をクリックします。
[タイプ]:設定項目、[名前]:
CONFIG_、[変数/変数参照]:app-config。
[詳細設定] ページで、必要に応じてスケーリング、スケジューリング、ラベルとアノテーションを設定し、[作成] をクリックします。
[作成完了] ページで、アプリケーションタスクを表示します。
[アプリケーション作成タスクが送信されました] パネルで、[アプリケーション詳細の表示] をクリックし、コンテナーのステータスが
実行中であることを確認します。
環境変数が挿入されていることを確認します。
ログインするコンテナー (例:nginx-env-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginx を選択してログインします。
env | grep CONFIG_出力は設定項目の内容と同じです。これは、アプリケーションが環境変数を介して ConfigMap データにアクセスできることを示します。
Kubectl での設定
nginx-env-demo.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-env-demo namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-env template: metadata: labels: app: nginx-env spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # ConfigMap からすべてのキーと値のペアを挿入します。 envFrom: - prefix: CONFIG_ configMapRef: name: app-configDeployment を作成します。
kubectl apply -f nginx-env-demo.yamlDeployment を確認します。Pod のステータスが
実行中であれば、アプリケーションは作成されています。kubectl get pods -l app=nginx-env -n default環境変数が挿入されていることを確認します。
kubectl exec deployment/nginx-env-demo -n default -- env | grep CONFIG_出力は設定項目の内容と同じです。これにより、アプリケーションが環境変数を介して ConfigMap データにアクセスできることが確認されます。
ConfigMap の管理
設定項目を作成した後、[設定項目] ページで次の操作を実行できます:
操作 | 説明 |
ConfigMap の編集 | 対象の ConfigMap の [操作] 列で、[編集] をクリックします。設定項目の [名前] と [値] を変更できます。 重要 使用中の ConfigMap を変更すると、関連するアプリケーションに直接影響し、サービスの再起動やエラーが発生する可能性があります。変更を行う前に影響を評価し、オフピーク時に操作を実行してください。 |
設定項目の削除 | 対象の ConfigMap の [操作] 列で、[削除] をクリックして、使用されなくなった ConfigMap を削除します。 重要 kube-system および kube-public 名前空間にあるシステム生成の ConfigMap (CoreDNS 設定など) は削除しないでください。削除すると、クラスターの安定性に影響する可能性があります。 |
関連ドキュメント
Pod の例外に関する診断プロセス、トラブルシューティング方法、一般的な問題、およびソリューションの詳細については、「Pod の例外のトラブルシューティング」をご参照ください。
コンソールと kubectl を使用して ACK クラスターでステートレスアプリケーションを作成する方法の詳細については、「ステートレスな Deployment を作成する」をご参照ください。
詳細については、Kubernetes ドキュメントの「ConfigMaps」をご参照ください。