áá±á¬ááºážáá«ážááá¬áá¬ááŒááºááᯠáááºáááºážá
ááá·áºáá±á·ááœáẠááŒááºáááºáá²á·áá«áááºá
Kubernetes ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá« cloud áá¯ááºáá»á
ááááºáá»á¬ážááᯠáááºááá¯á·áá»áœá±áá¬ááá¯ááºáááºáááºážá ááŸááºáááºáá±á¬ááŒá±ááŸááºážáá»ááºáá
áºáá¯áá»áŸáááŸááá±á¬áºáááºážá áááºáá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááá¯ááá¯áááá±á¬ááºá
áœá¬á
á®áá¶ááá·áºááœá²áááºááŸáá·áº áááºá cloud computing áá¯ááºáá»á
ááááºáá»á¬ážááᯠáá»áŸá±á¬á·áá»áá±ážááá¯ááºááá·áº áááááá¬áá»á¬ážá
áœá¬ááᯠá€áá±á¬ááºážáá«ážááœáẠáá±á¬áºááŒáá¬ážáá«áááºá
áá»áœááºá¯ááºááẠá€áá±á¬ááºážáá«ážááᯠAWS á¡ááœáẠKubernetes ááŒáá·áº áá±ážáá¬ážáá²á·áááºá ááá¯á·áá±á¬áº áááºážááẠá¡ááŒá¬áž cloud áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááŸáá·áº á¡ááá¡áá» (áá®ážáá«áž) áá°áá®áá±á¬áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá ááá·áºá¡á
á¯á¡áá±áž(áá»á¬áž) ááœáẠá¡á±á¬áºááá¯á
áá±ážáá»ááŒááºážááᯠá
á®á
ááºáááºááŸááºáá¬ážááŒá®ážááŒá
áºááẠ(
á€áá±á¬ááºážáá«ážááœáẠá¡áá»á¯á¶ážáááºáááº-
- á¡áá¯á¶ážáááŒá¯áá±á¬ á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŸááºážáááºážááŒááºáž (
kube-janitor ) - á¡áá¯ááºáá»áááºááá¯ááºáá»áááºááœáẠá¡ááá¯ááºážá¡áá¬ááᯠáá»áŸá±á¬á·áá»áá« (
kube-downscaler ) - horizontal autoscaling (HPA) ááᯠá¡áá¯á¶ážááŒá¯ááŒá®ážá
- á¡áááºážá¡ááŒá
áºáá»á¬áž á¡ááœááºá¡áá»áœá¶ ááŒáá¯áááºááŸá¬áá°ááŸá¯ áá»áŸá±á¬á·áá»ááŒááºáž (
kube-resource-report á VPA) - Spot ááŒá áºáááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯
á¡áá¯á¶ážáááŒá¯áá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážááᯠááŸááºážáááºážááŒááºážá
áá»ááºááŒááºáá²á· áááºáááºážáá»ááºááŸá¬ á¡áá¯ááºáá¯ááºááᬠá¡áááºážáá±á¬ááºážáá«áááºá áááºážááá¬á¡ááœá²á·á¡á
ááºážááœá±ááᯠááá¯áá»ááºáááºá
(Henning Jacobs:
Zhiza-
(ááá¯ážáá¬áž) Corey Quinn
ááá¹áá¬áá® - áááºá AWS á¡áá±á¬áá·áºááẠááá·áºááœááºááŸááá±á¬ áá¯á¶ážá
áœá²áá°á¡áá±á¡ááœááºá áá¯ááºáá±á¬ááºááŸá¯áá
áºáá¯ááŒá
áºáááºá
á¡áá»ááºá¡áááº- áááºá AWS áááŸááºááẠááá·áºááœááºááŸááá±á¬ á¡ááºáá»ááºáá®áá¬á¡áá±á¡ááœááºá áá¯ááºáá±á¬ááºááŸá¯áá
áºáá¯ááŒá
áºáááºá
Ivan Kurnosov (áá¯á¶á·ááŒááºááŸá¯) á
á¡á
á
áºá¡ááŸááºá¡áá»ááº- áááºá AWS áááŸááºááẠáááºááááºáááº/áá»ááºááẠáá±á·ááœá¬ážááá·áº á¡áá¬áá»á¬ážá
áœá¬á áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯ááŒá
áºáááºá)
- á¡á á¯ááá¯ááºáá»ááºááŒáá·áºáá±á¬á ááºážáá»ááºážáá»á¬ážááẠPR/test ááŒáá·áºáá»ááºááŸá¯á¡ááœáẠá¡áá»á¬ážáá¯á¶ážá¡áá»áááº- ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ (TTL) ááᯠáááºááŸááºááá¯ááºáááºá
- áá áºáŠážáá»ááºážá¡áááºážá¡ááŒá áºáá»á¬ážááᯠ7 áááºá¡ááŒá¬ááœááºá¡ááá¯á¡áá»á±á¬ááºáááºááŸá¬ážáááºá¥ááá¬á¡á¬ážááŒáá·áº janitor/ttl ááŒáá·áºááŸááºá á¯ááá¯ááºáááºá
á¡ááœá±ááœá±á
ááºážáá»ááºážáá»á¬ážááᯠYAML ááá¯ááºááœáẠáááºááŸááºáá¬ážáá«áááºá áááºážááááºážááŒá±á¬ááºážááẠparameter ááá¯ááŒááºáááºážáááºá --rules-file
kube-janitor ááœááºá á€áááºááŸá¬ namespaces á¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááẠááá°áá¬á
ááºážáá»ááºážáá
áºáá¯ááŒá
áºáááºá -pr-
ááŸá
áºáááºá¡ááŒá¬ááœááºá
- id: cleanup-resources-from-pull-requests
resources:
- namespaces
jmespath: "contains(metadata.name, '-pr-')"
ttl: 2d
á¡á±á¬ááºáá±á¬áºááŒáá«á¥ááá¬ááẠ2020 áá¯ááŸá áºááœáẠDeployment/StatefulSets á¡áá áºáá»á¬ážá¡á¬ážáá¯á¶ážá¡ááœáẠDeployment and StatefulSet pods ááœáẠá¡ááá®áá±ážááŸááºážá¡ááœáŸááºážáá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááááºážááŸááá±ážáá±á¬áºáááºáž áá áºáá»áááºáááºážááŸá¬ááẠá€á¡ááœáŸááºážááá«áá² á ááºážáááºááŸá¯áá»á¬ážááᯠáá áºáááºááŒá¬áá¯ááºáá±á¬ááºááá¯ááºáááº-
- id: require-application-label
# ÑЎалОÑÑ deployments О statefulsets без ЌеÑкО "application"
resources:
- deployments
- statefulsets
# ÑÐŒ. http://jmespath.org/specification.html
jmespath: "!(spec.template.metadata.labels.application) && metadata.creationTimestamp > '2020-01-01'"
ttl: 7d
kube-janitor áááºáááºáá±áá±á¬ á¡á á¯á¡áá±ážááœáẠáááá Ạ30 ááŒá¬ á¡áá»áááºááá·áºáááºáá¬ážáá±á¬ áá®ááá¯ááᯠááœáá·áºáá«-
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
áá¯ááºáá»á ááááºááá¯ážááŒáŸáá·áºááŒááºážááá±á¬ááºáááºá¡áááºážá¡ááŒá áºááŸá¬ persistent volumes (AWS EBS) ááŒá áºáááºá Kubernetes StatefulSet ááᯠáá»ááºááŒááºážááẠáááºážá áááºááá¯áẠvolumes (PVC - PersistentVolumeClaim) ááᯠááá»ááºáá«á á¡áá¯á¶ážáááŒá¯áá±á¬ EBS ááá¬ááá»á¬ážááẠáá áºááá»áŸáẠáá±á«áºáá¬áá¬ááŸáá·áºáá»á® áá¯ááºáá»á ááááºáá»á¬áž á¡ááœááºááá° ááŒá áºáá±á«áºááá¯ááºáááºá Kubernetes Janitor ááœáẠá¡áá¯á¶ážáááŒá¯áá±á¬ PVC áá»á¬ážááᯠááá·áºááŸááºážáá±ážáá¯ááºááẠá¡ááºá¹áá«áááºááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá á€á ááºážáá»ááºážááẠmodule áá áºáá¯ááŸááááºáááºáá¬ážáá±á¬ááŸáá·áº StatefulSet ááá¯á·ááá¯áẠCronJob ááŸáááºááœáŸááºážááŒááºážáááŸááá±á¬ PVC á¡á¬ážáá¯á¶ážááá¯áááºááŸá¬ážáááá·áºáááº-
# ÑЎалОÑÑ Ð²Ñе PVC, кПÑПÑÑе Ме ÑЌПМÑОÑÐŸÐ²Ð°ÐœÑ Ðž Ма кПÑПÑÑе Ме ÑÑÑлаÑÑÑÑ StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
Kubernetes Janitor ááẠááá·áºá¡á
á¯á¡áá±ážááᯠááá·áºááŸááºážáá±á
á±ááẠáá°áá®áá±ážááá¯ááºááŒá®áž cloud computing áá¯ááºáá»á
ááááºáá»á¬ážááᯠááŒááºážááŸááºážá
áœá¬á
á¯áá¯á¶ááŒááºážá០áá¬ááœááºááá¯ááºáá«áááºá ááŒáá·áºáá»ááºááŒááºážááŸáá·áº ááœá²á·á
ááºážááŸá¯ááá¯ááºáᬠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááœááºá ááá¯ááºáá¬áá«á
á¡áá¯ááºáá»áááºááá¯ááºáá»áááºááœáẠá¡ááá¯ááºážá¡áá¬ááᯠáá»áŸá±á¬á·áá»áá«á
á ááºážáááºááŒááºážááŸáá·áº á¡ááá·áºáááºááŸááºááŒááºážá áá áºáá»á¬ážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº á¡áá¯ááºáá»áááºá¡ááœááºážáᬠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá back office/admin tools áá²á·ááá¯á·áá±á¬ á¡áá»áá¯á·áá±á¬ áá¯ááºáá¯ááºááŸá¯á¡ááá®áá±ážááŸááºážáá»á¬ážáááºáááºáž á¡ááá·áºá¡áááºááŒáá·áºáᬠáááŸáááá¯ááºááŒá®áž áá±á·áá»ááºážááá»ááºáž ááááºáá¬ážááá¯ááºáá«áááºá
image: hjacobs/kube-downscaler:20.4.3
args:
- --interval=30
# Ме ПÑклÑÑаÑÑ ÐºÐŸÐŒÐ¿ÐŸÐœÐµÐœÑÑ ÐžÐœÑÑаÑÑÑÑкÑÑÑÑ
- --exclude-namespaces=kube-system,infra
# Ме ПÑклÑÑаÑÑ kube-downscaler, а Ñакже ПÑÑавОÑÑ Postgres Operator, ÑÑÐŸÐ±Ñ ÐžÑклÑÑеММÑЌО ÐРЌПжМП бÑлП ÑпÑавлÑÑÑ
- --exclude-deployments=kube-downscaler,postgres-operator
- --default-uptime=Mon-Fri 08:00-20:00 Europe/Berlin
- --include-resources=deployments,statefulsets,stacks,cronjobs
- --deployment-time-annotation=deployment-time
á€áááºááŸá¬ á áá±á
~13 á០4 worker node áá»á¬ážááᯠáá»áŸá±á¬á·áá»ááŒááºážááŒáá·áº áááºá AWS áá±ááºááœáẠáááá¬áááºááŸá¬ážáá±á¬ ááŒá¬ážáá¬ážáá»ááºááᯠáá±áá»á¬áá±á«áẠáááá¬á
á±áá«áááºá
áá«áá±ááá·áº á¡á
á¯á¡ááœá²á· "á¡áá¯ááºáááºáá»áááº" á¡ááœááºážááŸá¬ á¡áá¯ááºáá¯ááºááá¯á· ááá¯á¡ááºááẠáááºááá¯áá¯ááºááá²á á¡áá»áá¯á·áá±á¬ ááŒáá·áºáá»ááºááŸá¯áá»á¬ážááᯠá¡ááá¯ááºážá¡áá¬áá»áŸá±á¬á·áá»ááŒááºáž/áááºáá¯ááºááŒááºáž- á
á
áºááŸááºáá±á¬ ááŸááºá
á¬áá»á¬ážááᯠááá·áºááœááºážááŒááºážááŒáá·áº á¡ááá¯ááºážá¡áá¬ááᯠá¡ááŒá®ážá¡ááá¯áẠáááºáá¯ááºááá¯ááºáááºá YYYY-MM-DD HH:MM (UTC) áá±á¬áºáááºááŸá ááááá¡áá»áááºáá¶ááááºááŒáá·áº ááŸááºáá»ááºááá»ááá»ááºáž áá»á¯á¶á·áá»á²á·ááŒááºáž/áááºáá¯ááºááŒááºážá¡á¬áž á¡áá¯á¶ážááŒá¯á ááŒáá·áºáá»ááºááŸá¯áá»á¬ážááᯠáá¬áá®áááºáá¯ááºááá¯ááºáááºá ááá¯á¡ááºáá«áá ááŸááºáá»ááºááŸáá·áºá¡áá° pod áá
áºáá¯ááᯠááŒáá·áºáá»ááºááŒááºážááŒáá·áº á¡á
á¯áá
áºáá¯áá¯á¶ážááᯠááŒááºáá»áááºááŸáááá¯ááºáááºá downscaler/force-uptime
á¥ááá¬á¡á¬ážááŒáá·áºá nginx blank ááá¯ááœáá·áºááŒááºážááŒáá·áº-
kubectl run scale-up --image=nginx
kubectl annotate deploy scale-up janitor/ttl=1h # ÑЎалОÑÑ ÑазвеÑÑÑваМОе ÑеÑез ÑаÑ
kubectl annotate pod $(kubectl get pod -l run=scale-up -o jsonpath="{.items[0].metadata.name}") downscaler/force-uptime=true
ááŒááº
á¡áá»á¬ážááá¯áẠá¡ááá¯á¡áá»á±á¬áẠá¡ááá¯ááºážá¡áá¬ááᯠá¡áá¯á¶ážááŒá¯áá«á
á¡ááá®áá±ážááŸááºáž/áááºáá±á¬ááºááŸá¯áá»á¬ážá
áœá¬ááẠáááºááŒáœáá±á¬ loading áá¯á¶á
á¶ááŒáá·áº áá¯ááºáá±á¬ááºáááº- áá
áºáá«áá
áºáá¶ááœáẠáááºážááá¯á·á module áá»á¬ážááẠá¡áá¯ááºááá¯ááºáá²á áá
áºáá«áá
áºáá¶ááœáẠáááºážááá¯á·ááẠá
áœááºážáá±á¬ááºáááºá¡ááŒáá·áºááŒáá·áº á¡áá¯ááºáá¯ááºáá«áááºá á¡ááŒáá·áºáá¯á¶ážáááºáá¯ááºáááºááá¯ážááᯠááá¯ááºááœááºááẠá¡ááŒá²áááºáž pods áá»á¬ážááᯠáááºáááºááŒááºážááẠáá»áœá±áá¬ááŒááºážááá¯ááºáá«á Kubernetes ááẠá¡áááºážá¡ááŒá
áºáá
áºáá¯ááŸá á¡áá»á¬ážááá¯áẠá¡ááá¯á¡áá»á±á¬áẠá¡ááá¯ááºážá¡áá¬ááᯠáá¶á·ááá¯ážáá±ážáááºá
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 100
type: Utilization
Zalando ááẠá
áá±ážáá»á²á·áááºá¡ááœáẠá
áááºááŒáá¯ááºáááºááá
áºáá»á¬ážááᯠá¡ááœááºááá°áá»áááºáááºááẠá¡á
áááºá¡ááá¯ááºážáá
áºáá¯ááᯠáááºáá®ážáá¬ážáááºá
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
annotations:
# metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
metric-config.pods.requests-per-second.json-path/path: /metrics
metric-config.pods.requests-per-second.json-path/port: "9090"
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: requests-per-second
target:
averageValue: 1k
type: AverageValue
HPA ááŒáá·áº á¡áá»á¬ážááá¯áẠá¡á±á¬áºááá¯á
áá±ážáá»á²á·ááŒááºážááᯠááŒááºáááºáááºááŸááºááŒááºážááẠááá¯ááºáá¶áá²á·áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠá
áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠáá°áááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážáá²á០áá
áºáá¯ááŒá
áºááá·áºáááºá Spotify ááœáẠáááºážááá¯á·á á¡ááœá±á·á¡ááŒá¯á¶ááŸáá·áº HPA á¡ááœáẠá¡ááŒá¶ááŒá¯áá»ááºáá»á¬ážááŸáá·áºá¡áá° áááºáááºááŸá¯áá
áºáᯠááŸááááº-
á¡áááºážá¡ááŒá áºáá»á¬áž ááŒáá¯áááºááŸá¬áá°ááŒááºážááᯠáá»áŸá±á¬á·áá»áá«á
Kubernetes workloads áá»á¬ážááẠáááºážááá¯á·á CPU/memory ááá¯á¡ááºáá»ááºáá»á¬ážááᯠ"á¡áááºážá¡ááŒá
áºáá±á¬ááºážááá¯ááŸá¯áá»á¬áž" ááŸáááá·áº áá¯á¶ážááŒááºáááºá CPU á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠvirtual cores ááŒáá·áº ááá¯ááºážáá¬ááẠááá¯á·ááá¯áẠ"millicores" ááœáẠá¡áá»á¬ážá¡á¬ážááŒáá·áº ááá¯ááºážáá¬áááºá á¥ááᬠ500m ááẠ50% vCPU ááᯠááá¯ááá¯áááºá áááºááá¯áá®áááºážááŒá
áºáá»á¬ážááᯠááá¯ááºáá»á¬ážááŒáá·áº ááá¯ááºážáá¬ááŒá®áž 500 áá®áá«ááá¯ááºáᯠááá¯ááá¯áá±á¬ 500Mi áá²á·ááá¯á·áá±á¬ áá¯á¶áá±á¬ááºáááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá vCPU 1000 áá¯áá«áá±á¬ node áá
áºáá¯ááŸá 4m CPU áá±á¬ááºážááá¯ááŸá¯ááŸááá±á¬ pod áá
áºáá¯ááẠworker node áá»á¬ážááœáẠ"áá±á¬á·ááº" á
áœááºážáááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠá¡ááŒá¬áž pods áá»á¬ážá¡ááœáẠvCPU 3 áá¯áá¬áá»ááºáá±á¬á·áááºááŒá
áºáááºá
Slack (á¡áááºááá¯áá»áŸá¶) áá±á¬ááºážááá¯áá¬ážáá±á¬á¡áááºážá¡ááŒá
áºáá»á¬ážááŸáá·áº á¡ááŸááºááááºá¡áá¯á¶ážááŒá¯ááŸá¯ááŒá¬áž ááœá¬ááŒá¬ážáá»ááºááŒá
áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááá¯áá® 2 GiB áá±á¬ááºážáá¶áá±á¬áºáááºáž 200 MiB ááá¯áá¬á¡áá¯á¶ážááŒá¯ááá·áº pod áá
áºáá¯ááœáẠ"ááá¯áá»áŸá¶" áááºááá¯áá®á ~ 1,8 GiB ááŸááááºá ááá¯áá»áŸá¶áá¬á ááá¯ááºáá¶áá¯ááºáááºá áááá¯á¡ááºáá±á¬ memory á 1 GiB ááẠáá
áºááá»áŸáẠ~ $10 áá¯ááºáá»áááºáᯠá¡ááŒááºážáá»ááºáž ááá·áºááŸááºážááá¯ááºáááºá
CPU áá±á¬ááºážááá¯ááŸá¯ááᯠ3000m á០~400m á០áá»áŸá±á¬á·áá»ááŒááºážááŒáá·áº á¡ááŒá¬ážáá±á¬ workloads áá»á¬ážá¡ááœáẠá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááœááºáááºážá
á±ááŒá®áž cluster ááᯠáá±ážáááºá
á±ááẠááœáá·áºááŒá¯áááºá
"EC2 instances áá»á¬ážá áá»ááºážáá»áŸ CPU á¡áá¯á¶ážááŒá¯ááŸá¯ááẠááááºážáá
áºáá¯áááºáž áá¬ááá¯ááºááŸá¯ááºážá¡ááœá¬á¡áá±ážááœáẠáá±á«ááºáááºáááº"
ááá¯á·áá±á¬áº YAML ááá¯ááºáá»á¬ážááœáẠáááºááá¯ážáá»á¬ážááᯠááŒá±á¬ááºážáá²áá±áá±á¬áá°áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· á¡ááŸááºáááẠá¡ááá¯ááŸááá«ááá¬ážá ááá¯ááºáá°ážá á
ááºááœá±á ááá¯áá±á¬ááºážá¡á±á¬ááºáá¯ááºááá¯ááºáááºá Kubernetes
á¡áá±ážá
áááºáá±ážáááºá
EC2 Spot Instances ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á Kubernetes worker node áá»á¬ážá¡ááŒá
ẠSpot instances ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº AWS EC2 áá¯ááºáá»á
ááááºááᯠáá»áŸá±á¬á·áá»ááá¯ááºáááº
EC2 Spot ááœáẠKubernetes ááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºáááºážá ááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááŸááááº- SpotInst (ááᯠ"Spot" áá¯áá±á«áºáá±á¬ ááŒááºááááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá« (ááᯠ"Spot" áá¯áá±á«áºáá±á¬ áá»áœááºá¯ááºá¡á¬áž á¡áááºááŒá±á¬áá·áºááá±ážáá«ááŸáá·áº) ááá¯á·ááá¯áẠáááºáá¡á á¯á¡áá±ážááá¯á· Spot AutoScalingGroup (ASG) ááᯠááá¯ážááá¯ážááŸááºážááŸááºážááá·áºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá á€áááºááŸá¬ á¥ááá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬áá«ááŸááá±á¬ "á áœááºážáá±á¬ááºáááº-áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬" Spot ASG á¡ááœáẠCloudFormation á¡ááá¯á¡ááœá¬áá áºáá¯ááŒá áºáááºá
MySpotAutoScalingGroup:
Properties:
HealthCheckGracePeriod: 300
HealthCheckType: EC2
MixedInstancesPolicy:
InstancesDistribution:
OnDemandPercentageAboveBaseCapacity: 0
SpotAllocationStrategy: capacity-optimized
LaunchTemplate:
LaunchTemplateSpecification:
LaunchTemplateId: !Ref LaunchTemplate
Version: !GetAtt LaunchTemplate.LatestVersionNumber
Overrides:
- InstanceType: "m4.2xlarge"
- InstanceType: "m4.4xlarge"
- InstanceType: "m5.2xlarge"
- InstanceType: "m5.4xlarge"
- InstanceType: "r4.2xlarge"
- InstanceType: "r4.4xlarge"
LaunchTemplate:
LaunchTemplateId: !Ref LaunchTemplate
Version: !GetAtt LaunchTemplate.LatestVersionNumber
MinSize: 0
MaxSize: 100
Tags:
- Key: k8s.io/cluster-autoscaler/node-template/label/aws.amazon.com/spot
PropagateAtLaunch: true
Value: "true"
Kubernetes ááŒáá·áº Spot á¡áá¯á¶ážááŒá¯ááŒááºážááá¯ááºáᬠááŸááºá á¯á¡áá»áá¯á·
- á¥ááá¬á¡á¬ážááŒáá·áº áááºááá·áºááœá¬ážáá±á¬á¡áá«ááœáẠnode ááᯠáá±á«ááºážá ááºážááŒááºážááŒáá·áº Spot terminations áá»á¬ážááᯠáááºááá¯ááºááœááºáááºááá¯á¡ááºáááºá
- Zalando á¡áá¯á¶ážááŒá¯áááºá
á¡áá²áá»ááẠnode pool áŠážá á¬ážáá±ážáá»á¬ážááŒáá·áº ááá¬ážááẠá¡á á¯á¡áá±ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá»á²á·ááŒááºážá - á¡á
ááºá¡ááŒá±á¬ááºáá¯á¶ááŸááºáá»á¬áž
ááá¯ááºážá á±ááá¯ááºáááºá Spot ááœááºáááºáááºáááºá¡áá¯ááºáááºáá»á¬ážá "ááŸááºáá¯á¶áááºááŒááºáž" ááá¯áááºáá¶áá«á
á¡áá»ááºážáá»á¯ááº
áááºá cloud ááœá±áá±á¬ááºážáá¶ááœáŸá¬ááᯠáá»áŸá±á¬á·áá»áá¬ááœáẠá¡áá¯á¶ážáááºáá±á¬ áááºááŒáá¬ážáá±á¬ áááááá¬á¡áá»áá¯á·ááᯠáááºááœá±á·ááŸááááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áá±á¬ááºážáá«ážá á¡ááŒá±á¬ááºážá¡áá¬á¡áá»á¬ážá
á¯ááá¯áááºáž ááá¯áá±áá¬ááœáẠááŸá¬ááœá±ááá¯ááºáááºá
Kubernetes ááœáẠcloud áá¯ááºáá»á
ááááºááᯠáá»áœá±áá¬áááºá¡ááœáẠáááºáá¡áá±á¬ááºážáá¯á¶ážá¡áá±á·á¡áá»áá·áºáá»á¬ážáá¬áž á¡áááºáááºážá áá»á±ážáá°ážááŒá¯á áá»áœááºá¯ááºááᯠá¡áááá±ážáá«á
source: www.habr.com