EKSのデフォルトのストレージクラスをgp2からgp3に変更する

2022年4月30日

EKS のデフォルトのストレージクラスを gp2 から gp3 に変更する機会があったので備忘録。eksctl を使って EKS クラスタを構築していることを前提としています。

  • Kubernetes v2.21
  • eksctl v0.90.0

参考にしたドキュメントはこのあたり。

目次

  1. クラスターの IAM OIDC プロバイダーを作成する
  2. サービスアカウントの IAM ロールとポリシーを作成する
  3. Amazon EBS CSI アドオンを追加する
  4. EKS のストレージクラス gp2 からデフォルトのアノテーションを削除する
  5. gp3 ストレージクラスを作成し、デフォルトにする

クラスターの IAM OIDC プロバイダーを作成する

Create an IAM OIDC provider for your cluster - Amazon EKS を参考に、クラスターの IAM OIDC プロバイダーを作成します。

以下のコマンドを実行し、クラスターの OIDC プロバイダーの URL を表示します。クラスター名やリージョンはご自身のものに置き換えてください。

aws eks describe-cluster --name my-eks --query "cluster.identity.oidc.issuer" --region us-west-2 --output text

出力例です。

https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

出力された EXAMPLED539D4633E53DE1B716D3041Eをコピーし、次のコマンドの grep の引数に使用します。

aws iam list-open-id-connect-providers --region us-west-2 | grep EXAMPLED539D4633E53DE1B716D3041E

上記のコマンドから出力が返された場合は、既にクラスター用のプロバイダーが存在するので、プロバイダーを作成する必要はありません。次のステップに進みます。出力が返されない場合は、次のコマンドで IAM OIDC プロバイダーを作成します。

eksctl utils associate-iam-oidc-provider --cluster my-eks --region us-west-2 --approve

サービスアカウントの IAM ロールとポリシーを作成する

Creating an IAM role and policy for your service account - Amazon EKS を参考にサービスアカウントの IAM ロールとポリシーを作成します。

eksctl create iamserviceaccount \
    --name ebs-csi-controller-sa \
    --namespace kube-system \
    --cluster my-eks \
    --attach-policy-arn arn:aws:iam::111122223333:policy/my-eks-ebs-csi-driver \
    --region us-west-2 \
    --approve \
    --role-only

Amazon EBS CSI アドオンを追加する

Managing the Amazon EBS CSI driver as an Amazon EKS add-on - Amazon EKS を参考に CSI アドオンを追加します。--service-account-role-arnにはひとつ前のコマンドで作成された IAM Role の ARN を指定します。

eksctl create addon \
    --name aws-ebs-csi-driver \
    --cluster my-eks \
    --service-account-role-arn arn:aws:iam::111122223333:role/eksctl-my-eks-addon-iamserviceacco-Role1-12ABCEDFGHIJ \
    --region us-west-2 \
    --force

EKS のストレージクラス gp2 からデフォルトのアノテーションを削除する

以下のコマンドでストレージクラス gp2 からデフォルトのアノテーションを削除します。

kubectl annotate sc gp2 storageclass.kubernetes.io/is-default-class-

変更後、デフォルトではなくなったことを確認しておきます。

kubectl get sc gp2

gp3 ストレージクラスを作成し、デフォルトにする

ストレージクラスのマニフェストファイルを作ります。

cat << EOT > gp3-def-sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gp3
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
allowVolumeExpansion: true
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
EOF

ストレージクラスを作成します。

kubectl apply -f gp3-def-sc.yaml

作成されたストレージクラスを確認します。

kubectl get sc gp3

gp3 がデフォルトになったことが確認できます。

NAME            PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
gp3 (default)   ebs.csi.aws.com   Delete          WaitForFirstConsumer   true      

-技術ブログ
-