メインコンテンツまでスキップ

ConfigMaps

ConfigMaps を使用すると、設定アーティファクトをイメージコンテンツから分離して、コンテナ化されたアプリケーションをポータブルに保つことができます。ConfigMaps は機密情報ではないデータをキーと値のペアで保存し、Pod は環境変数、コマンドライン引数、または設定ファイルとして使用できます。

ConfigMaps の利点:

  • 設定管理: アプリケーション設定をコードとは別に保存
  • 環境の柔軟性: 異なる環境で異なる設定を使用
  • 実行時の更新: コンテナイメージを再ビルドせずに設定を更新
  • ポータビリティ: 異なる環境間でアプリケーションをポータブルに保つ

このラボでは、リテールストアの UI コンポーネント用に ConfigMap を作成し、バックエンドサービスへの接続方法を学びます。

ConfigMap の作成

リテールストアの UI コンポーネント用の ConfigMap を作成しましょう。UI はバックエンドサービスの場所を知る必要があります:

~/environment/eks-workshop/base-application/ui/configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ui
data:
RETAIL_UI_ENDPOINTS_CATALOG: http://catalog.catalog.svc:80
RETAIL_UI_ENDPOINTS_CARTS: http://carts.carts.svc:80
RETAIL_UI_ENDPOINTS_ORDERS: http://orders.orders.svc:80
RETAIL_UI_ENDPOINTS_CHECKOUT: http://checkout.checkout.svc:80
A

kind: ConfigMap: 作成するリソースのタイプを Kubernetes に指示します

B

metadata.name: namespace 内でこの ConfigMap を一意に識別します

C

data: 設定データを含むキーと値のペア

ConfigMap の設定を適用します:

~$kubectl apply -k ~/environment/eks-workshop/modules/introduction/basics/configmaps/

ConfigMap の確認

次に、作成した ConfigMap を確認してみましょう:

~$kubectl get configmaps -n ui
NAME               DATA   AGE
kube-root-ca.crt   1      2m51s
ui                 4      2m50s

ConfigMap の詳細情報を取得します:

~$kubectl describe configmap ui -n ui
Name:         ui
Namespace:    ui
Labels:       <none>
Annotations:  <none>
 
Data
====
RETAIL_UI_ENDPOINTS_CARTS:
----
http://carts.carts.svc:80
 
RETAIL_UI_ENDPOINTS_CATALOG:
----
http://catalog.catalog.svc:80
 
RETAIL_UI_ENDPOINTS_CHECKOUT:
----
http://checkout.checkout.svc:80
 
RETAIL_UI_ENDPOINTS_ORDERS:
----
http://orders.orders.svc:80
 
 
BinaryData
====
 
Events:  <none>

これにより以下が表示されます:

  • Data セクション - ConfigMap に保存されているキーと値のペア
  • Labels - 整理のためのメタデータタグ
  • Annotations - 追加のメタデータ

Pod での ConfigMaps の使用

次に、ConfigMap を使用する Pod を作成しましょう。UI Pod を更新して設定を使用します:

~/environment/eks-workshop/modules/introduction/basics/configmaps/ui-pod-with-config.yaml
apiVersion: v1
kind: Pod
metadata:
name: ui-pod
namespace: ui
labels:
app.kubernetes.io/name: ui
app.kubernetes.io/component: service
app.kubernetes.io/created-by: eks-workshop
spec:
containers:
- name: ui
image: public.ecr.aws/aws-containers/retail-store-sample-ui:0.4.0
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: ui
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
A

envFrom.configMapRef: ConfigMap のすべてのキーと値のペアを環境変数としてロードします

更新された Pod 設定を適用します:

~$kubectl apply -f ~/environment/eks-workshop/modules/introduction/basics/configmaps/ui-pod-with-config.yaml

設定のテスト

Pod が設定にアクセスできることを確認しましょう:

~$kubectl exec -n ui ui-pod -- env | grep RETAIL_UI_ENDPOINTS_CATALOG
RETAIL_UI_ENDPOINTS_CATALOG=http://catalog.catalog.svc:80

すべての ConfigMap 環境変数を確認することもできます:

~$kubectl exec -n ui ui-pod -- env | grep RETAIL_UI
RETAIL_UI_ENDPOINTS_CATALOG=http://catalog.catalog.svc:80
RETAIL_UI_ENDPOINTS_CARTS=http://carts.carts.svc:80
RETAIL_UI_ENDPOINTS_ORDERS=http://orders.orders.svc:80
RETAIL_UI_ENDPOINTS_CHECKOUT=http://checkout.checkout.svc:80

覚えておくべき重要なポイント

  • ConfigMaps は機密情報ではない設定データを保存します
  • コンテナイメージから設定を分離します
  • 環境変数として使用したり、ファイルとしてマウントしたりできます
  • 異なる環境で同じイメージを動作させることができます
  • ConfigMap ごとに 1MB のサイズ制限があります