CartsStack インスタンスの適用
Pod Identity アソシエーションの事前バインド
Pod Identity は EKS API であり、Kubernetes のものではないため、RGD 内に存在できません。最初にアソシエーションを作成します(EKS はまだ存在しない ServiceAccount のバインドを許可します)。これにより、carts Pod は既に認証情報が配線された状態で起動します。ロールは ACK ラボの同じワイルドカードスコープの -carts-dynamo ロールなので、kro テーブルは既にカバーされています:
"a-..."
CartsStack インスタンスの適用
インスタンスマニフェストは小さいです:
apiVersion: kro.run/v1alpha1
kind: CartsStack
metadata:
name: carts-kro
namespace: default
spec:
tableName: ${EKS_CLUSTER_AUTO_NAME}-carts-kro
namespace: carts-kro
適用します:
cartsstack.kro.run/carts-kro created
ACK ラボと比較してください:同じ最終状態を得るために、3つの別々の kubectl apply ステップと aws eks create-pod-identity-association 呼び出し、そして kubectl rollout restart が必要でした。ここでは、1つの CartsStack リソースがグラフ全体を駆動し、プラットフォームチームは carts 形状のスタックを必要とする全員のために RGD を一度だけ記述します。
kro は依存関係の順序で6つの子リソースを調整します:最初に Namespace を作成し、次に Table(ACK DynamoDB コントローラーが AWS でのプロビジョニングを開始します)を作成し、Namespace が存在したら ConfigMap と ServiceAccount を作成し、最後に SA と ConfigMap が参照されたら Deployment と Service を作成します。carts Pod は、前のステップで作成した Pod Identity アソシエーションによって既に注入された IAM 認証情報で起動します。
インスタンスが ACTIVE に達するまで待ちます:
cartsstack.kro.run/carts-kro condition met
これには数分かかる場合があります。インスタンスは、すべての子が正常になって初めて ACTIVE を報告します。最も遅い子は、AWS で作成されている実際の DynamoDB テーブルです。
kro が作成したものを検査する
インスタンスが ACTIVE に達したため、kro は既にすべての子を作成し、ヘルスチェックを完了しています。新しい Namespace でそれらをリストして、1回の適用からのグラフ全体を確認します:
NAME SYNCED AGE
table.dynamodb.services.k8s.aws/items True ...
NAME DATA AGE
configmap/carts 2 ...
configmap/kube-root-ca.crt 1 ...
NAME SECRETS AGE
serviceaccount/carts 0 ...
serviceaccount/default 0 ...
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/carts 1/1 1 1 ...
NAME TYPE CLUSTER-IP PORT(S) AGE
service/carts ClusterIP ... 80/TCP ...
Table は SYNCED=True を表示しており、ACK コントローラーが実際の AWS テーブルの作成を完了したことを意味します。AWS 側に存在することを確認します:
ACTIVE
1つの CartsStack 適用により、実際の AWS DynamoDB テーブルに加えて、Kubernetes リソ ースの完全な Namespace が生成され、kro が順序とヘルスチェックを処理してくれました。
Pod が DynamoDB に到達できることを検証する
carts Pod には、ServiceAccount、新しいテーブルを指す ConfigMap、Pod Identity による IAM 認証情報、DynamoDB へのネットワークパスがあります。Deployment が完全にロールアウトされるまで待ち(Amazon EKS Auto Mode がまだ Pod のノードをスケーリングしている可能性があります)、Pod Identity が Pod 起動時にロールの認証情報を注入したことを確認します:
deployment "carts" successfully rolled out
AWS_CONTAINER_CREDENTIALS_FULL_URI=http://...
AWS_CONTAINER_CREDENTIALS_FULL_URI 環境変数が存在することは、Pod がスケジュールされたときに Pod Identity がロールの認証情報を注入したことを確認します。Pod は次の経路で AWS DynamoDB テーブルに接続されます:
- ServiceAccount →
aws eks create-pod-identity-association - → IAM role
${EKS_CLUSTER_AUTO_NAME}-carts-dynamo - → AWS DynamoDB table
${EKS_CLUSTER_AUTO_NAME}-carts-kro
これで kro ラボは完了です。ACK とネイティブの Kubernetes リソースを単一のリソースに構成する高レベルの Kubernetes API(CartsStack)を定義し、単一のインスタンスが完全で実行中の IAM バインドされた carts サービスを生成しました。