アプリケーションの更新
新しいリソースが作成または更新されると、アプリケーション設定はこれらの新しいリソースを利用するために調整する必要があることがよくあります。Kubernetesでは、環境変数は設定を保存するための一般的な選択肢であり、デプロイメントを作成する際にcontainer specのenvフィールドを通じてコンテナに渡すこと ができます。
これを実現するための主な方法は2つあります:
-
Configmaps:これはKubernetesのコアリソースで、環境変数やテキストフィールド、その他のアイテムなどの設定要素をキーバリュー形式でポッドスペックに渡すことができます。
-
Secrets:これはConfigmapsに似ていますが、機密情報を扱うことを意図しています。Secretsはデフォルトでは暗号化されていないことに注意してください。
ACK FieldExport カスタムリソースは、ACKリソースのコントロールプレーンの管理と、それらのリソースの_プロパティ_をアプリケーションで使用することの間のギャップを埋めるように設計されています。ACKリソースから任意のspecまたはstatusフィールドをKubernetes ConfigMapまたはSecretにエクスポートするようにACKコントローラを設定します。これらのフィールドは、値が変更されると自動的に更新され、ConfigMapまたはSecretをKubernetesポッドに環境変数としてマウントできます。
このラボでは、カートコンポーネントのConfigMapを直接更新します。ローカルDynamoDBを指すように設定を削除し、ACKによって作成されたDynamoDBテーブルの名前を使用します:
- Kustomize Patch
- ConfigMap/carts
- Diff
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../../../base-application/carts
patches:
- path: carts-serviceAccount.yaml
configMapGenerator:
- name: carts
namespace: carts
env: config.properties
behavior: replace
options:
disableNameSuffixHash: true
apiVersion: v1
data:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${EKS_CLUSTER_NAME}-carts-ack
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
namespace: carts
apiVersion: v1
data:
- AWS_ACCESS_KEY_ID: key
- AWS_SECRET_ACCESS_KEY: secret
- RETAIL_CART_PERSISTENCE_DYNAMODB_CREATE_TABLE: "true"
- RETAIL_CART_PERSISTENCE_DYNAMODB_ENDPOINT: http://carts-dynamodb:8000
- RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: Items
+ RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${EKS_CLUSTER_NAME}-carts-ack
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
また、カートPodにDynamoDBサービスにアクセスするための適切なIAM権限を提供する必要があります。IAMロールはすでに作成されており、IAM Roles for Service Accounts(IRSA)を使用してこれをカートPodsに適用します:
- Kustomize Patch
- ServiceAccount/carts
- Diff
apiVersion: v1
kind: ServiceAccount
metadata:
name: carts
namespace: carts
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
apiVersion: v1
kind: ServiceAccount
metadata:
+ annotations:
+ eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
IRSAの仕組みについて詳しく 知るには、こちらをご覧ください。
この新しい設定を適用しましょう:
新しいConfigMapの内容を取り込むためにcartsのPodsを再起動する必要があります:
deployment.apps/carts restarted
Waiting for deployment "carts" rollout to finish: 1 old replicas are pending termination...
deployment "carts" successfully rolled out
アプリケーションが新しいDynamoDBテーブルで動作していることを確認するために、ブラウザを通じてそれと対話することができます。サンプルアプリケーションをテスト用に公開するためにNLBが作成さ れています:
http://k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com
このコマンドを実行すると、新しいネットワークロードバランサーエンドポイントがプロビジョニングされるため、実際のエンドポイントは異なります。
ロードバランサーのプロビジョニングが完了するまで待つには、次のコマンドを実行できます:
ロードバランサーがプロビジョニングされたら、URLをWebブラウザに貼り付けてアクセスできます。Webストアのユーザーインターフェイスが表示され、ユーザーとしてサイト内を移動することができます。

Cartsモジュールが確かに先ほどプロビジョニングしたDynamoDBテーブルを使用していることを確認するために、カートにいくつかのアイテムを追加してみてください。
これらのアイテムがDynamoDBテーブルにも存在することを確認するには、次のコマンドを実行します:
おめでとうございます!KubernetesのAPIを離れることなく、AWSリソースの作成に成功しました!