āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋāĻ° āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻā§āĻ°ā§āĻ¸ āĻļā§āĻ°ā§āĻ° āĻĒā§āĻ°āĻžāĻā§āĻāĻžāĻ˛ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻāĻžāĻŦā§ āĻā§āĻ˛āĻžāĻāĻĄ āĻāĻ°āĻ āĻŦāĻžāĻāĻāĻžāĻ¤ā§ āĻšāĻ¯āĻŧ? āĻā§āĻ¨ āĻāĻāĻ āĻ¸āĻ āĻŋāĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨ā§āĻ, āĻ¤āĻŦā§ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻ°āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°āĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻāĻĄ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻāĻ°āĻ āĻāĻŽāĻžāĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŽāĻŋ AWS āĻāĻ° āĻāĻ¨ā§āĻ¯ Kubernetes āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛āĻŋāĻā§āĻāĻŋ, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻāĻĄ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšāĻāĻžāĻ°ā§āĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ (āĻĒā§āĻ°āĻžāĻ¯āĻŧ) āĻāĻāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯ āĻšāĻŦā§āĨ¤ āĻāĻŽāĻŋ āĻ
āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°(āĻā§āĻ˛āĻŋ) āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻāĻā§ (
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻžāĻ° āĻāĻ°āĻŦā§:
- āĻ
āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¸āĻŽā§āĻĒāĻĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž (
āĻā§āĻŦā§-āĻĻāĻžāĻ°ā§āĻ¯āĻŧāĻžāĻ¨ ) - āĻ
-āĻāĻžāĻā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°ā§āĻ¨ (
āĻā§āĻŦā§-āĻĄāĻžāĻāĻ¨āĻ¸ā§āĻā§āĻ˛āĻžāĻ° ) - āĻ āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ (HPA) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§,
- āĻ
āĻ¤ā§āĻ¯āĻ§āĻŋāĻ āĻ¸āĻŽā§āĻĒāĻĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻšā§āĻ°āĻžāĻ¸ (
kube-āĻ¸āĻŽā§āĻĒāĻĻ-āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨ , āĻāĻŋāĻĒāĻŋāĻ) - āĻ¸ā§āĻĒāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¸āĻŽā§āĻĒāĻĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž
āĻĻā§āĻ°ā§āĻ¤ āĻāĻ¤āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻāĻžāĻ āĻāĻ°āĻž āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤āĨ¤ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻžāĻ¨ āĻāĻžāĻ
(āĻšā§āĻ¨āĻŋāĻ āĻā§āĻ¯āĻžāĻāĻŦāĻ¸:
āĻāĻŋāĻāĻž:
(āĻāĻĻā§āĻ§ā§āĻ¤āĻŋ) āĻā§āĻ°āĻŋ āĻā§āĻāĻ¨:
āĻŽāĻŋāĻĨ: āĻāĻĒāĻ¨āĻžāĻ° AWS āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻšāĻ˛ āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨āĨ¤
āĻāĻāĻ¨āĻž: āĻāĻĒāĻ¨āĻžāĻ° AWS āĻ¸ā§āĻā§āĻ° āĻšāĻ˛ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¤āĻāĻ¨ āĻĒā§āĻ°āĻā§āĻļāĻ˛ā§ āĻāĻā§ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨āĨ¤
āĻāĻāĻžāĻ¨ āĻā§āĻ°āĻ¨ā§āĻ¸āĻ (āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ):
āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ¸āĻ¤ā§āĻ¯: āĻāĻĒāĻ¨āĻžāĻ° AWS āĻ¸ā§āĻā§āĻ° āĻšāĻ˛ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯āĻž āĻāĻĒāĻ¨āĻŋ āĻ
āĻā§āĻˇāĻŽ/āĻŽā§āĻā§ āĻĻāĻŋāĻ¤ā§ āĻā§āĻ˛ā§ āĻā§āĻā§āĻ¨āĨ¤)
- āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°-āĻāĻ¯āĻŧāĻžāĻāĻĄ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋ PR/āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻāĻžāĻāĻŽ-āĻā§-āĻ˛āĻžāĻāĻ (TTL) āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
- āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻ¸āĻŽā§āĻĒāĻĻ āĻĻāĻžāĻ°ā§āĻ¯āĻŧāĻžāĻ¨/ttl āĻĻāĻŋāĻ¯āĻŧā§ āĻā§āĻāĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ 7 āĻĻāĻŋāĻ¨ āĻĒāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻĒāĻžāĻāĻ/āĻĒā§āĻ°ā§āĻā§āĻāĻžāĻāĻĒ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻāĻ¨ā§āĻ¯āĨ¤
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋ YAML āĻĢāĻžāĻāĻ˛ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ° āĻĒāĻžāĻĨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°ā§āĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ --rules-file
āĻā§āĻŦā§-āĻĻāĻžāĻ°ā§āĻ¯āĻŧāĻžāĻ¨ āĻāĻāĻžāĻ¨ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ°āĻ¯āĻŧā§āĻā§ -pr-
āĻĻā§āĻ āĻĻāĻŋāĻ¨ āĻĒāĻ° āĻ¨āĻžāĻŽā§:
- id: cleanup-resources-from-pull-requests
resources:
- namespaces
jmespath: "contains(metadata.name, '-pr-')"
ttl: 2d
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ 2020 āĻ¸āĻžāĻ˛ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻ¤ā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž/StatefulSets-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĒā§āĻ˛ā§āĻ¯āĻŧāĻŽā§āĻ¨ā§āĻ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻāĻĢā§āĻ˛āĻ¸ā§āĻ āĻĒāĻĄāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ˛ā§āĻŦā§āĻ˛ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻ āĻ˛ā§āĻŦā§āĻ˛ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ:
- 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
āĻā§āĻŦā§-āĻĻāĻžāĻ°ā§āĻ¯āĻŧāĻžāĻ¨ āĻāĻ˛āĻŽāĻžāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ 30 āĻŽāĻŋāĻ¨āĻŋāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¯āĻŧ-āĻ¸ā§āĻŽāĻŋāĻ¤ āĻĄā§āĻŽā§ āĻāĻžāĻ˛āĻžāĻ¨:
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
āĻā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻāĻ°āĻā§āĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻā§āĻ¸ āĻšāĻ˛ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻ˛āĻŋāĻāĻŽ (AWS EBS)āĨ¤ āĻāĻāĻāĻŋ Kubernetes StatefulSet āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž āĻ¤āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻāĻ˛āĻŋāĻāĻŽ (PVC - PersistentVolumeClaim) āĻŽā§āĻā§ āĻĻā§āĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ EBS āĻāĻ˛āĻŋāĻāĻŽ āĻ¸āĻšāĻā§āĻ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§ āĻļāĻ¤ āĻļāĻ¤ āĻĄāĻ˛āĻžāĻ° āĻāĻ°āĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ PVC āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ Kubernetes Janitor āĻāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻāĻŋ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ PVC āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ StatefulSet āĻŦāĻž CronJob āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž:
# ŅĐ´Đ°ĐģиŅŅ вŅĐĩ PVC, ĐēĐžŅĐžŅŅĐĩ ĐŊĐĩ ŅĐŧĐžĐŊŅиŅОваĐŊŅ и ĐŊĐ° ĐēĐžŅĐžŅŅĐĩ ĐŊĐĩ ŅŅŅĐģĐ°ŅŅŅŅ StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
Kubernetes Janitor āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻ°āĻžāĻāĻ¤ā§ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻāĻ°āĻāĻā§āĻ˛āĻŋāĻā§ āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻŦāĻžāĻĄāĻŧāĻ¤ā§ āĻŦāĻžāĻ§āĻž āĻĻāĻŋāĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻ
āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°ā§āĻ¨
āĻ -āĻāĻžāĻā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°ā§āĻ¨
āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻŦāĻ āĻ¸ā§āĻā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻŋāĻā§ āĻĒā§āĻ°ā§āĻĄāĻžāĻāĻļāĻ¨ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻžāĻ¨, āĻ¯ā§āĻŽāĻ¨ āĻŦā§āĻ¯āĻžāĻ āĻ āĻĢāĻŋāĻ¸/āĻ ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ āĻā§āĻ˛, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§āĻŽāĻŋāĻ¤ āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŦāĻ āĻ°āĻžāĻ¤āĻžāĻ°āĻžāĻ¤āĻŋ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
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 āĻāĻ°ā§āĻŽā§ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻž āĻ
āĻŦāĻļā§āĻ¯āĻ āĻāĻĒāĻ¨āĻžāĻ° AWS āĻŦāĻŋāĻ˛ā§ āĻāĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻāĻ°ā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° "āĻĄāĻžāĻāĻ¨āĻāĻžāĻāĻŽ" āĻāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ? āĻĄāĻžāĻāĻ¨āĻ¸ā§āĻā§āĻ˛āĻžāĻ°/āĻāĻā§āĻ¸āĻā§āĻ˛ā§āĻĄ: āĻ¸āĻ¤ā§āĻ¯ āĻā§āĻāĻž āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻŋāĻā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§āĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻĨā§āĻā§ āĻŦāĻžāĻĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ YYYY-MM-DD HH:MM (UTC) āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŽ āĻāĻžāĻāĻŽāĻ¸ā§āĻā§āĻ¯āĻžāĻŽā§āĻĒ āĻ¸āĻš āĻĄāĻžāĻāĻ¨āĻ¸ā§āĻā§āĻ˛āĻžāĻ°/āĻŦāĻ°ā§āĻāĻ¨-āĻ
āĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ
āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§āĻāĻžāĻŦā§ āĻŦāĻžāĻĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§, āĻā§āĻāĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒāĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§ āĻĒā§āĻ°ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻāĻŋāĻā§ āĻāĻŦāĻžāĻ° āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ downscaler/force-uptime
, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, nginx āĻĢāĻžāĻāĻāĻž āĻāĻžāĻ˛ā§ āĻāĻ°ā§:
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
āĻĻā§āĻ
āĻ āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻ
āĻ¨ā§āĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨/āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻāĻāĻŋ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻ˛ā§āĻĄāĻŋāĻ āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°ā§: āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻĄāĻŋāĻāĻ˛āĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻˇāĻŽāĻ¤āĻžāĻ¯āĻŧ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ āĻĒāĻŋāĻ āĻ˛ā§āĻĄ āĻŽā§āĻāĻžāĻŦā§āĻ˛āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻĄā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻŦāĻšāĻ° āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻž āĻ˛āĻžāĻāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧāĨ¤ 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 āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ°āĻ¯āĻŧā§āĻā§:
āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻāĻāĻžāĻ°āĻŦā§āĻāĻŋāĻ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°ā§āĻ¨
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻ˛ā§āĻĄ "āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¸ā§āĻ" āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¤āĻžāĻĻā§āĻ° CPU/āĻŽā§āĻŽāĻ°āĻŋāĻ° āĻāĻžāĻšāĻŋāĻĻāĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§āĨ¤ CPU āĻ¸āĻŽā§āĻĒāĻĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻā§āĻ°ā§ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻāĻ°āĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§ "āĻŽāĻŋāĻ˛āĻŋāĻā§āĻ°"-āĻ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ 500m āĻŽāĻžāĻ¨ā§ 50% vCPUāĨ¤ āĻŽā§āĻŽāĻ°āĻŋ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻžāĻāĻā§ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻ¯āĻŧāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻŽāĻ¨ 500Mi, āĻ¯āĻžāĻ° āĻ
āĻ°ā§āĻĨ 500 āĻŽā§āĻāĻžāĻŦāĻžāĻāĻā§ˇ āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¸ā§āĻ āĻāĻ°ā§āĻŽā§ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻ¤ā§ "āĻ˛āĻ" āĻā§āĻˇāĻŽāĻ¤āĻž, āĻŽāĻžāĻ¨ā§ 1000āĻāĻŋ āĻāĻŋāĻ¸āĻŋāĻĒāĻŋāĻāĻ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ¨ā§āĻĄā§ 4 āĻŽāĻŋ āĻ¸āĻŋāĻĒāĻŋāĻāĻ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒāĻĄ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĄāĻā§āĻ˛āĻŋāĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 3āĻāĻŋ āĻāĻŋāĻ¸āĻŋāĻĒāĻŋāĻāĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻĨāĻžāĻāĻŦā§ā§ˇ
āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ (āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ) āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻž āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻĒāĻĄ āĻ¯āĻž 2 GiB āĻŽā§āĻŽāĻ°āĻŋāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°ā§ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 200 MiB āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¤āĻžāĻ° ~1,8 GiB "āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤" āĻŽā§āĻŽāĻ°āĻŋ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻāĻžāĻāĻž āĻāĻ°āĻ āĻšāĻ¯āĻŧāĨ¤ āĻā§āĻ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ
āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯ā§ 1 GiB āĻ
āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻŽā§āĻŽāĻ°āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§ ~$10 āĻāĻ°āĻ āĻāĻ°ā§āĨ¤
CPU āĻ
āĻ¨ā§āĻ°ā§āĻ§ 3000m āĻĨā§āĻā§ ~400m-āĻ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°āĻž āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻā§āĻ° āĻāĻžāĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻŽā§āĻā§āĻ¤ āĻāĻ°ā§ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻāĻŋāĻā§ āĻā§āĻ āĻšāĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
"EC2 āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤āĻā§āĻ˛āĻŋāĻ° āĻāĻĄāĻŧ CPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻāĻ-āĻ
āĻā§āĻā§āĻ° āĻļāĻ¤āĻžāĻāĻļ āĻĒāĻ°āĻŋāĻ¸āĻ°ā§ āĻĨāĻžāĻā§,"
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻāĻžāĻ āĻŽāĻžāĻ¨ā§āĻˇ YAML āĻĢāĻžāĻāĻ˛ā§ āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻ? āĻ¨āĻž, āĻŽā§āĻļāĻŋāĻ¨ āĻ
āĻ¨ā§āĻ āĻāĻžāĻ˛ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§! āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸
āĻāĻāĻāĻž āĻā§āĻ āĻ˛āĻŋāĻā§āĻāĻŋ
EC2 āĻ¸ā§āĻĒāĻ āĻāĻ¨āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻļā§āĻˇ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ
āĻ¨ā§āĻ¤āĻ¤ āĻ¨āĻ¯āĻŧ, āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻžāĻ° āĻ¨ā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸ā§āĻĒāĻ āĻāĻ¨āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ AWS EC2 āĻāĻ°āĻ āĻāĻŽāĻžāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
EC2 āĻ¸ā§āĻĒāĻā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻŦā§āĻ¨? āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§: SpotInst (āĻāĻāĻ¨ "āĻ¸ā§āĻĒāĻ" āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ) āĻāĻ° āĻŽāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻĒāĻā§āĻˇā§āĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨, āĻā§āĻ¨ āĻāĻŽāĻžāĻā§ āĻāĻŋāĻā§āĻāĻžāĻ¸āĻž āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž, āĻŦāĻž āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻā§āĻŦāĻ˛ āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻāĻā§āĻ°ā§āĻĒ (ASG) āĻ¯ā§āĻā§āĻ¤ āĻāĻ°ā§āĻ¨ā§ˇ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ "āĻā§āĻˇāĻŽāĻ¤āĻž-āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻĄ" āĻ¸ā§āĻĒāĻ 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"
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸ā§āĻĒāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻŋāĻā§ āĻ¨ā§āĻ:
- āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻĒāĻ āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻ¨ā§āĻĄāĻāĻŋ āĻŽāĻžāĻ°ā§āĻ āĻāĻ°ā§ āĻ¯āĻāĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
- Zalando āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻāĻžāĻāĻāĻž āĻ¨ā§āĻĄ āĻĒā§āĻ˛ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻš āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ - āĻ¸ā§āĻĒāĻ āĻ¨ā§āĻĄ
āĻŦāĻžāĻ§ā§āĻ¯ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¸ā§āĻĒāĻā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻā§āĻ° āĻāĻžāĻĒā§āĻ° "āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨" āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§āĻ¨
āĻ¸āĻžāĻ°āĻžāĻāĻļ
āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻāĻĄ āĻŦāĻŋāĻ˛ āĻāĻŽāĻžāĻ¤ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻāĻŋāĻā§ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻĒāĻ¯ā§āĻā§ āĻĒāĻžāĻŦā§āĻ¨āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻāĻāĻžāĻ¨ā§āĻ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
Kubernetes āĻ āĻā§āĻ˛āĻžāĻāĻĄ āĻāĻ°āĻ āĻŦāĻžāĻāĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨āĻā§āĻ˛āĻŋ āĻā§ āĻā§? āĻāĻŽāĻžāĻā§ āĻāĻžāĻ¨āĻžāĻ¤ā§ āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§
āĻāĻ¤ā§āĻ¸: www.habr.com