공부하고 기록하는, 경제학과 출신 개발자의 노트

강연

Cloud Foundry Day 2022 - What's new with Paketo buildpacks? 정리

inspirit941 2022. 11. 21. 00:36
반응형

https://youtu.be/EBzgRFvkp-I

발표자

  • Ryan Moran: VMware Engineer, committee for paketo buildpacks.
  • Sophie Wigmore: Technical staff at VMware, maintainer on the paketo buildpacks.

Cloud-Native Buildpacks

Paketo Buildpacks

  • Cloud Foundry Foundation 산하 Project
  • kpack / pack을 사용해서 Docker image를 생성할 수 있도록 지원함.
  • Implementation of the Upstream cloud-native buildpack projects -> for containerizing your application.

스크린샷 2022-11-16 오후 4 05 20

 

일반적으로 애플리케이션의 Containerizing을 위해서 Dockerfile을 생성하고 관리함. Buildpack을 사용하면 소스코드만 있으면 된다.

  • 소스코드
  • 소스코드를 빌드할 플랫폼 : 소스코드와 빌드팩을 실행해서 container image를 생성하는 영역. 일종의 integration point.
    • pack: Upstream Cloud-native buildpack Project
    • kpack
  • 사용할 builder 선택
    • cloud-native buildpack implementation인 여러 빌드팩 사용 가능.
    • simplist way = paketo builder 라고 생각함
    • builder는 크게 buildpack / stack 로 구성됨.
      • buildpack : 다양한 언어로 된 소스코드를 지원할 용도
      • stack: 애플리케이션이 빌드 / 구동될 base OS. OS 레벨에서 필요한 여러 패키지 포함.
  • 소스코드 + builder -> OCI (open container initiative) Compliant / Production-Ready 컨테이너 이미지 생성.
    • 여러 개의 레이어로 구분됨. 맨 아래의 OS Layer부터 Application Dependency Layer / Application Layer까지.

 

스크린샷 2022-11-16 오후 4 22 32

 

기존 Dockerfile 문법에 매칭되는 builder 컴포넌트는 위와 같다. 간단한 Python Application으로 예를 들면

  • 맨 처음 From으로 Base OS image 정의
    • builder에서 base OS에 해당하는 Stack
  • base 이미지에 python 설치 / Python PATH 지정
    • python 언어로 쓰인 애플리케이션임을 Detect -> CPython Buildpack에서 어떤 버전을 설치하고 환경변수 지정할 것인지 결정
  • 애플리케이션에 필요한 dependency를 설치할 package manager 사용 (pip in python)
    • Pip install buildpack에서 동일한 작업 수행
    • layer caching을 지원하므로, rebuild 시 시간절약 가능
  • CMD로 애플리케이션 시작
    • Python Start Buildpack에서 작업 수행

 

위 예시에서는 크게 세 개의 빌드팩이 사용된 걸 볼 수 있음

  • Cloud Native Buildpack (CNB)은 문제해결에 자유롭게 사용할 수 있도록 모듈화되어 있음. Old School v2b 빌드팩과의 차이점이라고 함.
  • 필요한 부분 포크해서 자유롭게 커스터마이징 -> 변경된 부분만 기존 모듈을 대체해서 쓰면 된다.

 

스크린샷 2022-11-16 오후 4 33 45

 

What's New?

프로젝트 자체에 그동안 꽤 많은 발전이 있었다.

  • ubuntu 22.04 LTS 지원하도록 빌드팩 업데이트
  • Stack Creation tool
  • Reproducible build..

Alpine 이미지 사용해서 이미지 경랑화 / 빌드속도 향상 등을 근미래 목표로 잡고 있음.

 

이번에 새로 추가된 기능들을 몇 가지 소개함

스크린샷 2022-11-16 오후 4 38 06

JS Frontend WebServer buildpack 지원

자바스크립트 Frontend 애플리케이션 지원.

  • Static file buildpack 사용 가능해짐
  • 브라우저에서 실행되는 React / NextJS (NestJS? 발음 헷갈림.) 애플리케이션을 Serving 할 때.
    • 기존에는 css / asset과 nginx / httpd 설정값을 전부 bundle up -> static file declaration & push that on cloud Foundry.
    • Web Server Buildpack 사용 -> 소스코드만 있으면 됨.
      • 소스코드 detect -> install node & all the dependencies -> webserver에 serve 가능한 minified gzip bundle 생성.
    • Get rid of "static file" entirely.
      • 환경변수 두 개만 설정하면 됨. "this is a frontend javascript application", "I want you to serve with nginx"

Demo 영상으로 시연. (8:57 ~ 12:30)

 

Stack Tooling

스크린샷 2022-11-16 오후 4 46 19

Declarative Way of Specifying "What actually should go into a stack"

  • toml 파일에 base image / dependency needed 를 정의하면 Build image / Run image를 생성해준다.
  • M1 / M2 맥 쓰는 사람들을 위한 ARM64도 지원 예정

 

스크린샷 2022-11-16 오후 4 46 27

 

What is a Stack?

Stack은 build image / run image 두 개의 이미지로 구성됨.

  • 둘 다 Base OS 이미지를 가지고 있음. paketo에서는 ubuntu bionic / jammy 지원.
  • base OS image 위에, 각 이미지 동작에 필요한 package layer가 있음.
    • build image: 소스코드 컴파일 / 빌드에는 필요하지만 애플리케이션 동작에는 불필요한 packages가 포함됨. i.e. gcc
    • run image: runtime 시점에 필요로 하는 packages

 

Demo - Stack creating process (15:11 ~ 19:05)

스크린샷 2022-11-16 오후 5 15 38

간단한 stack 생성하기

  • 간단한 go 애플리케이션 (jammy-tiny-stack 디렉토리)
    • /stack 디렉토리를 보면 build.Dockerfile, run.Dockerfile, stack.toml 파일이 있다.

 

stack.toml 파일을 확인해보면

스크린샷 2022-11-16 오후 5 17 46

 

스크린샷 2022-11-16 오후 5 18 07

[build] 가 build image 영역. 아래의 내용이 정의되어 있다.

  • 어떤 dockerfile을 쓸 것인지
  • base OS는 무엇인지
  • 필요한 packages는 어떤 것들인지

 

스크린샷 2022-11-16 오후 5 18 15

[run] 이 run image 영역. build와 비슷한 구조이고, args에 있는 packages가 build보다 확연히 적다.

 

스크린샷 2022-11-16 오후 5 21 54

build.Dockerfile 내부.

  • ubuntu jammy로 image 설정
  • install packages / setup labels / cleanup 명령어들.

 

스크린샷 2022-11-16 오후 5 24 23

jam 이라는 cli로 stack을 cli로도 구성할 수 있다.

  • build output, run output cli로 지정해서 oci output을 만들 수 있음.
  • 만들어진 oci 이미지는 container registry에 등록하거나, docker run으로 실행해서 볼 수 있음.

 

SBOM Support

스크린샷 2022-11-16 오후 5 26 31

 

Secure Software Supply Chain을 지원하기 위해서는 SBOM Suppport 여부가 중요했는데, paketo buildpack에서 이제 지원함.

  • internally use Anchore's Syft library to generate the SBOM during the build.
    • Can access to the build time / dependencies -> source code scanning 중이거나 final app image만으로는 이 정보를 볼 수 없음
  • CycloneDX, SPDX, Syft Schema를 지원한다고 함

Demo (20:00 ~ 24:37)

커뮤니티 / 프로덕트 자랑

스크린샷 2022-11-16 오후 5 33 27

 

우리 커뮤니티 활발하다

 

스크린샷 2022-11-16 오후 5 33 32

 

우리 프로덕트 많이 쓴다. knative functions에서 paketo buildpack 쓰고 있음

반응형