[2019Q2] UX Scorecard for adding EKS cluster to GitLab

Job To Be Done

When managing my clusters using AWS, I want to add my Kubernetes cluster to GitLab, so I can deploy and manage my containerized application at scale using advanced features.

Experience Baseline

  • Benchmark Score: C-

    • Workflow needs improvement, but user can still finish completing the task. It usually takes longer to complete the task than it should. User may abandon the process or try again later.
    • Frustration: Medium
    • Task Completion: Successful but with unnecessary steps
    • Steps to Complete Task: Excessive
  • Walkthrough video: https://youtu.be/xAi9u2eqrSk

Walkthrough steps

1. View Kubernetes screen

Step Screenshot Emotional grade
Within my project, I navigate to the Kubernetes area where I can add my existing cluster. gitlab-project__kubernetes Neutral: I am able to find where to add a cluster.
Step Screenshot Emotional grade
I click the Add Kubernetes Cluster button gitlab-project__kubernetes--add-cluster Neutral: Add cluster button is where I would expect.
Step Screenshot Emotional grade
I can't create a cluster on EKS via the GitLab UI. Only GKE. So I need to go create one first. gitlab-project__kubernetes--add-options Negative: I cannot create an EKS cluster via the GitLab interface.

2. Find docs

Step Screenshot Emotional grade
I google "how to create cluster on eks console" and find the related docs. google__aws--eks-cluster Negative: I have to navigate away and use google to find out how I should create an EKS cluster.
Step Screenshot Emotional grade
I see there are two prereqs to creating a cluster. They link me to the "Getting started with AWS Management Console" docs. aws__prereqs-docs Negative: There are prereqs to even beginning my process of creating a cluster.

3. Create Role prereq

Step Screenshot Emotional grade
According to docs, I need to create a Service Role. I navigate to IAM console and click Roles. I choose Create role aws__iam--roles Neutral: Docs easily guide me towards the right place to create a service role.
Step Screenshot Emotional grade
I follow the docs and choose EKS from the list. This is the only EKS option so I assume this is the correct setting. aws__iam--roles-setting Neutral: There only seems to be one option that matches the docs, so that seems straightforward.
Step Screenshot Emotional grade
Docs don't mention permissions so I keep as is. aws__iam--roles-permissions Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I skip the optional tags because I don't know what they are for. aws__iam--roles-tags Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I add a Role name taurie-eks-role, review settings, and click Create role. aws__iam--roles-create Neutral: Nothing unexpected arises.

3. Create VPC prereq

Step Screenshot Emotional grade
I navigate back to the docs and see that I need to create a VPC as another prereq. aws__docs-vpc Neutral: Docs tell me what to do next.
Step Screenshot Emotional grade
I follow the docs and navigate to the CloudFormation console and click Create stack. aws__vpc--create Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I keep the template as Amazon S3 and I add the URL provided from the docs. aws__vpc--url Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I add my stack name taurie-eks-vpc and keep the other details using the defaults. aws__vpc--details Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I don't touch any of the options and choose Next. aws__vpc--options Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I review my VPC and choose to create it. aws__vpc--review Neutral: Nothing unexpected arises.

4. Install kubectl and AWS CLI

Step Screenshot Emotional grade
While my VPC is being created, I navigate back to the docs and see I need to install kubectl. I navigate to those docs. aws__docs--kubectl Neutral: There are two options and I'm not entirely sure which is best to use but I just choose to use the one provided by Amazon.
Step Screenshot Emotional grade
I believe I already have kubectl installed from previously creating a GKE cluster, so I check the version in my terminal using kubectl version. It outputs v1.15.1 cli__kubectl Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
From the docs, I see I need the latest AWS CLI. I follow the link to the docs. aws__docs--aws-cli Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I see I can use pip3 if my Python version is 3 or greater so I check my Python version in the terminal using my version manager, asdf. I run asdf current Python and see that my version is 3.6.2. cli__aws-cli--python Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I follow the docs and run the pip command in my terminal. I then run aws --version to check that I have the latest version. cli__aws-cli--version Neutral: Nothing unexpected arises.

5. Create cluster

Step Screenshot Emotional grade
I navigate back to the docs and see I am ready to create my cluster. I choose to create my cluster using the AWS console. I follow the link in the docs to the EKS console and choose Create cluster. aws__cluster Positive: I am relieved that I don't have any more prereqs and I can finally create my cluster.
Step Screenshot Emotional grade
I fill out my cluster name taurie-eks-cluster, keep the Kubernetes version as the default, and choose the Role name I created previously. aws__eks--create-general Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I choose the VPC I created earlier and keep the subnets selected. I made sure to select the security group associated with my VPC. aws__eks--create-networking Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I keep the rest of the settings as the default and create my cluster. Docs say it will take 10-15 minutes aws__eks--create-adt Negative: I am disappointed that it will take so long to create the cluster.
Step Screenshot Emotional grade
The cluster is created in less than ten minutes. aws__eks--cluster-active Positive: It took less than ten minutes to create and while this is still a long time, I'm glad it took less time than the docs forewarned.

6. Create a kubeconfig file

Step Screenshot Emotional grade
I follow the docs to create a kubeconfig file and test my configuration. cli__kubeconfig--test Neutral: Nothing unexpected arises.

7. Launch worker nodes

Step Screenshot Emotional grade
I follow the docs and learn I need to launch worker nodes by creating another stack. I follow the link in the docs to the CloudFormation console and choose Create stack. aws__stack--create Negative: Nothing unexpected happens, but I'm a little irritated I have to create another stack.
Step Screenshot Emotional grade
I select the Amazon S3 template, as per the docs and paste in the URL the docs provide. aws__stack--url Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
On the details view, I add a name taurie-eks-cluster-worker-nodes and add the name of my cluster. I add the security group that I used for the VPC attached to my cluster. aws__stack--details Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I add a name for my node group taurie-node-group and keep the other node options as the default. aws__stack--node Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I refer to the docs for the NodeImageId and copy the ami that matches the region I created the cluster in. aws__docs--nodeimageid Negative: Its not immediately clear what region my cluster was created in. I didn't select a region during creation. I have to know what region it is and know where to look.
Step Screenshot Emotional grade
I learn I need a KeyName. I follow the link in the docs to create one. aws__docs--keyname Negative: I am not sure why KeyName wasn't included as part of the prereqs.

7a. Adding a key name

Step Screenshot Emotional grade
From here, I am linked to another docs page for how to create a Key Pair. aws__docs--key-pairs Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
From this docs page, I am linked to Amazon EC3 console and told to navigate to Network & Security and Choose Key Pairs. aws__network-security--keypairs Negative: I am being linked from docs page to docs page.
Step Screenshot Emotional grade
I click Create Key Pair from the top of the page. aws__keypair--create Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I enter in my name into the modal and click Create. aws__keypairs--create-modal Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I navigate back to VPC screen, but my key pair doesn't automatically appear in the dropdown. I have to refresh which looses all my progress. aws__stack--no-keyname Negative: I have to refresh the page in order for my KeyName to appear. This means I lose all my progress on this screen.
Step Screenshot Emotional grade
I fill out all the fields again. I keep the Bootstrap Arguments blank. I add my VPC and the Subnets from my VPC. aws__stack--network Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I skip the options page. aws__stack--options Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I review my VPC, acknowledge that IAM resources may be created, and create the stack. aws__stack--review-create Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
Once created, I view the Outputs tab, per the docs. I see I will need the NodeInstanceRole for later, so I leave this page up. aws__stack--output Neutral: Nothing unexpected arises.

7. Enable worker nodes

Step Screenshot Emotional grade
Per the docs, I download the configuration map using the command they give me. cli__config-map Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I create a new file in my terminal using nano. It doesn't tell me what to name the file so I look ahead to the next step to see how the file will be used. There it says it will apply the file to my cluster using aws-auth-cm.yaml so I use this for my file name. - Negative: Its unclear what to name the file or if it matters until I read further along in the docs.
Step Screenshot Emotional grade
I paste the content of the file and add my rolearn. cli__aws-auth Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I save the file and then apply it to my cluster. cli__config-map--created Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
Per the docs, I watch the nodes and wait for them to be ready. cli__nodes--ready Positive: Its nice to see the nodes go from Not Ready to Ready quickly.

8. Adding my cluster to GitLab

Step Screenshot Emotional grade
I think I am now ready to add my cluster to GitLab. I navigate back to GitLab and add my cluster name. gitlab__add-cluster--name Positive: I am happy to be finally at the step where I can add my cluster.
Step Screenshot Emotional grade
I click on the documentation link to figure out how to get my API URL gitlab-project__kubernetes--doc Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I type the command found in the docs to get my API url and add it to GitLab. gitlab__add-cluster--api Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I type the command found in the docs to get my token name. gitlab__add-cluster--token-name Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I use the token name in order to get my certificate. Docs call it token name in one line and secret name in another, so slightly confusing but safe to assume it means the same thing. I add the cert out to GitLab cli__cluster--cert Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I need to create a service account file to apply to my cluster. Using nano, I do this and then apply the file to my cluster. cli__service-account Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I use the command in the docs to get the token output. cli__token Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I copy the token output and add it to GitLab. I choose to not add a project namespace and keep my RBAC cluster managed by GitLab. gitlab__cluster--add-details Neutral: Nothing unexpected arises.
Step Screenshot Emotional grade
I add my cluster to GitLab. There is nothing telling me that its successfully been added but I assume it has been because I see no errors. gitlab__cluster--added Neutral: I finally finished all the steps of adding my EKS cluster to GitLab but its a bit lacking in excitement as I'm unsure if it successfully is connected.
Edited by Valerie Karnes