diff --git a/cluster/prodvider/kubernetes.go b/cluster/prodvider/kubernetes.go
index 3386625..d7ad535 100644
--- a/cluster/prodvider/kubernetes.go
+++ b/cluster/prodvider/kubernetes.go
@@ -1,6 +1,7 @@
 package main
 
 import (
+	"context"
 	"encoding/pem"
 	"fmt"
 	"time"
@@ -93,23 +94,23 @@
 //    system:admin-namespace to the user within their personal namespace
 //  - have a sso:<username>:global clusterrolebinding that binds
 //    system:viewer to the user at cluster level
-func (p *prodvider) kubernetesSetupUser(username string) error {
+func (p *prodvider) kubernetesSetupUser(ctx context.Context, username string) error {
 	namespace := "personal-" + username
-	if err := p.ensureNamespace(namespace); err != nil {
+	if err := p.ensureNamespace(ctx, namespace); err != nil {
 		return err
 	}
-	if err := p.ensureRoleBindingPersonal(namespace, username); err != nil {
+	if err := p.ensureRoleBindingPersonal(ctx, namespace, username); err != nil {
 		return err
 	}
-	if err := p.ensureClusterRoleBindingGlobal(username); err != nil {
+	if err := p.ensureClusterRoleBindingGlobal(ctx, username); err != nil {
 		return err
 	}
 
 	return nil
 }
 
-func (p *prodvider) ensureNamespace(name string) error {
-	_, err := p.k8s.CoreV1().Namespaces().Get(name, metav1.GetOptions{})
+func (p *prodvider) ensureNamespace(ctx context.Context, name string) error {
+	_, err := p.k8s.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{})
 	switch {
 	case err == nil:
 		// Already exists, nothing to do
@@ -125,11 +126,11 @@
 			Name: name,
 		},
 	}
-	_, err = p.k8s.CoreV1().Namespaces().Create(ns)
+	_, err = p.k8s.CoreV1().Namespaces().Create(ctx, ns, metav1.CreateOptions{})
 	return err
 }
 
-func (p *prodvider) ensureRoleBindingPersonal(namespace, username string) error {
+func (p *prodvider) ensureRoleBindingPersonal(ctx context.Context, namespace, username string) error {
 	name := "sso:" + username + ":personal"
 	rb := &rbacv1.RoleBinding{
 		ObjectMeta: metav1.ObjectMeta{
@@ -151,15 +152,15 @@
 	}
 
 	rbs := p.k8s.RbacV1().RoleBindings(namespace)
-	_, err := rbs.Get(name, metav1.GetOptions{})
+	_, err := rbs.Get(ctx, name, metav1.GetOptions{})
 	switch {
 	case err == nil:
 		// Already exists, update.
-		_, err = rbs.Update(rb)
+		_, err = rbs.Update(ctx, rb, metav1.UpdateOptions{})
 		return err
 	case errors.IsNotFound(err):
 		// Create.
-		_, err = rbs.Create(rb)
+		_, err = rbs.Create(ctx, rb, metav1.CreateOptions{})
 		return err
 	default:
 		// Something went wrong.
@@ -167,7 +168,7 @@
 	}
 }
 
-func (p *prodvider) ensureClusterRoleBindingGlobal(username string) error {
+func (p *prodvider) ensureClusterRoleBindingGlobal(ctx context.Context, username string) error {
 	name := "sso:" + username + ":global"
 	rb := &rbacv1.ClusterRoleBinding{
 		ObjectMeta: metav1.ObjectMeta{
@@ -188,15 +189,15 @@
 	}
 
 	crbs := p.k8s.RbacV1().ClusterRoleBindings()
-	_, err := crbs.Get(name, metav1.GetOptions{})
+	_, err := crbs.Get(ctx, name, metav1.GetOptions{})
 	switch {
 	case err == nil:
 		// Already exists, update.
-		_, err = crbs.Update(rb)
+		_, err = crbs.Update(ctx, rb, metav1.UpdateOptions{})
 		return err
 	case errors.IsNotFound(err):
 		// Create.
-		_, err = crbs.Create(rb)
+		_, err = crbs.Create(ctx, rb, metav1.CreateOptions{})
 		return err
 	default:
 		// Something went wrong.
