Um buildpack converte o código-fonte em um executável e é usado para oferecer uma maneira simples, confiável e repetível de criar contêineres. O Kf é compatível com os pacotes de criação V2 e V3, e é importante entender as diferenças entre eles.
Buildpacks V2
A maioria dos aplicativos do Cloud Foundry já usa pacotes de criação V2. Ao usar pacotes de versão V2 com Kf, os binários do ciclo de vida e os pacotes de versão são transferidos por download e configurados nos URLs do Git. Em seguida, o Kf usa a CLI lifecycle
para executar cada buildpack no código-fonte.
Prós
- Pronto para mudanças de pipeline ou código.
Contras
- Buildpack legado substituído pela V3.
- Desempenho e confiabilidade mais fracos. O pipeline de criação do Kf requer mais E/S para os pacotes de criação V2.
- Menos recursos da comunidade.
- O Kf é compatível apenas com repositórios git OSS.
Buildpacks V3
Os pacotes de criação da V3 são um projeto da Cloud Native Computing Foundation (CNCF) com uma especificação bem definida, uma CLI (pacote) e uma comunidade em crescimento que está inovando em diferentes linguagens e frameworks. O Google Cloud também tem o próprio conjunto de buildpacks do Google Cloud.
Os pacotes de criação V3 têm dois contêineres OCI gerais:
- Imagem do builder
- Executar imagem
Imagem do builder
A imagem do builder é usada enquanto seu código-fonte está sendo integrado a um contêiner executável. A imagem tem os scripts detect
necessários e outros utilitários para compilar o código-fonte.
Executar imagem
A imagem de execução é a imagem base em que um contêiner foi criado. Isso significa que é a imagem base que será executada quando o app for executado.
Camadas
Os pacotes de criação da V3 usam camadas para compor o contêiner final. Cada buildpack incluído em um build tem a oportunidade de manipular as variáveis do sistema de arquivos e do ambiente do App. Essa abordagem de camadas permite que os pacotes de compilação sejam mais finos e genéricos.
Os buildpacks da V3 são criados em contêineres OCI. Isso exige que a imagem do builder da V3 seja armazenada em um registro de contêiner ao qual o pipeline de compilação do Kf tenha acesso. O pipeline de compilação usa a imagem do builder para aplicar os scripts subjacentes para criar o código-fonte em um contêiner executável.
Prós
- O Google permite criar e executar a imagem.
- Funciona com vários produtos do Google Cloud, como o Cloud Build.
- Comunidade de crescimento e registro de buildpack.
Contras
- Pode exigir atualizações de código/processo. Por exemplo, o buildpack Java requer código-fonte, enquanto o buildpack V2 requer um arquivo jar.
- Os pacotes de versão V3 são mais recentes e podem exigir validação adicional, já que o pacote está sendo desenvolvido pela comunidade.
Pilhas do Kf
Ver pilhas
Ao enviar um app, o pipeline de compilação determina o buildpack com base na pilha selecionada (especificada pela sinalização --stack
ou pelo manifesto).
Para ver quais pilhas estão disponíveis em um espaço primeiro, verifique se o espaço está segmentado:
kf target -s myspace
O subcomando kf stacks
pode ser usado para listar as pilhas:
kf stacks
A saída mostra as pilhas V2 e V3:
Getting stacks in Space: myspace
Version Name Build Image Run Image Description
V2 cflinuxfs3 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3@sha256:f96b6e3528185368dd6af1d9657527437cefdaa5fa135338462f68f9c9db3022 cloudfoundry/run:full-cnb@sha256:dbe17be507b1cc6ffae1e9edf02806fe0e28ffbbb89a6c7ef41f37b69156c3c2 A large Cloud Foundry stack based on Ubuntu 18.04
Configurar pilhas
A configuração da pilha pode ser atualizada editando o recurso personalizado kfsystem
:
kubectl edit kfsystem kfsystem
Este exemplo define os buildpacks do Google Cloud como uma pilha V3:
spec:
kf:
config:
spaceStacksV3:
- name: google
description: Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
buildImage: gcr.io/buildpacks/builder:v1
runImage: gcr.io/buildpacks/gcp/run:v1
Esta nova pilha agora pode ser enviada:
kf push myapp --stack google
Este exemplo configura o buildpack Ruby V2 e define os padrões do pipeline de compilação para usar pilhas V2:
spec:
kf:
config:
spaceDefaultToV3Stack: false
spaceBuildpacksV2:
- name: ruby_buildpack
url: https://github.com/cloudfoundry/ruby-buildpack
spaceStacksV2:
- name: cflinuxfs3
image: cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
Migração
Observação: no momento, esse recurso está em fase experimental e sujeito a alterações.
O Kf tem uma ferramenta de migração que pode unir um pacote de build V2. O resultado é um buildpack V3 que pode ser usado em um builder V3. O buildpack encapsulado pode ser usado em qualquer lugar onde os buildpacks V3 estejam disponíveis.
kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publish
Isso criará uma imagem de buildpack chamada gcr.io/your-project/v2-go-buildpack
. Ele pode ser usado para criar um builder seguindo os documentos disponíveis em create a builder.
Esse subcomando usa as seguintes CLIs de forma transparente:
go
git
pack
Recomendamos que você use o Editor do Cloud Shell para garantir que cada subcomando esteja disponível no caminho e na versão corretos.
Problemas conhecidos
A seguir estão recursos que ainda não funcionam com o Kf. Se uma delas for de alta prioridade, entre em contato com seu representante de vendas:
- Registros de contêiner particular para imagens do criador da V3.
- Armazenamento em cache da V3.
- Buildpacks V2 que exigem credenciais Git.