- AWS supports up to 3 versions of Kubernetes at once.
- AWS aims to be in-line with the Kubernetes community.
- AWS integrates Kubernetes with AWS IAM RBAC.
- AWS automatically handles the built-in Kubernetes CA system
- There is an EKS optimized Ubuntu Image.
- AWS provisions an ENI in the VPC that is specific to the EKS cluster.
- EKS does not use an overlay network like flannel, it uses the VPC networking directly.
- AWS VPC CNI Plugin assigns a unique IP to every pod that gets run.
- Runs one cluster per region
- Uses Envoy Proxy
- Worker nodes: EC2 Pricing
- EKS Control Plane: $0.20/hr
- Presuming that we compose a control pane of three (x3) t3.large instances, it will cost us $0.2496/hr.
- Presuming that we compose a control pane of give (x5) t3.medium instances, it will cost us $0.208/hr.
- Based on the cost of hosting the Kubernetes control plane ourselves, there will be a savings realized from using the EKS service control plan rather than rolling our own instances. To stay nothing about the cost of the manpower saved.
- PCI-DSS (coming soon)
Support for all three load balancers:
- NLB (Network Load Balancer)
- CLB (Cluster Load Balancer)
Install tools for working with EKS
|AWS CLI (aws)||AWS Command Line Interface|
|EKS CTL (eksctl)|| Elastic Kubernetes Service Controller|
Uses AWS CloudFormation to provision an EKS cluster
|Kube CTL (kubectl)|| Kubernetes Controller|
Controls the Kubernetes cluster once provisioned.
Use for provisioning pods and services, et. al.,
EKS CTL (EKS Cuttle)
- A simple command line utility for creating and managing Kubernetes clusters on Amazon EKS.
KubeCTL (Cube Cuttle)
- Kubectl can be downloaded from the Kubernetes project, there aren’t any differences between it and the version on the AWS website.
- Amazon distributes the kubectl version that matches the EKS version.
- A plugin for kubectl.
- Used for authenticating kubectl connections to EKS.
Create a Cluster using eksctl
- eksctl creates a CloudFormation stack to create the new cluster.
Troubleshooting: CREATE_FAILED - the targeted availability zone does not currently have sufficient capacity to support the cluster
[✖] AWS::EKS::Cluster/ControlPlane: CREATE_FAILED – "Cannot create cluster 'test1' because us-east-1e, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f (Service: AmazonEKS; Status Code: 400; Error Code: UnsupportedAvailabilityZoneException; Request ID: 5fe332bb-a335-11e9-993a-278300533054)"
Explicitly specify the target availability zones using the
Create a kubeconfig for Amazon EKS
- Amazon EKS uses the
aws eks get-tokencommand with kubectl for cluster authentication.
- This will create:
ALB Ingress Controller
To use an Internal Load Balancer or an NLB, use an Annotation:
apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: replicas: 3 selector: matchLabels: app: echo-pod template: metadata: labels: app: echo-pod spec: containers: - name: echoheaders image: k8s.gcr.io/echoserver:1.10 imagePullPolicy: IfNotPresent ports: - containerPort: 8080