Presented at Kubernetes Meetup Tokyo #6: https://k8sjp.connpass.com/event/60324/
Cluster AutoscalerDynamic & Automatic Reconfiguration@mumoshu,primary maintainer of kube-aws/contributor of cluster-autoscalerKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 1
View Slide
Կͷ• K8S on AWSͰΦʔτεέʔϦϯάΛ͢Δ• pod͡Όͳͯ͘nodeͷ΄͏• cluster-autoscaler(CA)Λ͏Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 2
Cluster Autoscaler: FAQ• ΫϥυϓϩόΠμඪ४ͷΦʔτεέʔϦϯάͱͷҧ͍?• AWS AutoScaling: based on CPU/RequestCount(ALB)• Cluster Autoscaler: Autoscaling based on total resourcerequests• e.g. add node(s) when CA sees pending pods• Pod࡞Γ͗ͯᷓ͢ΕͨΒϊʔυ૿͢Α!Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 3
Why: I was too lazy to operate CA• K8SΫϥελͷӡ༻ΔιϑτΣΞΤϯδχΞ• Φʔτεέʔϧར༻͍ͨ͠• CAͷӡ༻͕ຯʹΊΜͲ͍͘͞I'm responsible to run several production K8S clusters on AWS.I'd like to enable autoscaling on them but I'm too lazy tooperate CA. I'm basically a software who loves sketching &coding, not operating !Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 4
Why: Syncing node pool config between cloud<->CA• ASG on AWSͱCA on K8Sͷઃఆผ• Cloud Provider: Node Pool Min/Max Size• CA: Node Pool Min/Max Size• Change(s) on AWS-side requires updating/restarting CA• ໃ६͕͋Δͱਖ਼͘͠ಈ͔ͳ͍• AWSଆͰઃఆΛม͑ͨΒɺCAͷઃఆΛม͑ͯ࠶ىಈ͕ඞཁKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 5
Node Pools/ϊʔυϓʔϧ• AutoScaling Group(AWS)aws autoscaling update-auto-scaling-group \--auto-scaling-group-name $NAME \--min-size $MIN \--max-size $MAX• Instance Group in GCE?Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 6
CA1.kubectl edit deployment cluster-autoscaler2.cluster-autoscaler --nodes $MIN:$MAX:$NAMEKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 7
2खؒ• ࡞ۀΕͦ͠͏• Scripting?• ͜Ε͚ͩͷͨΊʹ…?Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 8
ASGͱCAͷઃఆ• Ͳ͕ͬͪਖ਼ͳͷ?• ASGͷ߹• CAͷmin >= ASGͷmin• CAͷmax <= ASGͷmaxKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 9
How• ASGͷઃఆΛCA͕ࣗಈతʹಡΜͰ͘ΕΕΑ͘ͳ͍?Shouldn't CA automatically sync up with AWS about ASGs it istold to manage?Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 10
What• CAͷ৽ػೳ1. Dynamic Reconfiguration2. Node Group Automatic Discovery !Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 11
Dynamic Reconfiguration• CAͷઃఆΛConfigMapʹॻ͘• ConfigMapΛॻ͖͑ΔͱCA͕ࣗಈϦϩʔυ(--configmap)• PR: github.com/kubernetes/contrib/pull/2226Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 12
Dynamic Reconfigurationͷར༻ํ๏kubectl create configmap cluster-autoscaler -f ca-config.yamlKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 13
kind: ConfigMapapiVersion: v1metadata:name: cluster-autoscalernamespace: kube-systemdata:settings: |-{"nodeGroups": [{"minSize": 1,"maxSize": 2,"name": "myasg"}]}Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 14
./cluster-autoscaler --configmap=cluster-autoscaler ...Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 15
όʔδϣϯ• CA 0.5.2͔ΒKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 16
Dynamic ReconfigurationͷͭΒ͍ͱ͜Ζ• kubectl edit deployment ca͕kubectl edit configmapcaʹมΘ͚ͬͨͩͰ• ͔֬ʹएׯ៉ྷʹεΫϦϓτԽ͘͢͠ͳΔ͚Ͳ• BEFORE: εΫϦϓτdeploymentͷ໊લͱશઃఆɺcaίϚϯυϥΠϯͷॻ͖͑ํΛΒͳ͍ͱ͍͚ͳ͍• AFTER: configmapͷ໊લͱઃఆ͚͍ͩͬͯΕ͍͍Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 17
ͦ͜ͰNode Group Automatic DiscoveryKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 18
Automatic discovery in nutshellҰݴͰ͍͏ͱɺCA͕AWS APIΛͬͯASGͷઃఆΛࣗಈಉظͯ͘͠ΕΔػೳcluster-autoscaler: Re: AWS Autoscaler autodiscover ASGnames and sizesgithub.com/kubernetes/autoscaler/pull/11Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 19
How it works͋ͳͨ:• ASGʹλάΛ͚ͭΔ• CAʹλάΛڭ͑ΔCA:• λάͷ͍ͭͨASGΛݕ͢Δ!Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 20
How operating CA improved?BEFORE:cluster-autoscaler --nodes 1:10:myasg-123456& ASGઃఆมߋͷͨͼʹ͜ͷҾΛରԠͤ͞Δӡ༻AFTER:cluster-autoscaler --node-group-automatic-discovery asg:tag:key1=val1,key2=val2& ӡ༻ͷखؒͳ͠ !Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 21
ࠓͷͱ͜ΖAWSͷΈ• ΠϯλϑΣʔεGCEAzureʹରԠͰ͖ΔΑ͏ʹͬͨͭΓThe automatic discovery feature works only with the AWSprovider as of today. However, the common interface is therefor you to easily add GCE/Azure supports !Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 22
GCEରԠΠϝʔδAWS(Supported):--cloudprovider=aws \--node-group-automatic-discovery asg:tag:key1=val1,key2=val2GCE(Unsupported/Imaginary interface):--cloudprovider=gce \--node-group-automatic-discovery gce:label:key1=val1,key2=val2An instance group could be "labeled" in GCE, right?Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 23
GCE, AzureରԠٻΉ!Would anyone mind contributing supports for GCE and Azureto the automatic discovery feature?!Kubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 24
Supported since CA 0.6• Automatic DiscoveryCA 0.6͔Β• kube-aws v0.9.8-rc.1͔Β• CA 0.6͕σϑΥϧτ• Automatic DiscoveryΛΑ͠ͳʹઃఆͯ͘͠ΕΔKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 25
kube-aws: Configuring CAautoscaling:clusterAutoscaler:enabled: trueKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 26
kube-aws: Configuring CA per node poolworker:nodePools:# CA is disabled by default- name: static# CA is enabled only on this node pool- name: dynamicautoscaling:clusterAutoscaler:enabled: trueKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 27
·ͱΊ/Recap• CAͷӡ༻ࣗಈԽ/ָʹΦʔτεέʔϦϯά͕͑Δ• ͍·ͷͱ͜ΖAWS͚ͷํ͕ॆ࣮• Automate a boring operational task for CA• Dynamic Reconfiguration: supported since CA 0.5.2• Automatic Discovery: supported on AWS since CA 0.6• kube-aws supports CA & Automatic DiscoveryKubernetes Meetup Tokyo #6 "Cluster Autoscaler: Dynamic & Automatic Reconfiguration © 2017 mumoshu 28