2017λ…„ 1μ›” 2일뢀터 Bluemix Cloud Foundry μ—μ„œ κ·Έλ™μ•ˆ κΈ°λ‹€λ¦¬μ…¨λ˜ Diego κ°€ 곡식 아킀텍쳐가 λ©λ‹ˆλ‹€. κ·Έλ™μ•ˆ Bluemix Cloud Foundry 의 기반이 λ˜μ—ˆλ˜ Droplet Execution Agent (DEA) λ₯Ό λ’€λ‘œ ν•˜κ³ , μƒˆλ‘œμš΄ μ„±λŠ₯κ³Ό κΈ°λŠ₯의 Diego 둜 μ—…κ·Έλ ˆμ΄λ“œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Diego μ•Œμ•„λ³΄κΈ°

Diego λŠ” μƒˆλ‘œμš΄ Cloud Foundry μ•„ν‚€ν…μ³λ‘œ, IBM Bluemix 와 같은 ν΄λΌμš°λ“œ ν”Œλž«νΌμ—μ„œ μƒˆλ‘œμš΄ κΈ°λŠ₯κ³Ό ν™•μž₯성을 더할 수 있게 λ„μ™€μ€λ‹ˆλ‹€.

λ‚΄λΆ€μ μœΌλ‘œλŠ” Ruby 기반의 DEA λ₯Ό Go μ–Έμ–΄ 기반의 Diego 둜 μž¬μž‘μ„±ν•˜λ©΄μ„œ “DEA node” 아킀텍쳐λ₯Ό “Diego cell” 둜 λ³€κ²½ν•  수 μžˆμ—ˆκ³ , κΈ°μ‘΄ Linux μ—μ„œλ§Œ μš΄μ˜ν•  수 μžˆμ—ˆλ˜ Warden μ»¨ν…Œμ΄λ„ˆλ₯Ό Garden μ»¨ν…Œμ΄λ„ˆλ‘œ λ³€κ²½ν•˜μ—¬ 확정성이 λ†’μ•„μ‘ŒμŠ΅λ‹ˆλ‹€. λ˜ν•œ SSH νŒ¨ν‚€μ§€λ₯Ό μΆ”κ°€ν•˜μ—¬ 싀행쀑인 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…Œμ΄λ„ˆμ— λ°”λ‘œ 접속해볼 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 λ§ν¬μ—μ„œ DEA 와 Diego 의 차이점을 더 μ•Œμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ Diego 의 μƒˆ κΈ°λŠ₯듀을 μ μš©ν•˜κΈ° μœ„ν•΄ κΈ°μ‘΄ DEA 기반 Cloud Foundry μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μˆ˜μ •ν•  ν•„μš”λŠ” λ³„λ‘œ μ—†μ§€λ§Œ, Diego 기반으둜 ν•œλ²ˆ μž¬λ°°ν¬ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

Bluemix νΌλΈ”λ¦­μ—μ„œλŠ” 2017λ…„ 1μ›” 2일뢀터 Diego κ°€ κΈ°λ³Έ 배포 ν™˜κ²½μœΌλ‘œ κ³΅κ°œλ©λ‹ˆλ‹€. κ·Έ 전에 DEA 둜 λ°°ν¬λ˜μ—ˆλ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ·ΈλŒ€λ‘œ μœ μ§€λ˜κ³ , μƒˆλ‘œ λ°°ν¬λ˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Diego 둜 λ°°ν¬λ©λ‹ˆλ‹€. 2017λ…„ μ΄ˆλΆ€ν„°λŠ” κΈ°μ‘΄ DEA 기반으둜 λ°°ν¬λ˜μ—ˆλ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Diego 둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ²Œ λ©λ‹ˆλ‹€.

λ³€κ²½ 사항 및 μ½”λ“œ μˆ˜μ •

Diego κ°€ DEA 보닀 λ§Žμ€ 점이 κ°œμ„ λ˜μ—ˆμ§€λ§Œ, μ‚¬μš©μž μž…μž₯μ—μ„œ Diego λ₯Ό μœ„ν•΄ μ•± 자체λ₯Ό μˆ˜μ •ν•  일은 λ³„λ‘œ μ—†μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ λͺ‡ ν™˜κ²½λ³€μˆ˜κ°€ λ³€κ²½λ˜μ—ˆκΈ° λ•Œλ¬Έμ—, κΈ°μ‘΄ μ½”λ“œμ—μ„œ μ΄λŸ¬ν•œ ν™˜κ²½λ³€μˆ˜λ₯Ό μ‚¬μš©ν–ˆλ‹€λ©΄ μˆ˜μ •ν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Diego μ—μ„œλŠ” VCAP_APP_PORT, VCAP_APP_HOST ν™˜κ²½λ³€μˆ˜κ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. VCAP_APP_PORTλŠ” PORT ν™˜κ²½λ³€μˆ˜λ‘œ λŒ€μ²΄λμœΌλ©° 기본적으둜 8080 으둜 μ„€μ •λ˜λ©°, VCAP_APP_HOST λŒ€μ‹  0.0.0.0λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 node.js μ½”λ“œκ°€ μžˆμ—ˆλ‹€λ©΄,

var port = (process.env.VCAP_APP_PORT || 3000);
var host = (process.env.VCAP_APP_HOST || 'localhost');

λ‹€μŒκ³Ό 같이 λ³€κ²½ν•΄μ£Όλ©΄ DEA 와 Diego μ—μ„œ λͺ¨λ‘ λ™μž‘ν•©λ‹ˆλ‹€.

var port = (process.env.PORT || process.env.VCAP_APP_PORT || 3000);
var host = '0.0.0.0';

VCAP_APPLICATION μ‹œμŠ€ν…œ ν™˜κ²½λ³€μˆ˜λŠ” μ—¬μ „νžˆ μ‘΄μž¬ν•˜μ§€λ§Œ, instance_id, instance_index, started_at λ“± λ‚΄λΆ€μ˜ λͺ‡κ°€μ§€ ν”„λ‘œνΌν‹°κ°€ μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 쀑 INSTANCE_GUID와 INSTANCE_INDEXλŠ” μ‹œμŠ€ν…œ ν™˜κ²½λ³€μˆ˜λ‘œ μ°Έμ‘° κ°€λŠ₯ν•©λ‹ˆλ‹€.

Diego 둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ°

μœ„ 사항을 ν™•μΈν–ˆλ‹€λ©΄ μ„Έκ°€μ§€μ˜ Diego λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ‹œλ‚˜λ¦¬μ˜€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. 2017λ…„ μ΄ˆμ— λ§ˆμ΄κ·Έλ ˆμ΄μ…˜λ˜μ§€ μ•Šμ€ DEA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 순차적으둜 Diego 둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜λ©λ‹ˆλ‹€. ν™˜κ²½λ³€μˆ˜ λ¬Έμ œκ°€ μ—†λ‹€λ©΄ λͺ‡λΆ„κ°„μ˜ μˆœλ‹¨ 후에 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Diego 둜 μž¬λ°°μΉ˜λ©λ‹ˆλ‹€.
  2. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ€‘μ§€ν•œ ν›„ Diego λ₯Ό enable μ‹œν‚€κ³  λ‹€μ‹œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹œμž‘ν•©λ‹ˆλ‹€. λͺ‡λΆ„κ°„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μ§€λ˜μ§€λ§Œ, μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μƒˆλ‘œ push ν•˜μ§€ μ•Šκ³  λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    1. Diego-Enabler CLI ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.
      cf add-plugin-repo CF-Community https://plugins.cloudfoundry.org/
      cf install-plugin Diego-Enabler -r CF-Community
      
    2. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ€‘λ‹¨ν•©λ‹ˆλ‹€.
      cf stop μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
      
    3. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Diego λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
      cf enable-diego μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
      
    4. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹œμž‘ν•©λ‹ˆλ‹€.
      cf start μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
      
  3. Blue-Green 배치 방법을 μ‚¬μš©ν•˜μ—¬ λ¬΄μ€‘λ‹¨μœΌλ‘œ μƒˆ Diego μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ‹œμž‘ν•˜κ³  라우트λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
    1. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μƒˆ μ΄λ¦„μœΌλ‘œ push ν•©λ‹ˆλ‹€. μƒˆλ‘œ μž‘μ„±ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μžλ™μœΌλ‘œ Diego κ°€ μ μš©λ©λ‹ˆλ‹€.
              cf push μƒˆ_μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
              
    2. κΈ°μ‘΄ DEA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μƒˆ Diego μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 같은 라우트λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, λ•Œλ‘œλŠ” DEA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ, λ•Œλ‘œλŠ” Diego μƒˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ ‘μ†λ©λ‹ˆλ‹€. μž‘λ™μ— λ¬Έμ œκ°€ μ—†λŠ” 것을 ν™•μΈν•˜κ³  κΈ°μ‘΄ DEA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 라우트λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. CLI λŒ€μ‹  Bluemix λŒ€μ‹œλ³΄λ“œ UI μ—μ„œ μ œκ±°ν•΄λ„ λ©λ‹ˆλ‹€.

      cf unmap-route μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름 도메인 --hostname ν˜ΈμŠ€νŠΈλ„€μž„
      

    3. μ΄μ œλŠ” Diego 기반 μƒˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λͺ¨λ“  λΌμš°νŠΈμ— λŒ€ν•΄ λ™μž‘ν•˜κ²Œ λ©λ‹ˆλ‹€. 정상 λ™μž‘ 확인 ν›„, ν•„μš”μ—†μ–΄μ§„ DEA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚­μ œν•˜κ³ , 이름을 λ³€κ²½ν•©λ‹ˆλ‹€. μ—­μ‹œ CLI λŒ€μ‹  Bluemix λŒ€μ‹œλ³΄λ“œ UI μ—μ„œ μ‚­μ œ ν›„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 이름을 변경해도 λ©λ‹ˆλ‹€.
      cf delete μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
      cf rename μƒˆ_μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜_이름
      

둜그 확인

CLI 말고 Bluemix λŒ€μ‹œλ³΄λ“œμ—μ„œλ„ 둜그λ₯Ό 톡해 ν˜„μž¬ Diego κ°€ μ“°μ΄λŠ”μ§€ 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž¬μ‹œμž‘ν•˜κ±°λ‚˜ 갯수λ₯Ό λ³€κ²½ν•  λ•Œ κΈ°μ‘΄ DEA κΈ°λ°˜μ—μ„œλŠ” ν˜„μž¬ μ–΄λŠ DEA μ—μ„œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ”μ§€ λ‘œκ·Έμ— ν‘œμ‹œλ©λ‹ˆλ‹€.

API/1 Updated app with guid 09787064-cfef-4cec-abc6-123456508817 ({"state"=>"STARTED"})
DEA/8 Starting app instance (index 0) with guid 09787064-cfef-4cec-abc6-123456508817
App/0 Starting app with 'node app.js '
App/0 server starting on https://myapp.mybluemix.net

이에 λΉ„ν•΄ Diego μ—μ„œλŠ” μ‹€ν–‰λ˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ CELL λ‹¨μœ„μ—μ„œ μ‹€ν–‰λ˜λŠ” 것을 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€.

CELL/0 Creating container
CELL/0 Successfully created container
CELL/0 Starting health monitoring of container
APP/0 Starting app with 'node app.js '
APP/0 server starting on https://myapp.mybluemix.net
CELL/0 Container became healthy

참쑰 링크