ã¯ããã«
1å¹´ã¶ãã§ãããã¨ã§ãã 2022å¹´12æã«ãNew Relic ã使ã£ã Kubernetes (以ä¸ããk8sãã¨ããã) ã®ç£è¦ã«ã¤ãã¦ã®è¨äºãæ¸ãã¾ããã
ä»åãNew Relicã¨k8sã絡ããã話ããããã¨æãã¾ãã
k8sã¯ã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ãã¼ã«ã§ãããèªåã¹ã±ã¼ãªã³ã°æ©è½ãããã¾ãã ãªã½ã¼ã¹ã®å¹ççãªå©ç¨ã¨ã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹ç¶æã«ä¸å¯æ¬ ãªæ©è½ã§ãã
ãã®è¨äºã§ã¯ãk8sã®èªåã¹ã±ã¼ãªã³ã°æ©è½ã®1ã¤ã§ããHorizontal Pod Autoscaler (HPA) ã®åºæ¬ãããNew Relicãå©ç¨ããå¤é¨ã¡ããªã¯ã¹ã«ããã¹ã±ã¼ãªã³ã°ã®å®è£ ã¾ã§ãç´¹ä»ãã¾ãã
- ã¯ããã«
- HPAã®åºæ¬
- ã«ã¹ã¿ã ã¡ããªã¯ã¹ã®å¿ è¦æ§
- ã¡ããªã¯ã¹ã½ãªã¥ã¼ã·ã§ã³ã®é¸æ
- New Relic ã¡ããªã¯ã¹ã¢ããã¿ã¼ã®å°å ¥ã¨è¨å®
- å®è£ çµæ
- ãããã«
HPAã®åºæ¬
HPAã¯ãæå®ããã¡ããªã¯ã¹ã«åºã¥ãã¦Podã®æ°ãèªåã§èª¿æ´ããk8sã®æ©è½ã§ãã
ï¼PodãDeploymentã¨ãã£ãk8sã®ç¨èªã«ã¤ãã¦ã¯ãªã³ã¯å ã®k8så ¬å¼ãµã¤ããã確èªãã ãããï¼
k8sã®æ¨æºã¡ããªã¯ã¹ã§ã¯ãCPUãã¡ã¢ãªã®ä½¿ç¨çãé¾å¤ãè¶ ããã¨ãã«Podã®æ°ãå¢ãããéã«ä½¿ç¨çãä¸ãã£ããæ¸ãããã¨ãããã¨ãã§ãã¾ãã
ããããæ¨æºã¡ããªã¯ã¹ã ãã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹ç¶æã«åå ¨ã«å¯¾å¿ã§ããããã§ã¯ããã¾ããã
ã«ã¹ã¿ã ã¡ããªã¯ã¹ã®å¿ è¦æ§
ä¾ãã°ãã¢ããªã±ã¼ã·ã§ã³ã®ã¢ã¯ã»ã¹æ°ãæ¥å¢ããéã«é©åã«ã¹ã±ã¼ãªã³ã°ããã«ã¯ãCPUãã¡ã¢ãªä»¥å¤ã®ææ¨ãå¿ è¦ã§ãã
ãã®ãããªå ´åãã«ã¹ã¿ã ã¡ããªã¯ã¹ã«åºã¥ãã¦ã¹ã±ã¼ãªã³ã°ã§ããããã«ããå¿ è¦ãããã¾ããããããå®ç¾ããããã«ã¯ã¡ããªã¯ã¹ã¢ããã¿ã¼ãå¿ è¦ã«ãªãã¾ãã
ã¡ããªã¯ã¹ã½ãªã¥ã¼ã·ã§ã³ã®é¸æ
ã«ã¹ã¿ã ã¡ããªã¯ã¹ã®åéã»ç®¡çã«ã¯å¤ãã®ãã¼ã«ãããã¾ãããk8så ¬å¼ããæä¾ããã¦ãããã®ã¯ãªãããã使ããã¦ããã®ã¯Prometheusã®ããã§ãã
ããããä»åã¯ãã£ãããªã®ã§New Relicãæä¾ãã¦ããã¡ããªã¯ã¹ã¢ããã¿ã¼ã使ã£ã¦ã¿ã¾ããã
New Relic ã¡ããªã¯ã¹ã¢ããã¿ã¼ã®å°å ¥ã¨è¨å®
New Relicã®ã¡ããªã¯ã¹ã¢ããã¿ã¼ãk8sã«å°å ¥ããéç¨ã¯æ¯è¼çã·ã³ãã«ã§ãã
New Relicã®å ¬å¼ããã¥ã¡ã³ãã«å°å ¥æé ãç¨æããã¦ãã¾ãã
Kubernetes を使用してインフラストラクチャを自動スケールする | New Relic Documentation
以ä¸ã®ã³ã¼ãã¯k8sã¯ã©ã¹ã¿ã¼ã¨New Relicã¨ã¼ã¸ã§ã³ãããããã¤ããããã®ãããã§ã¹ããã¡ã¤ã«ã®è©²å½ç®æãä¸é¨æç²ãããã®ã§ãã
--- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: newrelic-bundle namespace: newrelic spec: releaseName: newrelic-bundle chart: spec: chart: nri-bundle reconcileStrategy: ChartVersion sourceRef: kind: HelmRepository name: newrelic values: newrelic-k8s-metrics-adapter: lowDataMode: true personalAPIKey: "New Relicã®APIãã¼" config: accountID: "New Relicã®ã¢ã«ã¦ã³ãID" externalMetrics: requests_count: query: "SELECT COUNT(*) FROM Log SINCE 5 minutes ago"
ãrequests_countãã¨ããååã§å¤é¨ã¡ããªã¯ã¹ãå®ç¾©ãã¦ãã¾ãã
次ã«ãHPAå´ã®è¨å®ããã¾ãã
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: api-front-hpa spec: minReplicas: 1 maxReplicas: 3 metrics: - type: External external: metric: name: requests_count selector: matchLabels: proxy_upstream_name: demo1-api-service target: type: AverageValue averageValue: 50 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: demo1-api-deployment
ã¡ããªãã¯åã«å ã»ã©å®ç¾©ãããrequests_countããæå®ãã¾ãã
matchLabelsã«æå®ããKeyValueã¯ãNRQLã®WHEREæ¡ä»¶ã¨ãã¦é©ç¨ãããã®ã§ãNew Relicã«çºè¡ãããã¯ã¨ãªã¯
SELECT COUNT(*) FROM Log WHERE proxy_upstream_name = 'demo1-api-service' SINCE 5 minutes ago
ã¨ãªãããã®åå¾çµæãã¢ã¯ã»ã¹æ°ã¨ãã¾ãã
(ä»åã¯Ingress-Nginxã使ç¨ãã¦Podã¸ã®éä¿¡ãã«ã¼ãã£ã³ã°ããã¦ãããIngress-Nginxã®ãã°ãNew Relicã«é£æºãã¦ãã¾ãã
proxy_upstream_name
ã¯Ingress-Nginxã®ãã°ã®å±æ§ã®1ã¤ã§ãããPodã«ç´ã¥ãServiceã®ååãå
¥ã£ã¦ãã¾ãã
'demo1-api-service'ãæå®ãããã¨ã§ãdemo1-api-deploymentã®Podã¸ã®ã¢ã¯ã»ã¹ãã°ã®ä»¶æ°ãã¢ã¯ã»ã¹æ°ã¨ãã¦åå¾ãã¦ãã¾ãã)
targetãAverageValueã¨ãã¦ããã®ã§ãã¢ã¯ã»ã¹æ°ãPodã®æ°ã§é¤ç®ããå¤ãé¾å¤ã¨æ¯è¼ãã¦ãããã¤ã¾ã§ã¹ã±ã¼ã«ãããã決ãããã¨ãã§ãã¾ãã
ä»åã®ä¾ã§ããã¨ãaverageValueã50ã§maxReplicasã3ãªã®ã§ä»¥ä¸ã®ãããªæåã¨ãªãã¾ãã
- ç¾å¨ã®Podæ°ï¼1ãã¢ã¯ã»ã¹æ°ï¼50ãâã50÷1=50ã¨ãªããPodæ°ã2ã«å¢ãã
- ç¾å¨ã®Podæ°ï¼2ãã¢ã¯ã»ã¹æ°ï¼50ãâã50÷2=25ã¨ãªããPodæ°ã¯2ã®ã¾ã¾
- ç¾å¨ã®Podæ°ï¼2ãã¢ã¯ã»ã¹æ°ï¼100ãâã100÷2=50ã¨ãªããPodæ°ã3ã«å¢ãã
- ç¾å¨ã®Podæ°ï¼3ãã¢ã¯ã»ã¹æ°ï¼100ãâã100÷3=33ã¨ãªããPodæ°ã¯3ã®ã¾ã¾
- ç¾å¨ã®Podæ°ï¼3ãã¢ã¯ã»ã¹æ°ï¼150ãâã150÷3=50ã¨ãªãããMax=3ãªã®ã§Podæ°ã¯3ã®ã¾ã¾
å®è£ çµæ
ã¢ã¯ã»ã¹æ°ã®å¢å ã«ä¼´ããèªåçã«Podã®æ°ãå¢æ¸ããããã¨ãã§ãã¾ããã
ä»åã¯å®é¨ã¨ãã¦é¾å¤ã50ã¨ãã¾ããããå®éã®éç¨ã§ã¯ã¢ããªã±ã¼ã·ã§ã³ã®ã¢ã¯ã»ã¹ç¶æ³ããã¨ã«é¾å¤ã試è¡é¯èª¤ããå¿ è¦ãããã¾ãã
ãããã«
ä»åã¯ãNew Relicãå©ç¨ããå¤é¨ã¡ããªã¯ã¹ã«ããHPAã®å®è£ ä¾ãç´¹ä»ãã¾ããã
HPAãå©ç¨ãããã¨ã§äºæãã¬ã¢ã¯ã»ã¹éä¸ãçºçããã¨ãããèªåã§ã¹ã±ã¼ã«ãããã¨ãã§ããã®ã§ã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹ãç¶æãããã¨ãã§ãã¾ãã
æ©ä¼ãããã°Prometheusã試ãã¦ã¿ããã¨æãã¾ãã