K-PaaS 로고

  • github
    K-PaaS github
    수백만명의 개발자가 Github을 사용하여 개인 프로젝트를 구축하고 비즈니스를 지원하며 오픈 소스 기술을 함께 사용합니다.
  • K-PaaS incubator
    K-PaaS Incubator
    기업들이 K-PaaS를 활용할 수 있도록 지원 하고 있습니다.
  • cloudfoundry
    Cloud Foundry
    Cloud Foundry는 기업이 애플리케이션을 쉽고 빠르게 개발하고 배포하는데 필요한 속도, 단순성 및 제어 기능을 제공합니다.
  • youtube
    Youtube
    개방형 클라우드 플랫폼 K-PaaS 관련 동영상을 지원하고 있습니다.
닫기
  1. K-PaaS 소개
  2. 아키텍처
  3. 어플리케이션 플랫폼
  4. v5.8.9

어플리케이션 플랫폼 - v5.8.9

개방형 클라우드 플랫폼 K-PaaS의 어플리케이션 플랫폼 구성도 입니다.
어플리케이션 플랫폼은 Cloud Foundry 오픈 소스를 기반으로 구성됩니다.

어플리케이션 플랫폼 Components

  • ROUTING
    • router
      • gorouter
    • tcp-router
      • tcp-router
  • AUTHEN
    TICATION
    • uaa
      • uaa
      • statsd_iniector
    • credhub
      • credhub
  • APP
    LIFECYCLE
    • api
      • cloud_controller_ng
      • ***-buildpack
      • statsd_iniector
      • file-server
      • routing-api
      • policy-server
      • policy-server-internal
      • cc-udp-forwarder
    • cc-worker
      • cloud_controller_worker
    • database
      • mysql ⁄ postgres
    • diego-api
      • cfdot
      • bbs
      • silk-controller
      • locket
      • loggr-udp-forwarder
    • scheduler
      • cfdot
      • auctioneer
      • cloud_controller_clock
      • cc_deployment_updater
      • service-discovery-controller
      • statsd_iniector
      • tps
      • ssh_proxy
      • loggr-syslog-binding-cache
      • loggr-udp-forwarder
  • APP
    STORAGE ⁄
    EXECUTION
    • diego-cell
      • bosh-dns-adapter
      • cflinuxfs3-rootfs-setup
      • garden
      • rep
      • cfdot
      • route_emitter
      • graden-cni
      • netmon
      • vxlan-policy-agent
      • silkdemon
      • silk-cni
      • loggr-udp-forwarder
    • singleton-blobstore
      • blobstore
  • MESSAGE
    • nats
      • nats
      • nats-tls
  • METRIC ⁄
    LOGGING
    • doppler
      • doppler
    • log-api
      • loggregator_trafficcountroller
      • reverse_log_proxy
      • reverse_log_proxy_gateway
    • log-cache
      • log-cache
      • log-cache-cf-auth-proxy
      • log-cache-gateway
      • log-cache-syslog-server

구성 요소의 기능 및 역할

  • 1 Router
    사용자 Http 요청 트래픽을 목적지로 라우트하는 역할을 수행합니다. 주 목적지는 Cloud Controller이나 응용애플리케이션을 실행하고 있는 Garden Container 가 됩니다. Router의 라우터 정보는 Diego가 서비스하고 있는 애플리케이션 인스턴스 정보를 Nats 에서 수신하며 Route-emitter를 통해 업데이트 받습니다. route-emitter 모듈은 Diego-Cell에 통합 되었습니다.
    Git 소스 : https://github.com/cloudfoundry/gorouter
  • 2 Tcp-Router
    사용자 Tcp요청 트래픽을 목적지로 라우트하는 역할을 수행합니다. 주 목적지는 응용애플리케이션을 실행하고 있는 Garden Container 가 됩니다. Router의 라우터 정보는 Diego가 서비스하고 있는 애플리케이션 인스턴스 정보를 Nats에서 수신하며 Route-emitter를 통해 업데이트 받습니다. route-emitter 모듈은 Diego-Cell에 통합 되었습니다.
    Git소스 : https://github.com/cloudfoundry/cf-tcp-router/
  • 3 API(Cloud Controller)
    애플리케이션 스테이징과 실행을 위한 API를 제공합니다. 빌드팩 선정, 서비스와 바인딩, 접근 인가처리와 같은 애플리케이션의 전반적인 관리를 담당합니다. 개발자가 CLI를 통해 애플리케이션을 Cloud Foundry로 전송하면 Cloud Controller 가 수신하게 되며, Cloud Controller 는 애플리케이션 바이너리를 저장 후 애플리케이션 메타 데이터 기록을 생성하고 Diego와 통신하여 Stage 상태 준비 및 애플리케이션 실행을 지시합니다. Cloud Controller는 서비스를 위해 조직, 스페이스, 서비스, 서비스 인스턴스, 사용자 역할 등의 정보 유지를 위한 데이터베이스와 애플리케이션 코드 및 빌드팩 저장 등을 위한 Blob 저장소를 유지합니다.
    Git 소스 : https://github.com/cloudfoundry/cloud_controller_ng
  • 4 UAA
    OAuth2 서버 및 로그인 서버로 동작하여 사용자 인증 관리를 제공합니다.
    Git 소스 : https://github.com/cloudfoundry/uaa
  • 5 CC-Worker
    Api에서 요청받은 Task작업(App LifeCycle등)을 BackGround에서 실행합니다.
    Git 소스 : https://github.com/cloudfoundry/cloud_controller_ng
  • 6 Scheduler(Auctioneer)
    기존 Auction이 들어간 VM으로 App Container를 어떤 Cell에 배포할지 결정합니다.
    Git 소스 : https://github.com/cloudfoundry-incubator/auctioneer
  • 7 Database
    K-PaaS의 Tennant, App, 인증정보등이 저장된 Database저장소로 Postgres/MySql로 구성되어 있다.
  • 8 Diego-cell(Rep)
    Cell을 대표하며 BBS를 통해 다양한 서비스를 수행합니다. 즉, BBS의 Task 및 ActualLRP 정보가 Cell 내의 실제하고 있는 컨테이너와 일치하는지 확인하고, BBS 내 Cell이 실재하도록 유지합니다. 특정 Cell 이 실패할 경우, Converger 가 자동으로 해당 인스턴스를 다른 Cell로 이전시킵니다. 또한 Tasks/LRP 수신을 위해 Auction 에 참여하며, Executor에 요청, Tasks/LRPs를 실행하여 컨테이너를 생성하고 컨테이너 내에서 수행될 액션을 실행합니다.
    Git 소스 : https://github.com/cloudfoundry-incubator/rep
  • 9 Diego-cell(Executor)
    컨테이너의 생성 및 컨테이너 내 액션 수행, 컨테이너 삭제를 위한 HTTP API를 제공합니다. Task 및 LRP를 구분하지 않으며, 수행 액션을 위한 Action API를 구현합니다. Executor는 Cell에서 실행중인 metron-agent로 Stdout 과 Stderr 스트림을 전송하며, 해당 스트림은 Loggregator로 전달됩니다.
    Git 소스 : https://github.com/cloudfoundry-incubator/executor
  • 10 Diego-cell(Garden)
    컨테이너 관리를 위한 플랫폼 독립적인 서버 및 클라이언트 인터페이스를 제공합니다. 인터페이스는 다음의 액션 수행을 위한 메소드를 정의합니다.
    - 컨테이너의 생성 및 삭제
    - 컨테이너의 리소스 제약 적용
    - 컨테이너에 네트워크 포트 연결 및 개발
    - 컨테이너 내부/외부로 파일 복사
    - 컨테이너 내 프로세스 실행과 Stdout 및 Stderr 데이터 스트리밍 처리
    - 컨테이너에 임의 메타데이터
    - 다운타임 없이 재배포하기 위한 컨테이너 스냅샷 생성
    현재 Garden 인터페이스를 구현한 Linux 구현체로 Garden-linux 가 제공됩니다.
    Git 소스 : https://github.com/cloudfoundry-incubator/garden
  • 11 Diego-cell(route-emitter)
    rep로부터 실제 LRP(ActualLRP) 상태를 모니터링하여, 목표 LRP(DesiredLRP) 와 비교하여 변경이 발생한 경우 nats를 통해 Router 로 route 정보 등록/해제 요청 메시지를 보냅니다. 주기적으로 전체 라우팅 테이블을 Router로 보냅니다.
    Git 소스 : https://github.com/cloudfoundry-incubator/route-emitter
  • 12 Nats
    K-PaaS에서 실행중인 App domain 정보를 route-emitter에서 받아 router에 전달한다.
    Git 소스 : https://github.com/apcera/gnatsd
  • 13 Doppler
    Doppler는 애플리케이션 로그를 개발자에게 스트림으로 제공합니다.
    Git 소스 : https://github.com/cloudfoundry/loggregator/
  • 14 Diego-api
    기존 BBS가 실행되는 VM으로 Container가 실행되는 상태를 체크 한다.
    Git 소스 : https://github.com/cloudfoundry/bbs
  • 15 singleton-blobstore
    K-PaaS의 어플리케이션 패키지, 스테이징된 어플리케이션 droplet, 빌드팩 캐시 등이 저장된 오브제트 저장소입니다. internal 또는 external 로 구성할 수 있습니다.
    Git 소스 : https://github.com/cloudfoundry/capi-release/tree/develop/jobs/blobstore
  • 16 log-api
    어플리케이션 플랫폼 각 구성 요소에서 는 시스템 로그를 생성하고 배포된 어플리케이션에서는 앱 로그를 생성합니다.
    Loggregator 시스템은 각 구성 요소 메트릭과 앱 로그를 구조화하여 Firehose로 수집하고, Firehose의 모든 출력은 사용할 수 있고 모니터링 시스템 , 경고시스템 트리거, 사용자 행동 분석과 같은 특정 용도로 출력을 내보낼 수 있습니다.
    https://docs.cloudfoundry.org/loggregator/architecture.html
  • 17 credhub
    CredHub는 어플리케이션 플랫폼의 중앙 집중식 자격 증명 관리를 위해 설계된 구성 요소입니다. 최고 수준에서 CredHub는 자격 증명 생성, 저장, 수명주기 관리 및 액세스를 중앙 집중화하고 보호합니다.
    https://docs.cloudfoundry.org/credhub/
  • 18 log-chace
    로그 캐시를 사용하여 지정된 기간 동안의 로그 및 메트릭을 확인할 수 있습니다. 로그 캐시에는 로그 및 메트릭을 쿼리하고 필터링하는 API 엔드 포인트와 CLI 플러그인이 포함되어 있습니다.
    https://github.com/cloudfoundry/log-cache

어플리케이션 배포 흐름

12단계의 흐름 하단 상세설명 참조
  • 1개발자(사용자)는 “$ cf push” 실행한다
  • 2cf CLI (The Cloud Foundry Command Line Interface) 는 Cloud Controller 에게 어플리케이션에 대한 데이터 생성을
            요청한다.
  • 3Cloud Controller 는 어플리케이션 메타데이터 (어플리케이션 이름, 인스턴스 수, 빌드팩 등)를 저장한다.
  • 4다음 태스크를 수행한다.
    1. a. cf CLI 는 Cloud Controller 에게 어플리케이션 이름 기준으로 매칭되는 리소스를 요청한다.
    2. b. cf CLI 는 어플리케이션 소스 파일, 기존 캐싱 리소스와 다른 소스 파일을 업로드한다.
    3. c. Cloud Controller는 업로드된 파일과 캐싱 리소스를 조합하여 어플리케이션 패키지를 생성한다.
  • 5Cloud Controller는 어플리케이션 패키지를 blobstore 에 저장한다.
  • 6cf CLI는 어플리케이션 시작을 요청한다.
  • 7다음 태스크를 수행한다.
    1. a. Cloud Controller는 Diego에 스테이징을 요청한다.
    2. b. Diego는 스테이징 작업을 실행할 Diego Cell을 예약한다.
    3. c. 빌드팩 목록과 어플리케이션 빌드 팩 캐시(있는 경우)를 다운로드 한다.
    4. d. 빌드팩을 사용하여 어플리케이션을 컴파일하고 스테이징한다.
  • 8Diego Cell 은 스테이징 프로세스의 출력을 스트리밍한다. 개발자는 스테이징 단계에서의 문제 해결을 위해 출력을 확인
            할 수 있다.
  • 9다음 태스크를 수행한다.
    1. a. 컴파일되고 스테이징된 어플리케이션으로 droplet 또는 tarball을 생성한다.
    2. b. Diego Cell은 Droplet을 blobstore에 저장한다.
    3. c. 스테이징된 어플리케이션을 다음에 사용 할 수 있도록 빌드팩 캐시를 blobstore에 업로드 한다.
  • 10BBS(Diego Bulletin Board System)는 스테이징이 완료되었음을 Cloud Controller에 보고한다. 스테이징이 15분 내에
            완료되지 않으면 실패로 처리한다.
  • 11Diego 는 하나 이상의 Diego Cell에서 LRP(Long-Running Process)로 어플리케이션을 예약한다.
  • 12Diego Cell는 어플리케이션의 상태를 Cloud Controller에 보고한다.

Application이 실제 배포 시 K-PaaS의 구성요소 중 Diego cell에서의 상세

개발 완료된 소스 또는 빌드 파일 기반으로 Application 배포 시작
Application Compliation은 시작: 배포 명령 실행 다음 Diego 컨테이너 생성 다음 Application 코드 배치 다음 적합한 Buildpack찾기 다음 컴파일 진행 끝
Diego-cell에 언제든 배포가능한 Droplet 저장
Staging is Complete은 시작: Droplet Archive(Application이 동작할 수 있는 부가 요소를 모두 갖춘 형태) 다음 Blobstore에 저장 끝
사용자 Application 서비스 시작
Running an Application은 시작:Application Instance가 실행될 새로운 컨테이너 생성 요청 다음 release 스크립트 실행 다음 Application 동작 끝

오픈소스 목록

오픈소스 목록
서비스 그룹 서비스 명 오픈소스 명 라이선스 비고
Application Platform CF deployment bosh-dns Apache2.0  
bosh-dns-aliases Apache2.0  
bpm Apache2.0  
capi Apache2.0  
cf-cli Apache2.0  
cf-networking Apache2.0  
cf-smoke-tests Apache2.0  
cf-syslog-drain Apache2.0  
cflinuxfs3 Apache2.0  
credhub Apache2.0  
diego Apache2.0  
garden-runc Apache2.0  
haproxy Apache2.0  
log-cache Apache2.0  
loggregator Apache2.0  
loggregator-agent Apache2.0  
nats Apache2.0  
postgres Apache2.0  
pxc Apache2.0  
routing Apache2.0  
statsd-injector Apache2.0  
silk Apache2.0  
syslog Apache2.0  
uaa Apache2.0  
buildpack binary-buildpack Apache2.0  
dotnet-core-buildpack Apache2.0  
go-buildpack Apache2.0  
java-buildpack Apache2.0  
nginx-buildpack Apache2.0  
nodejs-buildpack Apache2.0  
php-buildpack Apache2.0  
python-buildpack Apache2.0  
r-buildpack Apache2.0  
ruby-buildpack Apache2.0  
staticfile-buildpack Apache2.0  
대화