AWS Controllers for Kubernetes - S3

kubernetes aws s3 operator

3 min read | by Jordi Prats

Amazon has recently released a set of controllers (actually they are operators because they are using CRDs) to create resources on AWS using Kubernetes objects. It works in the same way it crossplane works

Let's install an test the ACK S3

We can install the operator by cloning the repository (there's no reference on where they host the helm chart):

git clone https://github.com/aws-controllers-k8s/s3-controller 

If we are using IRSA we'll need to create a values file to push the annotation to the ServiceAccount:

serviceAccount:  annotations:  eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME 

Then we can install the helm chart using the local copy as follows:

helm install s3controller s3-controller/helm/ -n aws-controllers --create-namespace -f irsa.yaml 

Once the controller is up and running:

$ kubectl get pods -n aws-controllers NAME READY STATUS RESTARTS AGE s3controller-s3-chart-85b88fc55-86z24 1/1 Running 0 11m 

We can now use the Bucket CRD to create a new S3 bucket:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata:  name: k8s-demo-bucket spec:  name: testjordi-demo-bucket 

Once applied neither kubectl get bucket:

$ kubectl apply -f helpers/s3controller/demo_bucket.yaml bucket.s3.services.k8s.aws/k8s-demo-bucket created $ kubectl get bucket NAME AGE k8s-demo-bucket 5s 

Or kubectl describe provide much information about the actual state of the S3 bucket:

$ kubectl describe bucket.s3.services.k8s.aws/k8s-demo-bucket Name: k8s-demo-bucket Namespace: testvault Labels: <none> Annotations: <none> API Version: s3.services.k8s.aws/v1alpha1 Kind: Bucket Metadata:  Creation Timestamp: 2022-09-22:53:37Z  Finalizers:  finalizers.s3.services.k8s.aws/Bucket  Generation: 1  Managed Fields:  API Version: s3.services.k8s.aws/v1alpha1  Fields Type: FieldsV1  fieldsV1:  f:metadata:  f:annotations:  .:  f:kubectl.kubernetes.io/last-applied-configuration:  f:spec:  .:  f:name:  Manager: kubectl-client-side-apply  Operation: Update  Time: 2022-09-16T22:54:09Z  API Version: s3.services.k8s.aws/v1alpha1  Fields Type: FieldsV1  fieldsV1:  f:metadata:  f:finalizers:  .:  v:"finalizers.s3.services.k8s.aws/Bucket":  Manager: controller  Operation: Update  Time: 2022-09-16T22:54:10Z  Resource Version: 94893  UID: f099feb7-7cdb-41c4-b747-0af920c1fc80 Spec:  Name: testjordi-demo-bucket Events: <none> 

But we can use awstools to check that the S3 bucket has been created:

$ awstools s3 list k3s-awswebk3s 2022-09-01 06:09:58+00:00 testjordi-demo-bucket 2022-09-16 22:54:12+00:00 

If we delete the object:

k delete -f helpers/s3controller bucket.s3.services.k8s.aws "k8s-demo-bucket" deleted 

The S3 bucket is going to go away as well:

$ awstools s3 list k3s-awswebk3s 2022-09-01 06:09:58+00:00 

At the end of the day, it provides the same functionality as crossplane but without all the bells and whistles. Mainly because it haven't been out there for that long, let's see if this changes in the future


Posted on 21/09/2022

Categories