SREã®@deeeetã§ãã
æ°ããæ©è½ãç´ æ©ããªãªã¼ã¹ããã£ã¼ãããã¯ãå¾ã¦ããã«Pivotã®æ±ºå®ãè¡ãããããã¯ãªã¹ã¯ãæãå°ããªæ¹åãç¶ç¶çã«è¡ãContinuous Deliveryã¯ã½ããã¦ã§ã¢éçºã«ããã¦é常ã«éè¦ã§ãã
ã¡ã«ã«ãªã§ã¯ãã®Continuous Deliveryã®ããã®Platformã«Spinnakerãæ¡ç¨ãå§ãã¾ãããç¾å¨ã¯ä¸»ã«kubernetesï¼k8sï¼ã¸ã®ã³ã³ããã¢ããªã±ã¼ã·ã§ã³ã®Deployã«å©ç¨ãã¦ãããæ¢ã«ããã¤ãã®æ¬çªã¢ããªã±ã¼ã·ã§ã³ãSpinnakerã«ããDeployããã¦ãã¾ãã
æ¬è¨äºã§ã¯ãªãSpinnakerãæ¡ç¨ããããSpinnakerã¨ã¯ä½ããå®éã«ã¡ã«ã«ãªã§ã©ã®ããã«Spinnakerã使ã£ã¦ããããã«ã¤ãã¦ç°¡åãªç´¹ä»ããã¾ãã
kubernetesä¸ã§ã®Deployåé¡
k8sã¸ã®ã³ã³ããã¤ã¡ã¼ã¸ã®Deployã¯é常ã«ç°¡åã§ããåç´ãªãã®ã§ããã°manifestãã¡ã¤ã«ãæ¸ãkubectl
ã³ãã³ãã使ã£ã¦apply
ããã ãã§ããæ°ããã¤ã¡ã¼ã¸ã®Deployãã¤ã¡ã¼ã¸ã®ã¿ã°ãæ¸ãæãã¦apply
ããã ãã§ããè¨å®ã«ããRolling updateãå¯è½ã§ãåé¡ãèµ·ãã£ããã¨ã®Rollbackã容æã«è¡ãã¾ãã
å°äººæ°ã§ããã°kubectl
ãç´æ¥ä½¿ãã¨ãããªãã¬ã¼ã·ã§ã³ã§åé¡ããã¾ããããããè¦æ¨¡ã大ãããªããéçºäººæ°ãå¢ãã㨠誰ãkubectl
ã³ãã³ããå®è¡ããã®ãåé¡ã«ç´é¢ãã¾ããå¤ãã®ä¼ç¤¾ã§ã¯kubectl
ã®ãããªã³ãã³ãã®æ¬çªç°å¢ã¸ã®å®è¡æ¨©éã¯SREãªã©ã¤ã³ãã©ã«é¢ãããã¼ã ã«éå®ããã¦ããã¨æãã¾ãããã®ãããªå ´åã«æ¥ã«ä½åº¦ãDeployããä½å¶ãä½ããã¨ããã¨ãSREã¸ã®ãªãã¬ã¼ã·ã§ã³ã®ä¾é ¼ãéä¸ãããã¨ã«ãªãã¾ãã
ãã®åé¡ãé¿ããã«ã¯ãCIããkubectl
ã³ãã³ããå®è¡ããããããã¯kubectl
ã³ãã³ããã©ããããChatbotãéçºããã¨ãã£ãæ¹æ³ãä¸è¬çã«ã¯èãããã¾ããã¡ã«ã«ãªã§ã¯æåã¯Chatbotãæ¡ç¨ãã¾ããï¼Golangã§Slack Interactive Messageã使ã£ãBotãæ¸ãï¼ã
åç´ã«Deployãè¡ãç¨åº¦ã§ããã°ç¬èªã®ãã¼ã«ãBotãæ§ç¯ããã®ã¯å®¹æã§ããããå®å ¨ãã¤ScalableãªDeployãç®æãã¨ãã®Chatbotããã¼ã«ã¯ä»¥ä¸ã®ãããªæ©è½ãDeployæ¦ç¥ã®å®è£ ãæ±ããããããã«ãªãã¾ãã
- åé¡ãèµ·ãã£ãã¨ãã«ããã«Rollbackãã
- Blue/Green Deployãè¡ã
- Canary Deployãè¡ã
- Integration testãå®è¡ãã
- ããã¼ã¸ã£ã¼ã®æ¿èªã®ããã¼ãæã
- QAãã¼ã ã¨é£æºãã
- …
ãããããã¡ããã¨ãå®è£ ãããã¤ã¡ã³ããç¶ããã®ã¯é常ã«å¤§å¤ã§ãã
ã¾ãç¾å¨ã¡ã«ã«ãªã§ã¯microservicesåãé²ãããã¦ãã¾ããmicroservicesåã®å©ç¹ã®1ã¤ã¨ãã¦åãã¼ã ãããããç¬ç«ãã¦Deployãè¡ãããã¨ãæãããã¾ããããã®Deployã¯åºç¤ã¨ãã¦èªååã»çµ±ä¸åããã¦ããã¹ãã§ããmicroserviceãå¢ãããã³ã«ç¬èªã®ãã¼ã«ãbotãæ¡å¼µãç¶ããã®ã¯éçãããã¾ãã
ãããã®åé¡ãèæ ®ããçµækubernetesãã¡ã¤ã³ã«ãµãã¼ããã¦ããSpinnakerã®æ¤è¨¼åã³æ¡ç¨ã«è³ãã¾ããã
Spinnakerã¨ã¯ä½ã
Spinnakerã¯OSSã®Continuous Delivery Platformã§ãããã¨ãã¨ã¯Netflixå é¨ã§éçºã»éç¨ããã¦ãã¾ãããã2014å¹´ã«Googleã¨é£æºããéçºãå§ã¾ã2015å¹´11æã«ãªã¼ãã³ã½ã¼ã¹ã¨ãã¦å ¬éããã¾ãããããã¦ãä»å¹´ï¼2017å¹´ï¼ã®6æã«ãã¼ã¸ã§ã³1.0ãå ¬éããã¾ãããMulti-cloudã«å¯¾å¿ãã¦ããGCEãEC2ãk8sã§å©ç¨ãããã¨ãã§ãã¾ãã
ã¡ã¤ã³ãã¼ã¸ã§è¿°ã¹ããã¦ããããã«Spinnakerã«ã¯å¤ãã®æ©è½ãããã¾ãããç¹ã«ç§ãç´ æ´ãããã¨æãã®ã¯ä»¥ä¸ã®2ç¹ã§ãã
- èªåDeployã«å¿ è¦ãªæ©è½ãæã£ã¦ãã
- Immutable Infrastructureãå¼·å¶ãã
èªåDeployã«å¿ è¦ãªæ©è½ãæã£ã¦ãã
Spinnakerã¯ä»¥ä¸ã®ãããªPipelineã§Deployã管çãã¾ãã
https://www.spinnaker.io/concepts/pipelines.png
Pipelineã¯Spinnakerã«ãã£ã¦æä¾ãããå種ã¹ãã¼ã¸ãé£çµãããã¨ã§æ§æãã¾ãããã®ã¹ãã¼ã¸ã«ã¯Deployã ãã§ãªããCanary Deployãå®è¡ãããæ¿èªããã¼ãå ¥ãããJenkinsã®Jobãå®è¡ãããã¨ãã£ãèªåDeployã«å¿ è¦ãªå¤ãã®æ©è½ãæã£ã¦ãã¾ããããããçµã¿åããããã¨ã§èªç±ãªDeployãå®ç¾ã§ãã¾ãã
Cloudã使ã£ãDeployã®èªååã¯å¤ãã®APIãªã¯ã¨ã¹ãã§æ§æããããã¨ã«ãªãã失æãå®å ¨ã«é¿ããã®ã¯ä¸å¯è½ã§ããèªååã§é£ããã®ã¯ã¨ã©ã¼ã«å¯¾ãããã³ããªã³ã°ãã¡ããã¨å®è£ ããä¸è²«æ§ãæ ä¿ãããã¨ã§ããSpinnakerã¯ããããä¸å¯§ã«å®è£ ããã¦ãã¾ããä¾ãã°ä»¥ä¸ã¯SpinnakerãRed/Black Deployã«ããã¦Clusterã®Disableãããã¨ãã®åOperationãå³ã«ãããã®ã§ããããããèªåã§ã¡ããã¨ãå®è£ ããã®ã¯é£ããã§ãããã
https://www.spinnaker.io/concepts/pipelines/pipeline-tasks.png
Pipelineã¯æåã§èµ·åãããã¨ãã§ãã¾ãããDocker registryã¸ã®ã¤ã¡ã¼ã¸ã®pushãcronãªã©ãããªã¬ã¼ã¨ãããã¨ãã§ãã¾ããã¾ãPipelineã®å®äºããããã¯å¤±æã«å¯¾ãã¦EmailãSlackã¸éç¥ãè¡ããã¨ãã§ãã¾ãã
San Franciscoã§è¡ããã1.0ãªãªã¼ã¹ãã¼ãã£ã«åå ã話ãèããéãã§ã¯ãNetflixã§ã¯ã¢ããªã±ã¼ã·ã§ã³ã¯ãã¡ããã®ãã¨ãKafkaãCassandraãªã©ã®DeployãJavaãªã©ã®Libraryã®ãªãªã¼ã¹ã«ãSpinnakerã使ã£ã¦ããããã§ãããããã¦ã¼ã¹ã±ã¼ã¹ã§å©ç¨ã§ãããã¨ãæå¾ ã§ãã¾ãã
ã¾ãNetflixã§ãã§ã«ä½¿ããã¦ããä»å¾ãªãªã¼ã¹ãããããªæ©è½ã¨ãã¦æå¾ æãé«ãã®ã¯Automated Canary Analysis (ACA)ã§ãï¼Can I push that? Building safer, low-risk deployments with Spinnakerã§ç´¹ä»ããã¦ãã¾ãï¼ãããã¯Canary Deployãè¡ã£ããã¨ãã¢ããªã±ã¼ã·ã§ã³ã®ã¬ã¤ãã³ã·ããã°ã®ã¨ã©ã¼ã¬ã¼ããè¨æ¸¬ããCanaryã«ç¹æ°ãã¤ããã¨ããæ©è½ã§ãããã®ç¹æ°ãè¨å®å¤ãæºããã¦ããã°ãã®ã¾ã¾Rolloutããä½ããã°Rollbackãããã¨ãã§ããããã«ãªããDeployå¾ã«éçºè ããã°ãã¡ããªã¯ã¹ãç£è¦ãã¦äºã ããªãããã¨ãã§ãã¾ãï¼Test coverageãè¨æ¸¬ãã¦Pull Requestã®Mergeã®å¯å¦ã夿ããã®ã«ä¼¼ã¦ãã¾ãï¼ã
Immutable Infrastructureãå¼·å¶ãã
https://www.spinnaker.io/concepts/clusters.png
Spinnakerã¯ããã©ã«ãã§Blue/Green ï¼Red/Blackï¼Deploymentãè¡ãä»çµã¿ããµãã¼ããã¦ãã¾ããå人çã«ä¸çªè奮ããã®ã¯ãã®ç¹ã§ãã
Blue/Green Deploymentãè¡ããã¨ã§Immutable Infrastructureãå®ç¾ãããã¨ãã§ãã¾ããImmutable Infrastructureã¨ã¯ãä¸åº¦Deployãããã¤ã³ã¹ã¿ã³ã¹ãã³ã³ããã«ã¯äºåº¦ã¨æãå ãããæ°ãã«Deployãè¡ãå ´åã¯ã¤ã³ã¹ã¿ã³ã¹ãã³ã³ãããä½ãç´ãã¨ããèãæ¹ã§ããImmutable Infrastructureãæ¡ç¨ãããã¨ã§Configuration driftãé¿ããå®å ¨ãã¤é«éãªRollbackãå®ç¾ã§ãã¾ãã
å®éã«Pipelineãä½ã£ãããã¦ã¿ãã¨ãããã¾ããããã®Immutable Infrastructureã®ææ³ã¯åæã«æ£ãã°ã£ã¦ãã¾ããä¾ãã°ä»åãã¦ãããã®ã«å¤æ´ãå ãããå ´åã¯ã¢ããªã±ã¼ã·ã§ã³ã®è¨å®ãç·¨éããã®ã§ã¯ãªãã¦Pipellineãç·¨éãã¦ãããå®è¡ããå¿ è¦ãããã¾ããæåã¯çª®å±ã«æãããã¨ããã¾ããããä»ã§ã¯å©ç¹ã®ã»ãã大ããã¨æããã¾ãã
ã¡ã«ã«ãªã§ã®Spinnakerã®äºä¾
ããã§ã¯ã¡ã«ã«ãªã«ãããSpinnakerã®å©ç¨äºä¾ãããã¤ãç´¹ä»ãã¾ãã
äºä¾1: ã¢ããªã±ã¼ã·ã§ã³ã®Deploy
Spinnakerã®ä¸»ãªå©ç¨ã¯ã³ã³ããã¢ããªã±ã¼ã·ã§ã³ã®Deployã§ããç¾å¨åãã¦ããPipelineã¯ã¨ã¦ãã·ã³ãã«ã§ãæ°ããDockerã¤ã¡ã¼ã¸ãContainer Registryã«Pushããããã¨ï¼Dockerã¤ã¡ã¼ã¸ã®ä½æã¯CIã®ã¸ã§ãã¨ãã¦èªååããã¦ãã¾ãï¼ãããªã¬ã¼ã«ã
- Pipeline1ï¼éçºç°å¢ã®k8sã¯ã©ã¹ã¿ã¸Dockerã¤ã¡ã¼ã¸ãDeployãã
- Pipeline2ï¼æ¬çªã¸ã®Deployãå®è¡ãããã®æ¿èªãæ±ãã
- Pipeline3ï¼æ¬çªç°å¢ã®k8sã¯ã©ã¹ã¿ã¸Dockerã¤ã¡ã¼ã¸ãDeployãã
ã¨ãã3ã¤ã®Pipelineã使ã£ãDeployãã¡ã¤ã³ã«ãã¦ãã¾ãã2以éã®Pipelineã¯ç´åã®Pipelineã®æåãããªã¬ã¼ã«ãã¦èµ·åããããã«ãªã£ã¦ãã¾ãã
以ä¸ã¯Spinnakerä¸ã§ã®ããããã®Pipelineã®æ§åã§ãã
Pipeline1ã¯éçºç°å¢ã®k8sã¯ã©ã¹ã¿ã¸Dockerã¤ã¡ã¼ã¸ãDeployãã¾ããDeployãæåãããç´åã¾ã§åãã¦ããã¤ã¡ã¼ã¸ã¯åé¤ãã¾ãã
Pipeline2ã¯æ¬çªã¸ã®Deployã®Pipelineï¼pipeline3ï¼ãå®è¡ãããã®æ¿èªãæ±ãã¾ãããã®éã¯Deployãæ¢ã¾ãã®ã§åä½ç¢ºèªãªã©ã®ãã¹ããå®è¡ãã¾ãã
å°æ¥çã«ã¯ããã§Integrationãã¹ããªã©ãå®è¡ã人æã«ãã確èªããªããã¦å®å ¨èªååããããããã¯QAãã¼ã ã¨é£æºãããããã¼ã¸ã£ã¼çã®æ¿èªãå¾ãããã«ãã¦ããæ éãªDeployãå®ç¾ããã¨ãã£ããã¨ãèãããã¾ãã
Pipeline3ã¯æ¬çªç°å¢ã®k8sã¯ã©ã¹ã¿ã¸Dockerã¤ã¡ã¼ã¸ãDeployãã¾ããããã®Deployã¯å°ãç¹æ®ã§ãéçºç¨ã®k8sã¯ã©ã¹ã¿ããææ°ã®ã¤ã¡ã¼ã¸ãè¦ã¤ãåºãã¦ãããDeployãã¾ããã¤ã¾ããã¹ãããããã®ã®ã¿ãæ¬çªã«åºããã¨ãã§ãã¾ãï¼ãã®æ¹å¼ã¯SpinnakerãImmutableãå¼·å¶ããããããå®ç¾ã§ãã¾ãï¼ãDeployã¯Red/Blackã«ããè¡ãããåé¡ãããã°å¤ãã¤ã¡ã¼ã¸ã«ããRollbackãããã¨ãã§ãã¾ãã
å°æ¥çã«ã¯ä»ã«ãCanaryãè¨å®ãã¦æ°ï¼ ã®ã¿ãæ°ããã¤ã¡ã¼ã¸ã«åãæ¿ãã¦æ¬çªãªã¯ã¨ã¹ãã§ãã¹ãããã¦Deployãè¦æ¥µããã¨ãã£ããã¨ãèãããã¾ãã
äºä¾2: cronã«ããBatch jobã®å®è¡
Spinnakerã¯cronã«ããããªã¬ã¼ã§Pipelineãèµ·åãããã¨ãã§ãã¾ãããã®æ©è½ã使ãBatch jobãk8sä¸ã§å®è¡ãã¦ãã¾ãã
k8sã«ã¯cron jobã®æ©è½ãããã¾ãããç¾å¨ï¼2017å¹´8æï¼ã¯Alphaæ©è½ã§ããã¡ã«ã«ãªã§ã¯ä¸»ã«Google Container Engineï¼GKEï¼ãå©ç¨ãã¦ãããGKEã§ã¯ãããã¯ã·ã§ã³ã«Alphaæ©è½ã使ããã¨ãã§ãã¾ããï¼Alphaæ©è½ã試ããã¨ã¯ã§ãã¾ãï¼ãGKEã§cron jobãå®è¡ããæ¹æ³ã¨ãã¦æç´ã«crontabã³ã³ããã§é å¼µãããããã¯GAE+PubSubãä½¿ãæ¹æ³ã試ã¿ã¾ããããSpinnakerã§ããã®ãä¸çªæ¥½ã§ããã
ã¾ãBatch jobã ãã§ã¯ãªãã¢ããªã±ã¼ã·ã§ã³ã®Deployã«ãcronããªã¬ã¼ã¯ä½¿ããå§ãã¦ãã¾ãã
Spinnakerã®Deploy
Spinnakerèªä½ã®Deployã¯halyardã¨ããå°ç¨ã®ãã¼ã«ã使ãã¾ããåºæ¬çã«ã¯å
¬å¼ããã¥ã¡ã³ãHalyard on GKE Quickstartã«å¾ã£ã以ä¸ã®æ§æã§GKEä¸ã§åããã¦ãã¾ããhalyard
ãåããå°ç¨ã®ã¤ã³ã¹ã¿ã³ã¹ãæºåãããããGKEä¸ã®åã³ã³ãã¼ãã³ããæä½ãã¦ãã¾ãã
https://www.spinnaker.io/setup/quickstart/halyard-gke/deployment.png
åºæ¬çã«ã¯1ã¤ã®Spinnakerã§å ¨æ ç¹ï¼JPã»USã»UKï¼ã®GKEã¯ã©ã¹ã¿ã¸ã®Deployãæ ã£ã¦ãã¾ãï¼ç¾å¨13ã®GKEã¯ã©ã¹ã¿ã«Deployãå®è¡ãã¦ãã¾ãï¼ããã®1ã¤Spinnakerã§å ¨ã¦ã管çããæ¹å¼ã¯Netflixã®æ¹å¼ã¨åæ§ã®æ¹å¼ã§ãã
ç£è¦ã«ã¯Prometheus + Grafanaãå©ç¨ããHalyardã®ãã¼ã¿ã®Backupã«ã¯Google Cloud Storageãå©ç¨ãã¦ãã¾ãã
Spinnakerã®èª²é¡
Spinnakerã¯é常ã«ä¾¿å©ã§ãã以ä¸ã®ãããªèª²é¡ãããã¨æãã¦ãã¾ãã
- ããã¥ã¡ã³ããååã§ãªã
- PipelineãGUIã§è¨å®ããªãã¨ãããªã
ã¾ãããã¥ã¡ã³ããååã§ã¯ããã¾ãããããã¥ã¡ã³ããå¤ããã¨ãããããã¤ãã®è¨å®ã§ãããã¾ããããã ãSlackã³ãã¥ããã£ãããããã§è³ªåããã°å¤§æµã®ãã¨ã¯è§£æ±ºããã®ã§ããã¾ã§å¤§ããªåé¡ã§ã¯ãªãã§ãããã
次ã«Pipelineã®è¨å®ã大ããªåé¡ã§ããç¾ç¶å ¨ã¦ã®è¨å®ãGUIã§è¡ããªãã¨ããã¾ããããã®ããè¨å®å¤æ´ã®ã¬ãã¥ã¼ãã§ãããã¾ãå¤ãã®Pipelineã¯ä¼¼ããã®ã«ãªãã®ã«ããããããå ±éåãé£ããã§ãã
ãã ãããã«ã¤ãã¦ã¯ã³ãã¥ããã£ã課é¡ã«æãã¦ãããããPipelineãTemplateåããããã®ããã¸ã§ã¯ããé²ãã§ãã¾ãï¼Codifying your Spinnaker Pipelines ã¾ãOSSã§ã¤ãããã Foremastã¨ãããã¼ã«ãåå¨ãã¾ãï¼ããã®ããã¸ã§ã¯ããé²ãã°Declarative Continuous Deliveryï¼DCDï¼ã¨ããæªæ¥ãè¦ãæå¾ æã¯é常ã«é«ãã§ãã
ã¾ã¨ã
æ¬è¨äºã§ã¯Spinnakerã®ç´¹ä»ãè¡ãã¾ãããSpinnakerã使ãæé«ã®Deployãå®ç¾ãéçºãã©ãã©ãå éããã¦ããã¾ãããã
ã¡ã«ã«ãªã§ã¯èªååã好ãã»k8sãã³ã³ãããã´ãªã´ãªãã£ã¦ããããSREãåéãã¦ãã¾ããèå³ãããæ¹ã¯æ¯éé£çµ¡ãä¸ããã
Software Engineer, Site Reliability
åèæç®
- Halyard on GKE Quickstart
- Public Spinnaker on GKE
- Kubernetes Source To Prod
- Scaling Spinnaker at NetflixâââThe Basics
- Can I push that? Building safer, low-risk deployments with Spinnaker
- Guest post: Multi-Cloud continuous delivery using Spinnaker at Waze
- Spinnaker: continuous delivery from first principles to production (Google Cloud Next ’17)