SlideShare a Scribd company logo
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
EKS - Kubernetes on AWS
Christoph Kassen
Solutions Architect - chrkas@amazon.de
Jonas Wagner
Solutions Architect
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
What can you expect?
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
WHY DO WE LOVE CONTAINERS?
Packaging Distribution Immutable
infrastructure
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Open source container
management platform
Helps you run
containers at scale
Gives you primitives
for building
modern applications
What is Kubernetes?
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
W h y d e v e l o p e r s l o v e K u b e r n e t e s
Vibrant and growing community
of users and contributors
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Why developers love Kubernetes
A single extensible API
S C A L E P E R F O R M A N C E B R E A D T H
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cloud-native applications
M I C R O S E R V I C E
T O O L I N G
N A T I V E
A P P L I C A T I O N S
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
“Run Kubernetes for me.”
“Native AWS integrations”
“An open source Kubernetes
experience.”
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
ELASTIC CONTAINER SERVICE FOR KUBERNETES
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon Container Services
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
EKS is Kubernetes Certified
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
API
server
Cloud
controller
Controller
manager
Scheduler Add-onsKubeDNS
EKS control plane
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Open Source Kubernetes Community
Kubernetes
https://github.com/kubernetes/kuber
netes
CNI plugin
https://github.com/aws/amazon-vpc-
cni-k8s
Heptio AWS Authenticator
https://github.com/heptio/authentic
ator
Virtual Kubelet
https://github.com/virtual-
kubelet/virtual-kubelet/
SIG AWS
https://github.com/kubernetes/com
munity/tree/master/sig-aws
Cloud Provider Working Group
https://github.com/kubernetes/com
munity/tree/master/wg-cloud-
provider
External-DNS
https://github.com/kubernetes-
incubator/external-dns
CoreOS ALB Ingress
https://github.com/coreos/alb-
ingress-controller
CODE
REVIEWS
FIXING
BUGS
IMPLEMENTING
NEW FEATURES
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
mycluster.eks.amazonaws.com
Availability
Zone 1
Availability
Zone 2
Availability
Zone 3
Kubectl
Workers
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
EC2 Worker
Nodes
EKS Control
Plane
Customer VPC EKS VPC
Network Load
Balancer
ENI
API Access
Kubectl
Exec/Logs
TLS
Static IPs
ENI Attachment
Autoscaling Group
EKS Architecture
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Metrics
Nodes
Node exporter
Pod/Container
Kube-state-metrics
cAdvisor
Application
/metrics
JMX
Cluster-wide Aggregator
Prometheus, Heapster
Visualizer
Grafana, Kibana, Dashboard
Data Model
InfluxDB, Graphite
Alerting
AlertManager, Kapacitor
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
IAM authentication
with Kubernetes
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
~/.kube/config (with IAM)
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://1234.sk1.us-west-2.eks.amazonaws.com
name: eks
contexts:
- context:
cluster: eks
user: eks
name: eks
current-context: eks
kind: Config
users:
- name: eks
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
command: heptio-authenticator-aws
args:
- token
- -i
- eks
Config file is no longer
user-specific J
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Access and Authentication
IAM ROLE
User X
IAM ROLE
Service Account Y
kubectl → K8s APIs → CRUD Operations on K8s
aws-cli → EKS Service APIs → CRUD Operations on Infra
K8s Master Nodes
K8s Master Nodes
K8s Master Nodes
API Server
Controller Mgr
kubelet
etcd
Cloud Controller Mgr.
Scheduler
Authentication
Webhook Tokens
Authorization
RBAC Mode
Admission Control
NamespaceLifecyle,LimitRanger
ServiceAccount,DefaultStorageClass,
ResourceQuota
AWS STS
client side
Heptio-aws-authenticator
server side
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Worker provisioning
k u b e c t l
A W S A u t h
c o n f i g m a p & R B A C
W o r k e r s
R o l e
R o l e
config map
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Native VPC networking
with CNI plugin
Pods have the same VPC
address inside the pod
as on the VPC
Simple, secure networking
Open source and
on Github
…{ }
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Networking with CNI plugin
172.16.0.0/16
User X
Service
Account Y
Kubectl
K8s Node 2K8s Node 1
kubelet
kube-proxy
kubelet
kube-proxy
VPC Subnet per AZ
172.16.0.1/24
ENI ENIPrimary Private IP:
172.16.1.118
Secondary IPs:
172.16.1.147,
172.16.1.224….
Service: Front end
POD 2 POD 3
eth0
Service: Back end
POD 1 POD 4
eth0
ec2.associateaddress()
L3 RouteTable
veth0 Bveth0 A
eth0
172.16.1.147/32
eth0
172.16.1.224/32
CNI
K8s Master NodesK8s Master NodesK8s Master Nodes
API Server
Controller Manager
kubelet
etcd
Scheduler
kube-proxy
Cloud Controller Mgr.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
DNS, Services and ELB
172.16.0.0/16
User X
Service
Account Y
K8s Node 2K8s Node 1
kubelet
kube-proxy
kubelet
kube-proxy
VPC Subnet per AZ - 172.16.0.1/24
ENI ENI
Service: Front end
POD 2 POD 3
Service: Back end
POD 1 POD 4
CNI
K8s Master NodesK8s Master Nodes
K8s Master Nodes
API Server
Controller Manager
kubelet
etcd
Scheduler
kube-proxy
Cloud Controller Mgr.
DNS
kubedns
dnsmasq
healthz
DNS Service – Static IP
POD 2 POD 2
kind: Service
type: LoadBalancer
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes Network
Policies enforce network
security rules
Calico is the leading
implementation of the
network policy API
Open source, active
development (>100
contributors)
Commercial support
available from Tigera
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
S T A G E
S E P A R A T I O N
“ T E N A N T ”
S E P A R A T I O N
F I N E - G R A I N E D
F I R E W A L L S
C O M P L I A N C E
Namespaces – without
network policy, they are
not network isolated
Reduce attack surface
within microservice-based
applications
Isolate dev, test, and prod E.g., PCI, HIPAA
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Network Policy
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: web-allow-prod
spec:
podSelector:
matchLabels:
app: web
ingress:
- from:
- namespaceSelector:
matchLabels:
purpose: production
Select affected Pods
Define traffic that is
allowed
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Lab 1
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on! – Lab 1
AWS Workshop for Kubernetes
1. Create an EKS cluster
1. Follow the instructions at https://eksworkshop.com (beginner)
2. Use eksctl https://eksctl.io (advanced)
3. Follow the EKS docs
https://docs.aws.amazon.com/eks/latest/userguide/getting-
started.html (the “hard“ way)
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Additional resources
https://github.com/ramitsurana/awesome-kubernetes
https://discuss.kubernetes.io/
TGIK Playlist:
https://www.youtube.com/playlist?list=PLvmPtYZtoXOEN
HJiAQc6HmV2jmuexKfrJ
https://aws.amazon.com/blogs/compute/tag/containers/
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes Concepts
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes concepts
port 8080 port 8080
ReplicaSet
#Pods—2
label selector: v1
ReplicaSet
#Pods—1
label selector: v2
Node
Docker
Pod
Containers
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes concepts
URI: /svc1/* URI: /svc2/*
DaemonSet
Daemon pod
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Application Deployment
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Pod definition example
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template: # create pods using pod definition in this template
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Deployments
❯ kubectl create -f nginx.yaml --record
❯ kubectl rollout history deployment/nginx
❯ kubectl expose deployment/nginx --port=80 --target-port=80 --
name=nginx --type=LoadBalancer
❯ kubectl describe svc nginx
❯ curl http://xyz.us-west-2.elb.amazonaws.com
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Deployments - Helm
• Package management for k8s
• Chart - collection of files
• Description of k8s resources
• Flexible templating
• Tiller
• Installed on k8s cluster
• Client
• Cli tool to install/update Charts
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Using helm
❯ helm search nginx
NAME CHART VERSION APP VERSION DESCRIPTION
stable/nginx-ingress 0.19.2 0.14.0 An nginx Ingress controller that uses ConfigMap...
stable/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
stable/gcloud-endpoints 0.1.0 Develop, deploy, protect and monitor your APIs ...
❯ helm install stable/nginx-ingress --name nginx-ingress --set
rbac.create=true
[displays README + information about deployment]
❯ helm list
NAME REVISION UPDATED STATUS CHART
NAMESPACE
Nginx-ingress 1 Mon May 21 18:30:17 2018 DEPLOYED nginx-ingress-0.19.2 default
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hosting Helm repositories
• Anywhere that serves HTTP can host a helm repo
• Host private Helm Repo with Chartmuseum
https://github.com/kubernetes-helm/chartmuseum
• There’s also a handy plugin for S3!
• This means IAM Role = auth for your repo J
• https://github.com/hypnoglow/helm-s3
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Deploying Helm on EKS
Helm 2.9+ works with EKS out of the box
Helm needs RBAC permissions
❯ kubectl -n kube-system create serviceaccount tiller
❯ kubectl create clusterrolebinding tiller --clusterrole
cluster-admin --serviceaccount=kube-system:tiller
❯ helm init --service-account=tiller
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Understanding deployments
# Columnar output
❯ kubectl get services # List all services in the namespace
❯ kubectl get pods --all-namespaces # List all pods in all namespaces
❯ kubectl get pods -o wide # List all pods in the namespace, with details
❯ kubectl get rc <rc-name> # Get a replication controller
# Verbose output
❯ kubectl describe nodes <node-name>
❯ kubectl describe pods <pod-name>
❯ kubectl describe pods/<pod-name> # Equivalent to previous
❯ kubectl describe pods <rc-name> # Lists pods created by<rc-name>using common prefix
# List Services Sorted by Name
❯ kubectl get services --sort-by=.metadata.name
# Get ExternalIPs of all nodes
❯ kubectl get nodes -o
jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Interacting with Pods
❯ kubectl logs <pod-name> # dump pod logs (stdout)
❯ kubectl logs –f <pod-name> # stream pod logs (stdout)
❯ kubectl run –i --tty busybox—image=busybox -- sh # Run pod as interactive shell
❯ kubectl attach <podname> -i # Attach to Running Container
❯ kubectl port-forward <podname> <local>:<remote> # Forward port of Pod to localhost
❯ kubectl port-forward <servicename><port> # Forward port to service
❯ kubectl exec <pod-name> -- ls / # Run command in existing pod (1 container case)
❯ kubectl exec <pod-name> -c <container-name> -- ls /
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Deployment Strategies
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Rolling Update
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Numeric or percentage based value
maxUnavailable: 0
[...]
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Blue / Green Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-app-blue
labels:
app: my-app
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
version: blue
[...]
Blue
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-app-green
labels:
app: my-app
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
version: green
[...]
Green
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Blue / Green Deployment
Blue
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
selector:
app: my-app
version: blue
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
selector:
app: my-app
version: green
Green
kubectl patch service my-app -p '{"spec":{"selector":{"version":"green"}}}'
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Canary Deployment
Production
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-app-prod
labels:
app: my-app
spec:
replicas: 9
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: images/container:v1
[...]
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-app-canary
labels:
app: my-app
spec:
replicas: 1
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: images/container:v2
[...]
More examples at https://container-solutions.com/kubernetes-deployment-strategies/
Canary
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Load Balancing
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Nginx PodsEC2 instances
kube-proxy
:32002
nginx-service
:32001
Internet
10001:8080
10002:8080
10003:8080
Request to NGINX Pod
{NLB}:443
NLB
NLB Forwards to the node
{node:32001}
Service Type – LoadBalancer (NLB)
k8s service ClusterIP
receives request
kube-proxy
load balances
to pods
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Network Load Balancer
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
labels:
app: nginx
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
More options:
• Draining
• Logging
• SSL Certs
• Tagging
• Security groups
• Health checks
https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws
/aws.go
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Nginx Pods
EC2 instances
kube-proxy
:32001
nginx-service
:32003
Internet
Request to NGINX Pod
{ALB}:443
ALB
ALB Routes based on
the path.
/api
/home
10002:8080
Webapp Pods
10002:8080
Installation: https://github.com/pahud/eks-alb-ingress
Ingress Type – CoreOS ALB Ingress
kube-proxy
:32002
webapp-service
:32004
Load Balances
to pods
Proxies request
to the k8s service
ClusterIP
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
DNS
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Automatic Route53 DNS creation for services
apiVersion: v1
kind: Service
metadata:
name: nginx
annotations:
# Uses https://github.com/kubernetes-incubator/external-dns
external-dns.alpha.kubernetes.io/hostname: nginx.highlyavailable.systems.
spec:
type: LoadBalancer
ports:
- port: 80
name: http
targetPort: 80
selector:
app: nginx
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Automatic Route53 DNS creation for Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: nginx.highlyavailable.systems
http:
paths:
- backend:
serviceName: nginx
servicePort: 80
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Lab 2
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Lab 2
1. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/01-path-basics/103-kubernetes-
concepts
2. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/03-path-application-
development/303-app-update
3. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/04-path-security-and-
networking/405-ingress-controllers#alb-ingress-controller
4. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/03-path-application-
development/307-app-management-with-helm
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Scheduling
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Controlling scheduling
Resource requirements
Resource filters
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Limit resource usage
Container A Container B
limit
request
900m
600m
limit
request
800m
400m
⎲
⎳ Pod CPU and memory resources
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Resource Quotas
apiVersion: v1
kind: Pod
metadata:
name: production
spec:
containers:
- name: nginx-pod
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m" # 0.8 vCPU
requests:
memory: "600Mi"
cpu: "400m“ # 0.4 vCPU
Applied per Namespace
apiVersion: v1
kind: ResourceQuota
metadata:
name: production
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
ResourceQuota defined
both, so Pod must
define both
Pod Resource Request
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Controlling scheduling
Resource requirements
Constraints
• Taints Node-level
• Tolerations Pod-level
Topology filters
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Taints and Tolerations
# Taint node
$ kubectl taint nodes ip-10-0-32-12.us-west-2.compute.internal 
skynet=false:NoSchedule
# Tolerations
kind: Pod
spec:
tolerations:
- key: skynet
operator: Equal
value: “false”
effect: NoSchedule
[...]
Match taint to
schedule onto
tainted node
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Controlling scheduling
Resource requirements
Constraints
• Taints Node-level
• Tolerations Pod-level
Affinity/Anti-Affinity Topology filters
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Affinity / Anti-Affinity
● Control scheduling onto nodes
○ Combine with Taints & Tolerations
● Distribute Pods across cluster
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "beta.kubernetes.io/instance-type"
operator: In
values: [“r4.large",“r4.xlarge"]
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
App Auto-Scaling
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
App Auto-Scaling
# Install heapster
❯ kubectl create -f templates/heapster/heapster.yaml
❯ kubectl run webapp --image=trevorrobertsjr/webapp --requests=cpu=50m --
expose --port=8080
❯ kubectl autoscale deployment webapp --cpu-percent=5 --min=1 --max=10
❯ kubectl run -i --tty load-generator --image=busybox -- /bin/sh –c “while
true; do wget -q -O- http://webapp.default.svc.cluster.local:8080; done“
❯ kubectl get hpa –o wide
❯ kubectl delete hpa webapp
❯ kubectl delete deployment/load-generator deployment/webapp
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Monitoring and Operations
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes Dashboard
• General purpose web-based UI for Kubernetes clusters
• Manage applications running in the cluster
• Manage the cluster
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes Dashboard
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Kubernetes Dashboard
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Prometheus, Node exporter, and Grafana
• Prometheus:
• Open-source systems monitoring and alerting
toolkit
• Collects metrics from monitored targets by
scraping metrics from HTTP endpoints
• Dynamically scrape new targets by adding
a ServiceMonitor
• Grafana:
• Open source, feature rich metrics dashboard
and graph editor
• Node exporter:
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Prometheus, Node exporter, and Grafana
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Prometheus installation
cd cluster-monitoring
kubectl apply -f templates/prometheus/prometheus-bundle.yaml
kubectl rollout status deployment/prometheus-operator -n monitoring
kubectl apply -f templates/prometheus/prometheus.yaml
kubectl get po -l prometheus=prometheus -n monitoring
kubectl port-forward $(kubectl get po -l prometheus=prometheus -n
monitoring -o jsonpath="{.items[0].metadata.name}") 9090 -n monitoring
open http://localhost:9090
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Grafana installation
kubectl apply -f templates/prometheus/grafana-bundle.yaml
kubectl rollout status deployment/grafana -n monitoring
kubectl port-forward $(kubectl get pod -l app=grafana -o
jsonpath="{.items[0].metadata.name}" -n monitoring) 3000 -n monitoring
open http://localhost:3000/?orgId=1
kubectl delete -f templates/prometheus/prometheus-bundle.yaml
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Lab 3
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on! - Lab 3
1. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/02-path-working-with-
clusters/205-cluster-autoscaling
2. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/02-path-working-with-
clusters/201-cluster-monitoring
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CI/CD pipelines
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Jenkins – CI/CD with Kubernetes
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS CodePipeline – CI/CD with Kubernetes
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS CodePipeline – CI/CD with Kubernetes
• Continuous Deployment to Kubernetes using AWS CodePipeline,
AWS CodeCommit, AWS CodeBuild, Amazon ECR and AWS
Lambda
• CodeSuite - Continuous Deployment Reference Architecture for
Kubernetes
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Deployment Tools
• Spinnaker
• Skaffold
• Jenkins X
• Argo
• ...
• kubectl
Overview: https://engineering.opsgenie.com/cloud-native-
continuous-integration-and-delivery-tools-for-kubernetes-
e6ea34d308c
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Distributed Tracing
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS X-Ray for Kubernetes
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS X-Ray tracing
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS X-Ray segment info
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
X-Ray for Kubernetes
AWS X-Ray X-Ray DaemonSet
X-Ray
trace k8s nodes running pods
Service
A
Service
B
Client
HTTP
Requests
AWS Console
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on! - Lab 4
1. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/03-path-application-
development/308-cicd-workflows/308-1-codesuite
2. https://github.com/aws-samples/aws-workshop-for-
kubernetes/tree/master/03-path-application-
development/305-app-tracing-with-jaeger-and-x-
ray/x-ray
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Make sure to
stop&delete
resources!
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Thank you!
Please leave 1-Minute feedback!

More Related Content

PDF
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
PPTX
Terraform
PPTX
Kubernetes PPT.pptx
PPTX
Kubernetes for Beginners: An Introductory Guide
PDF
What Is Helm
PPTX
Introduction to Docker - 2017
PDF
Building infrastructure as code using Terraform - DevOps Krakow
PPTX
Terraform Basics
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Terraform
Kubernetes PPT.pptx
Kubernetes for Beginners: An Introductory Guide
What Is Helm
Introduction to Docker - 2017
Building infrastructure as code using Terraform - DevOps Krakow
Terraform Basics

What's hot (20)

PDF
What Is Kubernetes | Kubernetes Introduction | Kubernetes Tutorial For Beginn...
PPTX
PDF
ArgoCD Meetup PPT final.pdf
PPTX
Lets talk about: Azure Kubernetes Service (AKS)
PDF
Gitlab, GitOps & ArgoCD
PPTX
Terraform modules restructured
PDF
AWS Control Tower
PDF
AWS Tutorial | AWS Certified Solutions Architect | Amazon AWS | AWS Training ...
PDF
AWS Connectivity, VPC Design and Security Pro Tips
PPTX
Final terraform
PPTX
Docker Networking Overview
PDF
Terraform -- Infrastructure as Code
PDF
Introduction of Kubernetes - Trang Nguyen
PDF
Hands-On Introduction to Kubernetes at LISA17
PDF
Best Practices of Infrastructure as Code with Terraform
PDF
Introduction to Kubernetes Workshop
PDF
Helm - Application deployment management for Kubernetes
PPTX
OpsNow를 활용한 AWS Cloud 비용 최적화 전략
PPTX
Azure DevOps CI/CD For Beginners
PDF
실전! AWS 하이브리드 네트워킹 (AWS Direct Connect 및 VPN 데모 세션) - 강동환, AWS 솔루션즈 아키텍트:: A...
What Is Kubernetes | Kubernetes Introduction | Kubernetes Tutorial For Beginn...
ArgoCD Meetup PPT final.pdf
Lets talk about: Azure Kubernetes Service (AKS)
Gitlab, GitOps & ArgoCD
Terraform modules restructured
AWS Control Tower
AWS Tutorial | AWS Certified Solutions Architect | Amazon AWS | AWS Training ...
AWS Connectivity, VPC Design and Security Pro Tips
Final terraform
Docker Networking Overview
Terraform -- Infrastructure as Code
Introduction of Kubernetes - Trang Nguyen
Hands-On Introduction to Kubernetes at LISA17
Best Practices of Infrastructure as Code with Terraform
Introduction to Kubernetes Workshop
Helm - Application deployment management for Kubernetes
OpsNow를 활용한 AWS Cloud 비용 최적화 전략
Azure DevOps CI/CD For Beginners
실전! AWS 하이브리드 네트워킹 (AWS Direct Connect 및 VPN 데모 세션) - 강동환, AWS 솔루션즈 아키텍트:: A...
Ad

Similar to EKS Workshop (8)

PPTX
Amazon Elastic Container Service for Kubernetes (Amazon EKS) I AWS Dev Day 2018
PDF
Aws container services overview
PDF
More Containers Less Operations
PDF
kubernetes on awsjourneryssdddddddddddddd
PDF
Builders' Day- Mastering Kubernetes on AWS
PPTX
Containers State of the Union I AWS Dev Day 2018
PDF
Mastering Kubernetes on AWS - Tel Aviv Summit
PPTX
The Serverless Tidal Wave - SwampUP 2018 Keynote
Amazon Elastic Container Service for Kubernetes (Amazon EKS) I AWS Dev Day 2018
Aws container services overview
More Containers Less Operations
kubernetes on awsjourneryssdddddddddddddd
Builders' Day- Mastering Kubernetes on AWS
Containers State of the Union I AWS Dev Day 2018
Mastering Kubernetes on AWS - Tel Aviv Summit
The Serverless Tidal Wave - SwampUP 2018 Keynote
Ad

More from AWS Germany (20)

PDF
Analytics Web Day | From Theory to Practice: Big Data Stories from the Field
PDF
Analytics Web Day | Query your Data in S3 with SQL and optimize for Cost and ...
PDF
Modern Applications Web Day | Impress Your Friends with Your First Serverless...
PDF
Modern Applications Web Day | Manage Your Infrastructure and Configuration on...
PDF
Modern Applications Web Day | Container Workloads on AWS
PDF
Modern Applications Web Day | Continuous Delivery to Amazon EKS with Spinnaker
PDF
Building Smart Home skills for Alexa
PDF
Hotel or Taxi? "Sorting hat" for travel expenses with AWS ML infrastructure
PDF
Wild Rydes with Big Data/Kinesis focus: AWS Serverless Workshop
PDF
Log Analytics with AWS
PDF
Deep Dive into Concepts and Tools for Analyzing Streaming Data on AWS
PDF
AWS Programme für Nonprofits
PDF
Microservices and Data Design
PDF
Serverless vs. Developers – the real crash
PDF
Query your data in S3 with SQL and optimize for cost and performance
PDF
Secret Management with Hashicorp’s Vault
PDF
Scale to Infinity with ECS
PDF
Containers on AWS - State of the Union
PDF
Deploying and Scaling Your First Cloud Application with Amazon Lightsail
PDF
Building Personalized Data Products - From Idea to Product
Analytics Web Day | From Theory to Practice: Big Data Stories from the Field
Analytics Web Day | Query your Data in S3 with SQL and optimize for Cost and ...
Modern Applications Web Day | Impress Your Friends with Your First Serverless...
Modern Applications Web Day | Manage Your Infrastructure and Configuration on...
Modern Applications Web Day | Container Workloads on AWS
Modern Applications Web Day | Continuous Delivery to Amazon EKS with Spinnaker
Building Smart Home skills for Alexa
Hotel or Taxi? "Sorting hat" for travel expenses with AWS ML infrastructure
Wild Rydes with Big Data/Kinesis focus: AWS Serverless Workshop
Log Analytics with AWS
Deep Dive into Concepts and Tools for Analyzing Streaming Data on AWS
AWS Programme für Nonprofits
Microservices and Data Design
Serverless vs. Developers – the real crash
Query your data in S3 with SQL and optimize for cost and performance
Secret Management with Hashicorp’s Vault
Scale to Infinity with ECS
Containers on AWS - State of the Union
Deploying and Scaling Your First Cloud Application with Amazon Lightsail
Building Personalized Data Products - From Idea to Product

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Cloud computing and distributed systems.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Encapsulation theory and applications.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Modernizing your data center with Dell and AMD
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
20250228 LYD VKU AI Blended-Learning.pptx
Big Data Technologies - Introduction.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
The AUB Centre for AI in Media Proposal.docx
NewMind AI Monthly Chronicles - July 2025
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Cloud computing and distributed systems.
NewMind AI Weekly Chronicles - August'25 Week I
Building Integrated photovoltaic BIPV_UPV.pdf
Encapsulation theory and applications.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Unlocking AI with Model Context Protocol (MCP)
Modernizing your data center with Dell and AMD
“AI and Expert System Decision Support & Business Intelligence Systems”
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Advanced methodologies resolving dimensionality complications for autism neur...

EKS Workshop

  • 1. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. EKS - Kubernetes on AWS Christoph Kassen Solutions Architect - chrkas@amazon.de Jonas Wagner Solutions Architect
  • 2. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. What can you expect?
  • 3. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. WHY DO WE LOVE CONTAINERS? Packaging Distribution Immutable infrastructure
  • 4. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  • 5. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Open source container management platform Helps you run containers at scale Gives you primitives for building modern applications What is Kubernetes?
  • 6. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. W h y d e v e l o p e r s l o v e K u b e r n e t e s Vibrant and growing community of users and contributors
  • 7. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Why developers love Kubernetes A single extensible API S C A L E P E R F O R M A N C E B R E A D T H
  • 8. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Cloud-native applications M I C R O S E R V I C E T O O L I N G N A T I V E A P P L I C A T I O N S
  • 9. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. “Run Kubernetes for me.” “Native AWS integrations” “An open source Kubernetes experience.”
  • 10. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved. ELASTIC CONTAINER SERVICE FOR KUBERNETES
  • 11. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Container Services
  • 12. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. EKS is Kubernetes Certified
  • 13. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. API server Cloud controller Controller manager Scheduler Add-onsKubeDNS EKS control plane
  • 14. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Open Source Kubernetes Community Kubernetes https://github.com/kubernetes/kuber netes CNI plugin https://github.com/aws/amazon-vpc- cni-k8s Heptio AWS Authenticator https://github.com/heptio/authentic ator Virtual Kubelet https://github.com/virtual- kubelet/virtual-kubelet/ SIG AWS https://github.com/kubernetes/com munity/tree/master/sig-aws Cloud Provider Working Group https://github.com/kubernetes/com munity/tree/master/wg-cloud- provider External-DNS https://github.com/kubernetes- incubator/external-dns CoreOS ALB Ingress https://github.com/coreos/alb- ingress-controller CODE REVIEWS FIXING BUGS IMPLEMENTING NEW FEATURES
  • 15. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. mycluster.eks.amazonaws.com Availability Zone 1 Availability Zone 2 Availability Zone 3 Kubectl Workers
  • 16. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  • 17. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. EC2 Worker Nodes EKS Control Plane Customer VPC EKS VPC Network Load Balancer ENI API Access Kubectl Exec/Logs TLS Static IPs ENI Attachment Autoscaling Group EKS Architecture
  • 18. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  • 19. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Metrics Nodes Node exporter Pod/Container Kube-state-metrics cAdvisor Application /metrics JMX Cluster-wide Aggregator Prometheus, Heapster Visualizer Grafana, Kibana, Dashboard Data Model InfluxDB, Graphite Alerting AlertManager, Kapacitor
  • 20. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. IAM authentication with Kubernetes
  • 21. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. ~/.kube/config (with IAM) apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://1234.sk1.us-west-2.eks.amazonaws.com name: eks contexts: - context: cluster: eks user: eks name: eks current-context: eks kind: Config users: - name: eks user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: heptio-authenticator-aws args: - token - -i - eks Config file is no longer user-specific J
  • 22. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Access and Authentication IAM ROLE User X IAM ROLE Service Account Y kubectl → K8s APIs → CRUD Operations on K8s aws-cli → EKS Service APIs → CRUD Operations on Infra K8s Master Nodes K8s Master Nodes K8s Master Nodes API Server Controller Mgr kubelet etcd Cloud Controller Mgr. Scheduler Authentication Webhook Tokens Authorization RBAC Mode Admission Control NamespaceLifecyle,LimitRanger ServiceAccount,DefaultStorageClass, ResourceQuota AWS STS client side Heptio-aws-authenticator server side
  • 23. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  • 24. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Worker provisioning k u b e c t l A W S A u t h c o n f i g m a p & R B A C W o r k e r s R o l e R o l e config map
  • 25. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  • 26. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Native VPC networking with CNI plugin Pods have the same VPC address inside the pod as on the VPC Simple, secure networking Open source and on Github …{ }
  • 27. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Networking with CNI plugin 172.16.0.0/16 User X Service Account Y Kubectl K8s Node 2K8s Node 1 kubelet kube-proxy kubelet kube-proxy VPC Subnet per AZ 172.16.0.1/24 ENI ENIPrimary Private IP: 172.16.1.118 Secondary IPs: 172.16.1.147, 172.16.1.224…. Service: Front end POD 2 POD 3 eth0 Service: Back end POD 1 POD 4 eth0 ec2.associateaddress() L3 RouteTable veth0 Bveth0 A eth0 172.16.1.147/32 eth0 172.16.1.224/32 CNI K8s Master NodesK8s Master NodesK8s Master Nodes API Server Controller Manager kubelet etcd Scheduler kube-proxy Cloud Controller Mgr.
  • 28. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. DNS, Services and ELB 172.16.0.0/16 User X Service Account Y K8s Node 2K8s Node 1 kubelet kube-proxy kubelet kube-proxy VPC Subnet per AZ - 172.16.0.1/24 ENI ENI Service: Front end POD 2 POD 3 Service: Back end POD 1 POD 4 CNI K8s Master NodesK8s Master Nodes K8s Master Nodes API Server Controller Manager kubelet etcd Scheduler kube-proxy Cloud Controller Mgr. DNS kubedns dnsmasq healthz DNS Service – Static IP POD 2 POD 2 kind: Service type: LoadBalancer
  • 29. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes Network Policies enforce network security rules Calico is the leading implementation of the network policy API Open source, active development (>100 contributors) Commercial support available from Tigera
  • 30. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. S T A G E S E P A R A T I O N “ T E N A N T ” S E P A R A T I O N F I N E - G R A I N E D F I R E W A L L S C O M P L I A N C E Namespaces – without network policy, they are not network isolated Reduce attack surface within microservice-based applications Isolate dev, test, and prod E.g., PCI, HIPAA
  • 31. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Network Policy kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: web-allow-prod spec: podSelector: matchLabels: app: web ingress: - from: - namespaceSelector: matchLabels: purpose: production Select affected Pods Define traffic that is allowed
  • 32. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Lab 1
  • 33. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hands-on! – Lab 1 AWS Workshop for Kubernetes 1. Create an EKS cluster 1. Follow the instructions at https://eksworkshop.com (beginner) 2. Use eksctl https://eksctl.io (advanced) 3. Follow the EKS docs https://docs.aws.amazon.com/eks/latest/userguide/getting- started.html (the “hard“ way)
  • 34. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Additional resources https://github.com/ramitsurana/awesome-kubernetes https://discuss.kubernetes.io/ TGIK Playlist: https://www.youtube.com/playlist?list=PLvmPtYZtoXOEN HJiAQc6HmV2jmuexKfrJ https://aws.amazon.com/blogs/compute/tag/containers/
  • 35. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes Concepts
  • 36. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes concepts port 8080 port 8080 ReplicaSet #Pods—2 label selector: v1 ReplicaSet #Pods—1 label selector: v2 Node Docker Pod Containers
  • 37. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes concepts URI: /svc1/* URI: /svc2/* DaemonSet Daemon pod
  • 38. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Application Deployment
  • 39. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Pod definition example apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: # create pods using pod definition in this template metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable-alpine ports: - containerPort: 80
  • 40. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deployments ❯ kubectl create -f nginx.yaml --record ❯ kubectl rollout history deployment/nginx ❯ kubectl expose deployment/nginx --port=80 --target-port=80 -- name=nginx --type=LoadBalancer ❯ kubectl describe svc nginx ❯ curl http://xyz.us-west-2.elb.amazonaws.com
  • 41. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deployments - Helm • Package management for k8s • Chart - collection of files • Description of k8s resources • Flexible templating • Tiller • Installed on k8s cluster • Client • Cli tool to install/update Charts
  • 42. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Using helm ❯ helm search nginx NAME CHART VERSION APP VERSION DESCRIPTION stable/nginx-ingress 0.19.2 0.14.0 An nginx Ingress controller that uses ConfigMap... stable/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego stable/gcloud-endpoints 0.1.0 Develop, deploy, protect and monitor your APIs ... ❯ helm install stable/nginx-ingress --name nginx-ingress --set rbac.create=true [displays README + information about deployment] ❯ helm list NAME REVISION UPDATED STATUS CHART NAMESPACE Nginx-ingress 1 Mon May 21 18:30:17 2018 DEPLOYED nginx-ingress-0.19.2 default
  • 43. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hosting Helm repositories • Anywhere that serves HTTP can host a helm repo • Host private Helm Repo with Chartmuseum https://github.com/kubernetes-helm/chartmuseum • There’s also a handy plugin for S3! • This means IAM Role = auth for your repo J • https://github.com/hypnoglow/helm-s3
  • 44. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deploying Helm on EKS Helm 2.9+ works with EKS out of the box Helm needs RBAC permissions ❯ kubectl -n kube-system create serviceaccount tiller ❯ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller ❯ helm init --service-account=tiller
  • 45. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Understanding deployments # Columnar output ❯ kubectl get services # List all services in the namespace ❯ kubectl get pods --all-namespaces # List all pods in all namespaces ❯ kubectl get pods -o wide # List all pods in the namespace, with details ❯ kubectl get rc <rc-name> # Get a replication controller # Verbose output ❯ kubectl describe nodes <node-name> ❯ kubectl describe pods <pod-name> ❯ kubectl describe pods/<pod-name> # Equivalent to previous ❯ kubectl describe pods <rc-name> # Lists pods created by<rc-name>using common prefix # List Services Sorted by Name ❯ kubectl get services --sort-by=.metadata.name # Get ExternalIPs of all nodes ❯ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
  • 46. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Interacting with Pods ❯ kubectl logs <pod-name> # dump pod logs (stdout) ❯ kubectl logs –f <pod-name> # stream pod logs (stdout) ❯ kubectl run –i --tty busybox—image=busybox -- sh # Run pod as interactive shell ❯ kubectl attach <podname> -i # Attach to Running Container ❯ kubectl port-forward <podname> <local>:<remote> # Forward port of Pod to localhost ❯ kubectl port-forward <servicename><port> # Forward port to service ❯ kubectl exec <pod-name> -- ls / # Run command in existing pod (1 container case) ❯ kubectl exec <pod-name> -c <container-name> -- ls /
  • 47. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deployment Strategies
  • 48. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Rolling Update apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app labels: app: my-app spec: replicas: 10 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 # Numeric or percentage based value maxUnavailable: 0 [...]
  • 49. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Blue / Green Deployment apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app-blue labels: app: my-app spec: replicas: 3 template: metadata: labels: app: my-app version: blue [...] Blue apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app-green labels: app: my-app spec: replicas: 3 template: metadata: labels: app: my-app version: green [...] Green
  • 50. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Blue / Green Deployment Blue kind: Service metadata: name: my-app labels: app: my-app spec: type: LoadBalancer ports: - name: http port: 80 targetPort: http selector: app: my-app version: blue kind: Service metadata: name: my-app labels: app: my-app spec: type: LoadBalancer ports: - name: http port: 80 targetPort: http selector: app: my-app version: green Green kubectl patch service my-app -p '{"spec":{"selector":{"version":"green"}}}'
  • 51. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Canary Deployment Production apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app-prod labels: app: my-app spec: replicas: 9 template: metadata: labels: app: my-app spec: containers: - name: my-app image: images/container:v1 [...] apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app-canary labels: app: my-app spec: replicas: 1 template: metadata: labels: app: my-app spec: containers: - name: my-app image: images/container:v2 [...] More examples at https://container-solutions.com/kubernetes-deployment-strategies/ Canary
  • 52. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Load Balancing
  • 53. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Nginx PodsEC2 instances kube-proxy :32002 nginx-service :32001 Internet 10001:8080 10002:8080 10003:8080 Request to NGINX Pod {NLB}:443 NLB NLB Forwards to the node {node:32001} Service Type – LoadBalancer (NLB) k8s service ClusterIP receives request kube-proxy load balances to pods
  • 54. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Network Load Balancer apiVersion: v1 kind: Service metadata: name: nginx namespace: default labels: app: nginx annotations: service.beta.kubernetes.io/aws-load-balancer-type: "nlb" spec: type: LoadBalancer externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx More options: • Draining • Logging • SSL Certs • Tagging • Security groups • Health checks https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws /aws.go
  • 55. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Nginx Pods EC2 instances kube-proxy :32001 nginx-service :32003 Internet Request to NGINX Pod {ALB}:443 ALB ALB Routes based on the path. /api /home 10002:8080 Webapp Pods 10002:8080 Installation: https://github.com/pahud/eks-alb-ingress Ingress Type – CoreOS ALB Ingress kube-proxy :32002 webapp-service :32004 Load Balances to pods Proxies request to the k8s service ClusterIP
  • 56. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. DNS
  • 57. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Automatic Route53 DNS creation for services apiVersion: v1 kind: Service metadata: name: nginx annotations: # Uses https://github.com/kubernetes-incubator/external-dns external-dns.alpha.kubernetes.io/hostname: nginx.highlyavailable.systems. spec: type: LoadBalancer ports: - port: 80 name: http targetPort: 80 selector: app: nginx
  • 58. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Automatic Route53 DNS creation for Ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: nginx.highlyavailable.systems http: paths: - backend: serviceName: nginx servicePort: 80
  • 59. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Lab 2
  • 60. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Lab 2 1. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/01-path-basics/103-kubernetes- concepts 2. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/03-path-application- development/303-app-update 3. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/04-path-security-and- networking/405-ingress-controllers#alb-ingress-controller 4. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/03-path-application- development/307-app-management-with-helm
  • 61. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Scheduling
  • 62. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Controlling scheduling Resource requirements Resource filters
  • 63. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Limit resource usage Container A Container B limit request 900m 600m limit request 800m 400m ⎲ ⎳ Pod CPU and memory resources
  • 64. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Resource Quotas apiVersion: v1 kind: Pod metadata: name: production spec: containers: - name: nginx-pod image: nginx resources: limits: memory: "800Mi" cpu: "800m" # 0.8 vCPU requests: memory: "600Mi" cpu: "400m“ # 0.4 vCPU Applied per Namespace apiVersion: v1 kind: ResourceQuota metadata: name: production spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi ResourceQuota defined both, so Pod must define both Pod Resource Request
  • 65. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Controlling scheduling Resource requirements Constraints • Taints Node-level • Tolerations Pod-level Topology filters
  • 66. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Taints and Tolerations # Taint node $ kubectl taint nodes ip-10-0-32-12.us-west-2.compute.internal skynet=false:NoSchedule # Tolerations kind: Pod spec: tolerations: - key: skynet operator: Equal value: “false” effect: NoSchedule [...] Match taint to schedule onto tainted node
  • 67. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Controlling scheduling Resource requirements Constraints • Taints Node-level • Tolerations Pod-level Affinity/Anti-Affinity Topology filters
  • 68. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Affinity / Anti-Affinity ● Control scheduling onto nodes ○ Combine with Taints & Tolerations ● Distribute Pods across cluster affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "beta.kubernetes.io/instance-type" operator: In values: [“r4.large",“r4.xlarge"]
  • 69. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. App Auto-Scaling
  • 70. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. App Auto-Scaling # Install heapster ❯ kubectl create -f templates/heapster/heapster.yaml ❯ kubectl run webapp --image=trevorrobertsjr/webapp --requests=cpu=50m -- expose --port=8080 ❯ kubectl autoscale deployment webapp --cpu-percent=5 --min=1 --max=10 ❯ kubectl run -i --tty load-generator --image=busybox -- /bin/sh –c “while true; do wget -q -O- http://webapp.default.svc.cluster.local:8080; done“ ❯ kubectl get hpa –o wide ❯ kubectl delete hpa webapp ❯ kubectl delete deployment/load-generator deployment/webapp
  • 71. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Monitoring and Operations
  • 72. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes Dashboard • General purpose web-based UI for Kubernetes clusters • Manage applications running in the cluster • Manage the cluster
  • 73. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes Dashboard
  • 74. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kubernetes Dashboard
  • 75. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Prometheus, Node exporter, and Grafana • Prometheus: • Open-source systems monitoring and alerting toolkit • Collects metrics from monitored targets by scraping metrics from HTTP endpoints • Dynamically scrape new targets by adding a ServiceMonitor • Grafana: • Open source, feature rich metrics dashboard and graph editor • Node exporter:
  • 76. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Prometheus, Node exporter, and Grafana
  • 77. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Prometheus installation cd cluster-monitoring kubectl apply -f templates/prometheus/prometheus-bundle.yaml kubectl rollout status deployment/prometheus-operator -n monitoring kubectl apply -f templates/prometheus/prometheus.yaml kubectl get po -l prometheus=prometheus -n monitoring kubectl port-forward $(kubectl get po -l prometheus=prometheus -n monitoring -o jsonpath="{.items[0].metadata.name}") 9090 -n monitoring open http://localhost:9090
  • 78. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Grafana installation kubectl apply -f templates/prometheus/grafana-bundle.yaml kubectl rollout status deployment/grafana -n monitoring kubectl port-forward $(kubectl get pod -l app=grafana -o jsonpath="{.items[0].metadata.name}" -n monitoring) 3000 -n monitoring open http://localhost:3000/?orgId=1 kubectl delete -f templates/prometheus/prometheus-bundle.yaml
  • 79. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Lab 3
  • 80. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hands-on! - Lab 3 1. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/02-path-working-with- clusters/205-cluster-autoscaling 2. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/02-path-working-with- clusters/201-cluster-monitoring
  • 81. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CI/CD pipelines
  • 82. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Jenkins – CI/CD with Kubernetes
  • 83. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS CodePipeline – CI/CD with Kubernetes
  • 84. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS CodePipeline – CI/CD with Kubernetes • Continuous Deployment to Kubernetes using AWS CodePipeline, AWS CodeCommit, AWS CodeBuild, Amazon ECR and AWS Lambda • CodeSuite - Continuous Deployment Reference Architecture for Kubernetes
  • 85. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deployment Tools • Spinnaker • Skaffold • Jenkins X • Argo • ... • kubectl Overview: https://engineering.opsgenie.com/cloud-native- continuous-integration-and-delivery-tools-for-kubernetes- e6ea34d308c
  • 86. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Distributed Tracing
  • 87. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS X-Ray for Kubernetes
  • 88. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS X-Ray tracing
  • 89. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS X-Ray segment info
  • 90. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. X-Ray for Kubernetes AWS X-Ray X-Ray DaemonSet X-Ray trace k8s nodes running pods Service A Service B Client HTTP Requests AWS Console
  • 91. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hands-on
  • 92. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Hands-on! - Lab 4 1. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/03-path-application- development/308-cicd-workflows/308-1-codesuite 2. https://github.com/aws-samples/aws-workshop-for- kubernetes/tree/master/03-path-application- development/305-app-tracing-with-jaeger-and-x- ray/x-ray
  • 93. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Make sure to stop&delete resources!
  • 94. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Thank you! Please leave 1-Minute feedback!