ã¯ããã« Amazon Elastic Kubernetes Service (Amazon EKS) ã®ãElasticããšã¯ã ãå¿
èŠãªãšãã«ãªãœãŒã¹ã確ä¿ããäžèŠã«ãªã£ããšãã«ãªãœãŒã¹ãè§£æŸããã æ©èœãæããŸããAmazon EKS ã¯ã»ãšãã©ãã¹ãŠã®ã¯ãŒã¯ããŒããåŠçã§ããããã«æ¡åŒµã§ããŸãããAmazon EKS ã®ã客æ§ããã1 ã€ã® Amazon EKS ã¯ã©ã¹ã¿ãŒã§ãµããŒãããã Pod ãããŒãã®æå€§æ°ã¯ããã€ã§ããããšãããããªè³ªåãããè³ã«ããŸãã Kubernetes ã¯è€éãªã·ã¹ãã ã§ãããKubernetes ã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ç¹æ§ã¯ã¯ãŒã¯ããŒãã®ç¹æ§ã«ãã£ãŠç°ãªãå Žåãããããããããã®è³ªåã«å¯Ÿããçãã¯ããŸããŸã§ãã Kubernetes ã³ãã¥ããã£ã¯ Kubernetes ã³ã³ããŒãã³ãã®ãµãŒãã¹ã¬ãã«ææš (SLI) ãšãµãŒãã¹ã¬ãã«ç®æš (SLO) ãå®çŸ©ããŠãã ãããããã¹ã±ãŒã©ããªãã£ã«é¢ããè°è«ã®åºçºç¹ãšããŠäœ¿çšã§ããŸãããã®æçš¿ã§ã¯ããããã® SLI ãš SLO ã«ã€ããŠèª¬æããAmazon EKS ããŒã ãã©ã®ããã«ã¹ã±ãŒã©ããªãã£ãã¹ãã宿œããŠããã®ã説æããŸãã SLI ã¯ç§ãã¡ãã·ã¹ãã ãæž¬å®ããæ¹æ³ã§ããäŸãã°ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒãã«ãŠã³ãã®ããã«ãã·ã¹ãã ã®çšŒåç¶æ³ã倿ããããã«äœ¿çšã§ããææšããããŸããSLO ã¯ãäŸãã°ããªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒã 3 ç§æªæºãšããããã«ãã·ã¹ãã ãæ£åžžã«çšŒåããŠãããšãã«æåŸ
ãããå€ãå®çŸ©ããŸããKubernetes SLO ãš SLI 㯠Kubernetes ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã«éç¹ã眮ããŠãããAmazon EKS ã¯ã©ã¹ã¿ãŒã® Kubernetes API ãšã³ããã€ã³ãã®å¯çšæ§ã«éç¹ã眮ãã Amazon EKS ãµãŒãã¹ SLA ãšã¯ç¡é¢ä¿ã§ãã Kubernetes ã¢ããã¹ããªãŒã ã® SLO Amazon EKS ã¯ã¢ããã¹ããªãŒã ã® Kubernetes ãªãªãŒã¹ã«æºæ ããŠãããAmazon EKS ã¯ã©ã¹ã¿ãŒã Kubernetes ã³ãã¥ããã£ã«ãã£ãŠå®çŸ©ããã SLO ã®ç¯å²å
ã§åäœããããšãä¿èšŒããŠããŸãã Scalability Special Interest Group (SIG) 㯠Kubernetes ã®ã¹ã±ãŒã©ããªãã£ç®æšãå®çŸ©ããSLI ãš SLO ãéããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ã調æ»ããŠããŸãã Kubernetes ã«ã¯ãContainer Storage Interface (CSI) ãã©ã€ããŒãAdmission WebhookãAutoscaler ãªã©ããŠãŒã¶ãŒãã«ã¹ã¿ã ã®ã¢ããªã³ããã©ã€ããŒã䜿çšããŠã·ã¹ãã ãæ¡åŒµã§ããæ©èœãæ°å€ããããŸãããããã®æ¡åŒµã¯ãKubernetes ã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ã«ããŸããŸãªåœ¢ã§åœ±é¿ãäžããå¯èœæ§ããããŸããäŸãã°ã failurePolicy=Ignore ã® Admission Webhook ã¯ãWebhook ã¿ãŒã²ãããå©çšã§ããªãå ŽåãKubernetes API ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒãå¢å ãããå¯èœæ§ããããŸããKubernetes Scalability SIG ã¯ã ãyou promise, we promiseããã¬ãŒã ã¯ãŒã¯ ã䜿çšããŠã¹ã±ãŒã©ããªãã£ãå®çŸ©ããŠããŸãã æ¬¡ã®ããšãçŽæããŠããã ããã°: ã¯ã©ã¹ã¿ãŒãæ£ããæ§æãã æ¡åŒµæ©èœããåççã«ã䜿çšãã ã¯ã©ã¹ã¿ãŒã®è² è·ã æšå¥šå¶é å
ã«æãã ã¯ã©ã¹ã¿ãŒãã¹ã±ãŒã«ããããšããçŽæããŸã: ãã¹ãŠã® SLO ãæºããããŸã Kubernetes SLO ã¯ãã¯ãŒã«ãŒããŒãã®ã¹ã±ãŒãªã³ã°ã Admission Webhook ãªã©ãã¯ã©ã¹ã¿ãŒã«åœ±é¿ãäžããå¯èœæ§ã®ãããã©ã°ã€ã³ãå€éšèŠå ããã¹ãŠèæ
®ããŠããããã§ã¯ãããŸããããããã® SLO 㯠Kubernetes ã³ã³ããŒãã³ã ã«éç¹ã眮ããŠãããKubernetes ã®ã¢ã¯ã·ã§ã³ãšãªãœãŒã¹ãæåŸ
ã©ããã«åäœããããšãä¿èšŒããŸããSLO ã¯ãKubernetes éçºè
ã Kubernetes ã³ãŒãã®å€æŽã«ãã£ãŠã·ã¹ãã å
šäœã®ããã©ãŒãã³ã¹ããã°ã¬ãŒããããªã圹å²ãæ
ã£ãŠããŸãã Kubernetes Scalability SIG ã§ã¯ã以äžã®å
¬åŒ SLO/SLI ãå®çŸ© ããŠãããAmazon EKS ããŒã ã¯ãããã® SLO ã SLI ã«ã€ã㊠Amazon EKS ã¯ã©ã¹ã¿ãŒã§å®æçã«ã¹ã±ãŒã©ããªãã£ãã¹ãã宿œããŠã倿Žãè¡ããããæ°ããããŒãžã§ã³ããªãªãŒã¹ãããããããšãã®ããã©ãŒãã³ã¹ã®ãã°ã¬ãŒããç£èŠããŠããŸãã Objective Definition SLO API request latency (mutating) Latency of processing mutating API calls for single objects for every (resource, verb) pair, measured as 99 th percentile over last 5 minutes In default Kubernetes installation, for every (resource, verb) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99 th percentile per cluster-day <= 1 second API request latency (read-only) Latency of processing non-streaming read-only API calls for every (resource, scope) pair, measured as 99 th percentile over last 5 minutes In default Kubernetes installation, for every (resource, scope) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99 th percentile per cluster-day: (a) <= 1 second if scope=resource (b) <= 30 seconds otherwise (if scope=namespace or scope=cluster) Pod startup latency Startup latency of schedulable stateless pods, excluding time to pull images and run init containers, measured from pod creation timestamp to when all its containers are reported as started and observed via watch, measured as 99 th percentile over last 5 minutes In default Kubernetes installation, 99 th percentile per cluster-day <= 5 seconds API ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒ kube-apiserver ã§ã¯ã --request-timeout ãããã©ã«ãã§ 1m0s ãšå®çŸ©ãããŠããŸããã€ãŸãããªã¯ãšã¹ããã¿ã€ã ã¢ãŠãããŠãã£ã³ã»ã«ããããŸã§ã«æå€§ 1 åïŒ60 ç§ïŒå®è¡ã§ããŸããLatency ã«å®çŸ©ããã SLO ã¯ãéä¿¡ããããªã¯ãšã¹ãã®ã¿ã€ãã«ãã£ãŠåé¡ãããŸãããªã¯ãšã¹ãã®ã¿ã€ãã¯ã倿Žå¯èœãªå Žåãããã°ãèªã¿åãå°çšã®å ŽåããããŸãã å€æŽ Kubernetes ã®ãªãœãŒã¹å€æŽãªã¯ãšã¹ãã¯ãäœæãåé€ãæŽæ°ãªã©ãè¡ããŸãããããã®ãªã¯ãšã¹ãã¯ã倿Žããããªããžã§ã¯ããè¿ãããåã« etcd ããã¯ãšã³ã ã«æžã蟌ãŸããŸããetcd ã¯ãã¹ãŠã® Kubernetes ã¯ã©ã¹ã¿ãŒããŒã¿ã«äœ¿çšããã忣åã®ããŒããªã¥ãŒã¹ãã¢ã§ãã ãã®ã¬ã€ãã³ã·ãŒã¯ãKubernetes ãªãœãŒã¹ã® (resource, verb) ãã¢ã«å¯Ÿã㊠5 åéã® 99 ããŒã»ã³ã¿ã€ã«ãšããŠæž¬å®ãããŸããäŸãã°ãPod äœæãªã¯ãšã¹ããããŒãæŽæ°ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒã枬å®ãããŸããSLO ãæºããã«ã¯ããªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒã 1 ç§æªæºã§ããå¿
èŠããããŸãã èªã¿åãå°çš èªã¿åãå°çšãªã¯ãšã¹ãã¯ããGet Pod Xããªã©åäžã®ãªãœãŒã¹ããŸãã¯ãGet all Pod from Namespace Xããªã©ã³ã¬ã¯ã·ã§ã³ãååŸããŸããkube-apiserver ã¯ãªããžã§ã¯ãã®ãã£ãã·ã¥ãä¿æããã®ã§ãèŠæ±ããããªãœãŒã¹ããã£ãã·ã¥ããè¿ãããšãããã°ãetcd ããååŸããå¿
èŠãããå ŽåããããŸãã ãŸãããããã®ã¬ã€ãã³ã·ãŒã¯ 5 åéã«ããã£ãŠ 99 ããŒã»ã³ã¿ã€ã«ã§æž¬å®ãããŸãããèªã¿åãå°çšãªã¯ãšã¹ãã§ã¯ã¹ã³ãŒããç°ãªã£ãŠããŠãããŸããŸãããSLO ã«ã¯ 2 ã€ã®ç°ãªãç®æšãå®çŸ©ãããŠããŸãã kubectl get pod -n mynamespace my-controller-xxx ãªã©åäžã®ãªãœãŒã¹ã«å¯ŸããŠè¡ããããªã¯ãšã¹ãã®å Žåããªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒã¯ 1 ç§æªæºã«ãšã©ãŸãå¿
èŠããããŸãã kubectl get pods -A ãªã©åå空éãŸãã¯ã¯ã©ã¹ã¿ãŒå
ã®è€æ°ã®ãªãœãŒã¹ã«å¯ŸããŠè¡ããããªã¯ãšã¹ãã®å Žåãã¬ã€ãã³ã·ãŒã¯ 30 ç§æªæºã«ãšã©ãŸãå¿
èŠããããŸãã Kubernetes ãªãœãŒã¹ã®ãªã¹ãã«å¯Ÿãããªã¯ãšã¹ãã§ã¯ããªã¯ãšã¹ãã«å«ãŸãããã¹ãŠã®ãªããžã§ã¯ãã®è©³çްã SLO å
ã§è¿ãããããšãåæãšããŠãããããSLO ã¯ãªã¯ãšã¹ãã¹ã³ãŒãããšã«ã¿ãŒã²ããå€ãç°ãªããŸããã¯ã©ã¹ã¿ãŒäžã® Kubernetes ãªããžã§ã¯ããªã©ãªãœãŒã¹ã®å€§ããªéåã§ã¯ãå¿çãµã€ãºã倧ãããªãè¿ããããŸã§ã«æéããããããšããããŸããäŸãã°ãæ°äžã® Pod ãå®è¡ããŠããã¯ã©ã¹ã¿ãŒã§ãJSON ã§ãšã³ã³ãŒãããå Pod ãçŽ 1KiB ã®å Žåãã¯ã©ã¹ã¿ãŒå
ã®ãã¹ãŠã® Pod ãè¿ãããšãããš 10MB 以äžã«ãªããŸããKubernetes ã¯ã©ã€ã¢ã³ãã¯ã ApiListChunking ã䜿çšããŠå€§éã®ãªãœãŒã¹ã³ã¬ã¯ã·ã§ã³ãååŸãã ããšã§ããã®ã¬ã¹ãã³ã¹ãµã€ãºãæžãããŠããŸãã Pod èµ·åæã®ã¬ã€ãã³ã·ãŒ ãã® SLO ã¯äž»ã«ãPod ã®äœæãã Pod å
ã®ã³ã³ãããå®éã«å®è¡ãéå§ãããŸã§ã«ãããæéã«é¢ä¿ããŸãããããæž¬å®ããããã«ãPod ã«èšé²ãããäœæã¿ã€ã ã¹ã¿ã³ããšããã® Pod ã® WATCH ãã³ã³ããã®èµ·åãå ±åããæå»ã®å·®ãèšç®ãããŸã (ã³ã³ããã€ã¡ãŒãžã®ãã«ãšã³ã³ããã®åæåã«ãããæéã¯é€ã)ããã® SLO ãæºããã«ã¯ãPod èµ·åã¬ã€ãã³ã·ãŒã® 1 ã¯ã©ã¹ã¿ãŒçšŒåæ¥ãããã® 99 ããŒã»ã³ã¿ã€ã«ã 5 ç§æªæºã«ããå¿
èŠããããŸãã Kubernetes SLI ã¡ããªã¯ã¹ Kubernetes ã§ã¯ããããã® SLI ãçµæçã«è¿œè·¡ãã Kubernetes ã³ã³ããŒãã³ãã« Prometheus ã¡ããªã¯ã¹ ã远å ããããšã§ãSLI ã«é¢ãããªãã¶ãŒãããªãã£ãåäžãããŠããŸãã Prometheus Query Language (PromQL) ã䜿ã£ãŠãPrometheus ã Grafana ããã·ã¥ããŒããªã©ã®ããŒã«ã§ SLI ã®ããã©ãŒãã³ã¹ãçµæçã«è¡šç€ºããã¯ãšãªãäœæã§ããŸãã以äžã¯å
è¿°ã® SLO ã®äŸã§ãã API ãµãŒããŒã®ãªã¯ãšã¹ãã¬ã€ãã³ã·ãŒ ã¡ããªã¯ã¹ å®çŸ© apiserver_request_sli_duration_seconds verbãgroupãversionãresourceãsubresourceãscopeãããã³ component ããšã®ç§åäœã®å¿çã¬ã€ãã³ã·ãŒååž (Webhook ã®æç¶æéãåªå
床ãå
¬å¹³æ§ãã¥ãŒã®åŸ
æ©æéã¯ã«ãŠã³ããããŸãã)ã apiserver_request_duration_seconds verbãdry run valueãgroupãversionãresourceãsubresourceãscopeãããã³ component ããšã®ç§åäœã®å¿çã¬ã€ãã³ã·ãŒååžã 泚 : apiserver_request_sli_duration_seconds ã¡ããªã¯ã¹ã¯ Kubernetes 1.27 ããå©çšå¯èœã«ãªããŸããã ãããã®ã¡ããªã¯ã¹ã䜿çšã㊠API ãµãŒããŒã®å¿çæéãèª¿æ» ããããKubernetes ã³ã³ããŒãã³ããä»ã®ãã©ã°ã€ã³/ã³ã³ããŒãã³ãã«ããã«ããã¯ããªããã調ã¹ããããããšãã§ããŸãããããã®ã¡ããªã¯ã¹ãæ¯èŒããããšã§ããªã¯ãšã¹ãåŠçã®é
å»¶ãã©ãã§çºçããŠããã®ããææ¡ã§ããŸãã API ãªã¯ãšã¹ãã¬ã€ãã³ã·ãŒ SLI â Kubernetes ã³ã³ããŒãã³ãããªã¯ãšã¹ããåŠçããŠå¿çããã®ã«ããã£ãæéã§ããSLI ã¡ããªã¯ã¹ã¯ããªã¯ãšã¹ãã API åªå
床ãå
¬å¹³æ§ã®ãã¥ãŒ ã§åŸ
æ©ããŠããæéãããã³ Admission Webhook ããã®ä»ã® Kubernetes æ¡åŒµæ©èœã§ã®åŠçã«è²»ããããæéãé€å€ããããšã§ãKubernetes ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã«é¢ããã€ã³ãµã€ããæäŸããŸãã API ãªã¯ãšã¹ãåèšã¬ã€ãã³ã·ãŒ â åèšæéã¡ããªã¯ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã API ãµãŒããŒããã®å¿çãåŸ
ã€æéãåæ ããŠãããããããå
æ¬çãªèŠæ¹ãã§ããŸãããªã¯ãšã¹ããåä¿¡ãããŠããã¬ã¹ãã³ã¹ãéä¿¡ããããŸã§ã®æéãèšç®ãããŸããããã«ã¯ããã¹ãŠã® Webhook å®è¡æéãšãåªå
床ãšå
¬å¹³æ§ã®ãã¥ãŒã«è²»ããããæéãå«ãŸããŸãã Pod èµ·åã®ã¬ã€ãã³ã·ãŒ ã¡ããªã¯ã¹ å®çŸ© kubelet_pod_start_sli_duration_seconds ã€ã¡ãŒãžã®ãã«ãš init ã³ã³ãããŒãå®è¡ããæéãé€ããPod ãèµ·åãããŸã§ã®ç§æ°ã Pod ã®äœæã¿ã€ã ã¹ã¿ã³ãããããã¹ãŠã®ã³ã³ãããŒãèµ·åæžã¿ãšããŠå ±åãããç£èŠããããŸã§ã®æéãæž¬å®ããŸãã kubelet_pod_start_duration_seconds kubelet ãåã㊠Pod ã確èªããŠãã Pod ã®å®è¡ãéå§ããããŸã§ã®ç§æ°ãããã«ã¯ãPod ãã¹ã±ãžã¥ãŒã«ããæéãã¯ãŒã«ãŒããŒãã®ãã£ãã·ãã£ãã¹ã±ãŒã«ã¢ãŠãããæéã¯å«ãŸããŠããŸããã æ³š : kubelet_pod_start_sli_duration_seconds ã¡ããªã¯ã¹ã¯ Kubernetes 1.27 ããå©çšå¯èœã«ãªããŸããã åã®ã¯ãšãªãšåæ§ã«ããããã®ã¡ããªã¯ã¹ã䜿çšãããšãkubelet ã¢ã¯ã·ã§ã³ãšæ¯èŒããŠãããŒãã®ã¹ã±ãŒãªã³ã°ãã€ã¡ãŒãžã®ãã«ãããã³ init ã³ã³ããã Pod ã®èµ·åãé
å»¶ãããŠããæéã®é·ããææ¡ã§ããŸãã Pod èµ·åã¬ã€ãã³ã·ãŒ SLI â Pod ãäœæãããŠãããã¢ããªã±ãŒã·ã§ã³ã³ã³ãããå®è¡äžãšå ±åããããŸã§ã®æéã§ããããã«ã¯ãã¯ãŒã«ãŒããŒãã®ãã£ãã·ãã£ãå©çšå¯èœã«ãªããPod ãã¹ã±ãžã¥ãŒã«ããããŸã§ã«ãããæéãå«ãŸããŸãããã€ã¡ãŒãžããã«ããããinit ã³ã³ãããå®è¡ãããããã®ã«ãããæéã¯å«ãŸããŸããã Pod èµ·ååèšã¬ã€ãã³ã·ãŒ â kubelet ãåã㊠Pod ãèµ·åãããŸã§ã«ãããæéã§ããããã¯ãkubelet ã WATCH çµç±ã§ Pod ãåä¿¡ããæç¹ããæž¬å®ãããã®ã§ãã¯ãŒã«ãŒããŒãã®ã¹ã±ãŒãªã³ã°ãã¹ã±ãžã¥ãŒãªã³ã°ã«ãããæéã¯å«ãŸããŠããŸãããããã«ã¯ãã€ã¡ãŒãžããã«ãã init ã³ã³ãã ãèµ·åããŠå®è¡ããæéãå«ãŸããŸãã Amazon EKS ãã¹ã±ãŒã©ããªãã£ã«ã¢ãããŒãããæ¹æ³ Amazon EKS 㯠Kubernetes ã³ã³ãããŒã«ãã¬ãŒã³ã³ã³ããŒãã³ãã管çãããã®ã»ãã¥ãªãã£ãå¯çšæ§ãã¹ã±ãŒã©ããªãã£ã確ä¿ããŸãããã¢ããªã±ãŒã·ã§ã³ãæ¡åŒµæ©èœãããã³ããŒã¿ãã¬ãŒã³ã€ã³ãã©ã¹ãã©ã¯ã㣠( AWS Fargate ã䜿çšããŠããªãå Žå) ã®å¯çšæ§ãšã¹ã±ãŒã©ããªãã£ã«ã€ããŠã¯ã客æ§ã®è²¬ä»»ãšãªããŸããAmazon EKS ããŒã ã¯å®æçã«äžé£ã®å
éšè² è·ãã¹ãã宿œããŠã倿Žãæ°ãããªãªãŒã¹ã«ãã£ãŠæ¹åãããããåãããã©ãŒãã³ã¹ã¬ãã«ãç¶æãããããæ€èšŒããŠããŸãã EKS ãã¹ããã©ã¯ãã£ã¹ã¬ã€ãã®ãã¹ã±ãŒã©ããªãã£ãã»ã¯ã·ã§ã³ ã«ã¯ãã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã©ããªãã£ãåäžãããããã«å®è£
ã§ããæšå¥šäºé
ãšãã¿ãŒã³ãèšèŒãããŠããŸãã ã¢ããã¹ããªãŒã ã® Kubernetes SLO ããã³ SLI å®çŸ©ãšã®äžè²«æ§ã確ä¿ããããã«ãAmazon EKS ããŒã 㯠SIG ã¹ã±ãŒã©ããªãã£ã§å®çŸ©ãããŠããã¢ããã¹ããªãŒã ã®ã¹ã±ãŒã©ããªãã£ãã¹ãã«äœ¿çšãããŠãããã®ãšåãåºæºãé©çšã㊠Amazon EKS ã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã©ããªãã£ã枬å®ããŠããŸããããŸããŸãªãŠãŒã¹ã±ãŒã¹ãæ§æããã¹ãŠãã¹ãããããšã¯ã§ããªãããããããã®ãã¹ãã¯ãããé«åºŠãªã¯ãŒã¯ããŒããè©äŸ¡ãŸãã¯æ¯èŒããéã«äœ¿çšã§ããã¹ã±ãŒã©ããªãã£ã®ããŒã¹ã©ã€ã³ãšãªããŸãã Amazon EKS ã§ã¹ã±ãŒã©ããªãã£ãã¹ããå®è¡ããæ¹æ³ Amazon EKS ããŒã ã¯ãKubernetes ã®å
¬åŒã¹ã±ãŒã©ããªãã£ããã³ããã©ãŒãã³ã¹ãã¹ããã¬ãŒã ã¯ãŒã¯ ClusterLoader2 ã䜿çšããŠããŸããCluster Loader ã¯å®£èšåã¹ã¿ã€ã«ã®ãã¹ãã䜿çšããŠãæå®ãããèŠæš¡ãšé床㧠Kubernetes ãªããžã§ã¯ããäœæããŸã (äŸãã°ã5,000 ããŒãã§ããŒãããã 30 Pod ãå®è¡ãã1 ç§ããã 50 Pod ã®é床ã§ãªãœãŒã¹ãäœæãããããªã©)ã詳现ã«ã€ããŠã¯ã ClusterLoader2 ã® GitHub ãªããžã㪠ãåç
§ããŠãã ããã Amazon EKS ã¹ã±ãŒã©ããªãã£ãã¹ãã¯ã kubernetes/perf-tests ãªããžããªã§å®çŸ©ãããŠããæ±çšè² è·ãã¹ãèšå® ã«åºã¥ããŠããŸããAmazon EKS ã³ã³ãããŒã«ãã¬ãŒã³ãå€§èŠæš¡ãªå Žåã§ã SLO ãç¶æã§ããããã«ã5,000 ããŒãã§ãã¹ããå®è¡ããããã«èšå®ããŠããŸããKubernetes ã³ãã¥ããã£ã§ã¯ããããã¯ã©ã¹ã¿ãŒããã 5,000 ããŒããè¶
ãããš Kubernetes ã®ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããšãã ãããå€ãšããŠå®çŸ©ããŠããŸã ãããŒãæ°ã¯ãClusterLoader2 ã§ãã¹ããå®è¡ããéã®è¿œå ãã©ã¡ãŒã¿ (åå空éã®åèšæ°ãªã©) ã®èšç®ã«äœ¿çšãããŸããè² è·ãã¹ããéå§ããåã«ãã¯ã©ã¹ã¿ãŒå
ã®ããŒãã 5,000 ã«ã¹ã±ãŒã«ã¢ãŠãããŠãããŸãã è² è·ãã¹ãã§ã¯ãPodã(ReplicaSet ãš Pod ãäœæãã) DeploymentãServiceãSecret ãªã©ã®ããŸããŸãª Kubernetes ãªãœãŒã¹ã 1 ç§ããã 50 Pod ã§äœæãããKubernetes ã³ã³ãããŒã«ãã¬ãŒã³ã®ã³ã³ããŒãã³ãã«æç¶çãªè² è·ãããããŸããPrometheus ã¡ããªã¯ã¹ã¯ããªãœãŒã¹ãäœæãããŠã SLO ãæºããããŠããããšã確èªããããã«ã远å ã®è©³çްãšãšãã«ãã¹ãäžã«åéãããŸãã AWS ã®ãµãŒãã¹ã¯ã©ãŒã¿ãšèæ
®äºé
ã¯ã©ã¹ã¿ãŒã 5,000 ããŒãã«ã¹ã±ãŒã«ã¢ãŠãããã«ã¯ãAWS ã¢ã«ãŠã³ãã® ãµãŒãã¹ã¯ã©ãŒã¿ ãå¢ããå¿
èŠããããŸããããã¹ãã«å¿
èŠãªå¶éé
ç®ã以äžã®è¡šã«ç€ºããŸãããããã¯ãã¹ãã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã«ãšãã£ãŒã³ã«åãããŠå¢ããå¿
èŠããã£ãã¯ã©ãŒã¿ã§ãã EKS ãã¹ããã©ã¯ãã£ã¹ã¬ã€ã ã«ã¯ãã¯ãŒã¯ããŒãã«åœ±é¿ããå¯èœæ§ã®ãããã®ä»ã® AWS ãµãŒãã¹ã¯ã©ãŒã¿ãæ²èŒãããŠããŸãã AWS ãµãŒãã¹ã¯ã©ãŒã¿ã³ã³ãœãŒã« ãŸã㯠AWS ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ (AWS CLI) ãããååãŸãã¯ã¯ã©ãŒã¿ã³ãŒãã䜿çšããŠããããã®å¶éã®åŒãäžãããªã¯ãšã¹ãã§ããŸãã ãµãŒãã¹ ã¯ã©ãŒã¿å ã¯ã©ãŒã¿ã³ãŒã ããã©ã«ã å¢å åŸã®å€ Amazon Elastic Compute Cloud (Amazon EC2) Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances (æå€§ vCPU æ°) L-1216C47A 5 32,000 Amazon Elastic Kubernetes Service (Amazon EKS) Nodes per managed node group L-BD136A63 450 1,000 Amazon Virtual Private Cloud (Amazon VPC) Security groups per network interface L-2AFB9258 5 16 Amazon VPC IPv4 CIDR blocks per VPC L-83CA0A9D 5 20 Amazon Elastic Block Store (Amazon EBS) Storage for General Purpose SSD (gp3) volumes, in TiB L-7A658B76 50 1,100 Amazon EBS Storage for General Purpose SSD (gp2) volumes, in TiB L-D18FCD1D 50 1,100 ãŸããæ¬¡ã®è¡šã«ç€ºãã¢ã¯ã·ã§ã³ã«å¯Ÿãã Amazon Elastic Compute Cloud (Amazon EC2) ãžã®ãªã¯ãšã¹ãã«å¯Ÿå¿ãããããAWS ã¢ã«ãŠã³ãã®ã¬ãŒãå¶éãåŒãäžããŠããŸããAmazon EC2 ã®ã¬ãŒãã¹ããããªã³ã°ã®èšç®æ¹æ³ãã¢ã«ãŠã³ãã§ã®ã¬ãŒãã¹ããããªã³ã°ã®ã¢ãã¿ãªã³ã°æ¹æ³ãããã³åŒãäžãã®ãªã¯ãšã¹ãæ¹æ³ã®è©³çްã¯ã EC2 ããã¥ã¡ã³ã ã«èšèŒãããŠããŸãã 倿Žã¢ã¯ã·ã§ã³ èªã¿åãå°çšã¢ã¯ã·ã§ã³ AssignPrivateIpAddresses DescribeDhcpOptions AttachNetworkInterface DescribeInstances CreateNetworkInterface DescribeNetworkInterfaces DeleteNetworkInterface DescribeSecurityGroups DeleteTags DescribeTags DetachNetworkInterface DescribeVpcs ModifyNetworkInterfaceAttribute DescribeVolumes Amazon EKS ã¯ã©ã¹ã¿ãŒ ClusterLoader2 ãã¹ããå®è¡ããã«ã¯ãäºåã«åèš 5,000 ã®ã¯ãŒã«ãŒããŒãã«ã¹ã±ãŒã«ã¢ããããã ãããŒãžãåããŒãã°ã«ãŒã ãå«ã Amazon EKS ã¯ã©ã¹ã¿ãŒã䜿çšããŸããAmazon EKS ã¯ãã¯ã©ã¹ã¿ãŒããã®å€æ°ã®ã·ã°ãã«ã«å¿ã㊠Kubernetes ã³ã³ãããŒã«ãã¬ãŒã³ãèªåçã«ã¹ã±ãŒãªã³ã° ããŸãããã®ã¹ã±ãŒãªã³ã°ã®äžç°ãšããŠãAmazon EKS 㯠1 ç§ãããã®ã¯ãšãªæ° (QPS) ãåŠçäžãªã¯ãšã¹ãã®å¶éãªã©ãKubernetes ã³ã³ãããŒã«ãã¬ãŒã³ã³ã³ããŒãã³ãã®äžéšã®ãã©ã¡ãŒã¿ãã¹ã±ãŒãªã³ã°ããŸããAmazon EKS ã¯ã©ã¹ã¿ãŒã¯ Kubernetes ã¢ããã¹ããªãŒã ã®ãããã®ãã©ã¡ãŒã¿ã®ããã©ã«ãå€ã䜿çšããŠäœæãããAmazon EKS ãµãŒãã¹ã¯ã³ã³ãããŒã«ãã¬ãŒã³ã®ã¹ã±ãŒã«ã¢ããã«åãããŠèªåçã«å€ãå¢å ãããŸãã Kubernetes ã³ã³ããŒãã³ãã¯ãèµ·åæã«èšå®ãããå€ããã°ã«åºåããŸããKubernetes ã³ã³ããŒãã³ãã§ Amazon EKS ã³ã³ãããŒã«ãã¬ãŒã³ã®ãã° ãæå¹ã«ãªã£ãŠããå Žåã¯ã FLAG: ã§å§ãŸããã°ã¡ãã»ãŒãžãæ€çŽ¢ããŠãããã®ã¡ãã»ãŒãžã確èªã§ããŸããAmazon EKS ãç¹å®ã®ã¯ã©ã¹ã¿ãŒã¹ã±ãŒã«ã«èšå®ããæ£ç¢ºãªå€ã¯ãKubernetes ã倿Žãããããããé©åãªå€ãèŠã€ãã£ãããããšå€ããå¯èœæ§ããããŸãã ãã¹ãçšã® Amazon VPC Container Networking Interface (CNI) ãã©ã°ã€ã³ ã¯ãPod ã®éçŽçãš IP ã¢ãã¬ã¹å²ãåœãŠã®ããã©ãŒãã³ã¹ãåäžãããããã«ãIP ã¢ãã¬ã¹å²ãåœãŠã« ãã¬ãã£ãã¯ã¹å§ä»» ã䜿çšããããã«èšå®ãããŠããŸããã¯ã©ã¹ã¿ãŒã¯ãããŒãžãåããŒãã°ã«ãŒããå¹
åºãã€ã³ã¹ã¿ã³ã¹ãã¡ããªãŒã§äœ¿çšããŠããŸããã€ã³ã¹ã¿ã³ã¹ã¿ã€ãéã§ã€ã³ã¹ã¿ã³ã¹ã倿§åããããšã§ãè€æ°ã®ãã£ãã·ãã£ããŒã«ãããã£ãã·ãã£ã調éãããããªããŸãããã¹ãæ§æã§ã¯ãc5.largeãm5.largeãr5.largeãt3.largeãt3a.largeãc5a.largeãm5a.largeãr5a.large ã®ã€ã³ã¹ã¿ã³ã¹ã䜿çšã§ããŸãã ã¯ã©ã¹ã¿ãŒãã Prometheus ã¡ããªã¯ã¹ãåéãã Amazon Managed Service for Prometheus ãš Amazon Managed Grafana ã䜿çšããŠç¢ºèªããŸãã ãã¹ãã®çµæ è² è·ãã¹ãäžãClusterLoader2 ã¯ã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ãç£èŠããŸããäžèšã® SLO ãæºããããŠããªã (ã€ãŸãã1 ã€ã® Pod ãååŸãã API ãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒã® 99 ããŒã»ã³ã¿ã€ã« [p99] ã 1 ç§ä»¥äžããã£ãŠãã) å Žåããã¹ãã¯å€±æãšã¿ãªãããŸããAmazon EKS ããŒã ã¯ãããã®çµæãã¬ãã¥ãŒãã倱æãããã¹ãã調æ»ããŠå€±æã®åå ãææ¡ãããªã°ã¬ãã·ã§ã³ã察åŠãããŠããããšã確èªããŸãã è² è·ãã¹ãäžã«äœæããããªãœãŒã¹ã®ç·æ°ã¯ ClusterLoader ã®èšå® ã«ãã£ãŠæ±ºãŸããŸããè² è·ãã¹ãã§ã¯ãããŒãããã 30 Pod ãåå空éããã 100 ããŒãã§ èš 5,000 ããŒããæ³å®ããŠããŸããæ¬¡ã«ããã¹ãæ§æãšããŠãPod ã®ç·æ° (ããŒãããã 30Pod ã« 5,000 ããŒããæãããã®)ãåå空é (5,000 ããŒããåå空éããã 100 ããŒãã§å²ã£ããã®)ãããã³åå空éãããã® Pod æ°ãèšç®ããŸãã ãã¹ãã®ããŒã¯æã«ã¯ãã¯ã©ã¹ã¿ãŒå
ã® SLO ãšäºæ³ããããã£ãŒã³ãç¶æããªãããã¯ã©ã¹ã¿ãŒå
ã®ãªãœãŒã¹ã®æ°ã確èªããŠããŸãã ãªãœãŒã¹ã¿ã€ã ãã¹ãäžã«éããæå€§å€ #Nodes 5,000 #Namespaces 50 #Pods 170,000* #Pods per node 30* #Deployments 16,000 #Services 8,000 #Endpoints 8,000 #Endpoints slice count 8,000 #Secrets 16,000 #ConfigMaps 16,000 #CRDs 4 #Jobs 150 * è² è·ãã¹ãã§ã¯ãããŒãããã 30 åã®ã¢ããªã±ãŒã·ã§ã³ Pod ãå®è¡ããŸãã Pod ã®ç·æ°ã«ã¯ããã©ã°ã€ã³ãš DaemonSet ã® Pod ãå«ãŸããŸãã SLO ã¯ã¢ã¯ã·ã§ã³ãŸãã¯ãªã¯ãšã¹ããå®äºãããŸã§ã®æéã®éŸå€ãå®çŸ©ãããããKubernetes ãªãœãŒã¹ã®ç·æ°ã¯å®éã«ã¯ãããã®ãã¹ãã®æåã®æ±ºå®èŠå ã§ã¯ãªãããšã«æ³šæããŠãã ãããäŸãã°ãPod ãèµ·åãããŸã§ã®æéã®ã»ãããPod ã®ç·æ°ãããã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ãããæ·±ãææ¡ã§ããŸãã ã¯ã©ã¹ã¿ãŒã® SLO Kubernetes ã SLO ãã©ã®ããã«å®çŸ©ããŠããããAmazon EKS ãã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ãã©ã®ããã«æž¬å®ããããèŠãŠããŸãããAmazon EKS ã¯ã©ã¹ã¿ãŒããèšå®ããã©ã°ã€ã³æ¡åŒµæ©èœãããã³ã¯ãŒã¯ããŒãã§ã©ã®ããã«æ©èœããŠããããç¥ããããšæããããããŸãããæ¢åã® Amazon EKS ã¯ã©ã¹ã¿ãŒã§åãããã©ãŒãã³ã¹ãã³ãããŒã¯ã確èªããã®ã«ã5,000 ããŒãã®è² è·ãã¹ããå
šéšå®è¡ããå¿
èŠã¯ãããŸãããAmazon EKS ã¯ã©ã¹ã¿ãŒã® Kubernetes ãªãœãŒã¹ãã Prometheus ã¡ããªã¯ã¹ãåéãããšãKubernetes ã³ã³ãããŒã«ãã¬ãŒã³ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã«ã€ããŠããæ·±ãæŽå¯ãåŸãããšãã§ããŸãã䜿çšã§ããã¡ããªã¯ã¹ãš Prometheus ã¯ãšãªã®è©³çްã«ã€ããŠã¯ã EKS ãã¹ããã©ã¯ãã£ã¹ã¬ã€ãã®ãã¹ã±ãŒã©ããªãã£ãã»ã¯ã·ã§ã³ ãåç
§ããŠãã ããã SLO ã¯ã¯ã©ã¹ã¿ãŒå
ã® Kubernetes ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã«éç¹ã眮ããŠããŸãããä»ã«ã確èªã§ããã¡ããªã¯ã¹ãååšããã¯ã©ã¹ã¿ãŒã«ã€ããŠç°ãªãèŠç¹ãåŸãããããšãèæ
®ããŠãã ããã kube-state-metrics ã®ãã㪠Kubernetes ã³ãã¥ããã£ãããžã§ã¯ãã¯ãã¯ã©ã¹ã¿ãŒå
ã®åŸåããã°ããåæããã®ã«åœ¹ç«ã¡ãŸããKubernetes ã³ãã¥ããã£ã®ã³ãã¥ããã£ãã©ã°ã€ã³ããã©ã€ããŒã¯ Prometheus ã¡ããªã¯ã¹ãåºåããããšãå€ãããªãŒãã¹ã±ãŒã©ãŒãã«ã¹ã¿ã ã¹ã±ãžã¥ãŒã©ãŒãªã©ã調ã¹ãããšãã§ããŸãã Observability Best Practices ã¬ã€ã ã«ã¯ããããªãæŽå¯ãåŸãããã«äœ¿çšã§ãããã®ä»ã® Kubernetes ã¡ããªã¯ã¹ã®äŸãæ²èŒãããŠããŸãã Kubernetes ã³ãã¥ããã£ãšã®é£æºã«ã€ã㊠Amazon EKS 㯠Kubernetes ã³ãã¥ããã£ã«è²¢ç®ããŠããŸããAmazon EKS ããŒã 㯠Scalability SIG ãšååããŠã ãããã¯ãŒã¯ããã°ã©ãã³ã°ã¬ã€ãã³ã·ãŒ SLO ã®ã¹ã±ãŒã©ããªãã£ãã¹ã ã宿œããŸããããŸããAmazon EKS ããŒã 㯠Kubernetes ã³ãã¥ããã£ãšååããŠãKubernetes ã¯ã©ã¹ã¿ãŒãããããžã§ãã³ã°ããããã®ã³ãã¥ããã£ããŒã«ã§ãã kOps ã䜿çšããŠãAWS ã§ 5,000 ããŒãã®ãã¹ãã宿œããŸããããã®ãã¹ãã¯ãKubernetes ã®ã³ãŒã倿Žãããã©ãŒãã³ã¹ã«æªåœ±é¿ãåãŒããªãããšã確èªããããã«å®æçã«å®æœããããã®çµæã¯ ã³ãã¥ããã£ã®ããã©ãŒãã³ã¹ããã·ã¥ããŒã ã§ç¢ºèªã§ããŸãããããã®ã¹ã±ãŒã©ããªãã£ãã¹ãã® 1 ã€ã倱æãããšãAmazon EKS ããŒã ã«éç¥ããã調æ»ãæäŒã£ãŠããããŸãããããã®ãã¹ãã®çµæã¯ãKubernetes ã³ãã¥ããã£ã®ããã©ãŒãã³ã¹ããã·ã¥ããŒã ã§ç¢ºèªã§ããŸãã Amazon EKS ããŒã ã¯ãã¢ããã¹ããªãŒã ã® Kubernetes ã³ãã¥ããã£ãšåãããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãã¢ãã¿ãªã³ã°ããããã«ã瀟å
ã§ 5,000 ããŒãã§åãè² è·ãã¹ãã宿œããŠããŸããåããã¹ããåãèŠæš¡ã§äœ¿çšããããšã§ãAmazon EKS åºæã®ã³ã³ããŒãã³ããã¢ããã¹ããªãŒã ã® Kubernetes ãã¹ããšåãã¬ãã«ã®ããã©ãŒãã³ã¹ãç¶æã§ããããšã確èªã§ããŸãã ãã®äœæ¥ã¯åºçºç¹ã«éããŸãããKubernetes ã³ã³ãããŒã«ãã¬ãŒã³ãã¹ã±ãŒãªã³ã°ããã«åŸã£ãŠ QPS ãåŠçäžãªã¯ãšã¹ãã®ãªãã·ã§ã³ãå¢ãããªã©ãã客æ§ãå®éã®äœ¿çšã§ééããããã«ããã¯ãåé¡ã«åºã¥ã㊠Amazon EKS ã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã©ããªãã£ãåžžã«åäžãããŠããŸããAmazon EKS ã§ã¯ãããããæ¹åãã¯ã©ã¹ã¿ãŒã«èªåçã«ãããã€ããããããã¹ã±ãŒã©ããªãã£ã®åé¡ãçºçããåã«åé¿ã§ããŸãã ãŸãšã ãã®æçš¿ã§ã¯ãKubernetes ã³ãã¥ããã£ã«ãã£ãŠå®çŸ©ããã SLO ãšãAmazon EKS ãã¹ã±ãŒã©ããªãã£ããã¹ãããæ¹æ³ã«ã€ããŠèª¬æããŸããã1 ã€ã®ã¯ã©ã¹ã¿ãŒã 1,000 ããŒããŸã㯠50,000 Pod ãè¶
ããŠã¹ã±ãŒãªã³ã°ããå Žåã¯ããã²ãçžè«ãã ãããAmazon EKS ã«ã¯å€§èŠæš¡ãªã¯ã©ã¹ã¿ãŒãå®è¡ããŠããã客æ§ãããŸããå¯èœãªéãæé«ã®ããã©ãŒãã³ã¹ãæäŸããããã«ãã¯ã©ã¹ã¿ãŒã®ã¹ã±ãŒã©ããªãã£ã®åäžã«åžžã«åãçµãã§ããŸããã¹ã±ãŒãªã³ã°ã«ã€ããŠã¯ãAWS ã¢ã«ãŠã³ãããŒã (ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããŸãã¯ãã¯ãã«ã«ã¢ã«ãŠã³ããããŒãžã£ãŒ)ãAWS ãµããŒãããŒã ããŸã㯠AWS Containers Roadmap ã«åãåãããŠãã ãããKubernetes ã¯ãŒã¯ããŒããå€§èŠæš¡ã«å®è¡ããæ¹æ³ã®è©³çްã«ã€ããŠã¯ã EKS ãã¹ããã©ã¯ãã£ã¹ã¬ã€ãã®ã¹ã±ãŒã©ããªãã£ã»ã¯ã·ã§ã³ ãã芧ãã ããã æ¬èšäºã¯ Deep dive into Amazon EKS scalability testing (2024 幎 1 æ 31 æ¥å
¬é) ã翻蚳ãããã®ã§ãã翻蚳ã¯ããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã®åç°ãæ
åœããŸããã