Os buildpacks são usados pelo Kf para transformar o código fonte de uma aplicação numa imagem executável. Os Cloud Native Buildpacks usam a API Buildpack v3 mais recente, e empresas como a VMware e a Heroku estão a adicionar ativamente suporte para a v3 aos buildpacks existentes.
O Kf suporta Buildpacks em conformidade com as versões V2 e V3 da especificação da API Buildpack.
Comparação entre os buildpacks V2 e V3
V2 Buildpacks | V3 Buildpacks | |
---|---|---|
Nomes alternativos | Buildpacks do Cloud Foundry | Cloud Native Buildpacks (CNB), imagens de criação |
Estado | A ser substituído | Atual |
Propriedade | Cloud Foundry | Buildpacks.io |
Empilhar | Partilhada pelo criador e pelo tempo de execução | Opcionalmente, diferente para o criador e o tempo de execução |
Desenvolvimento local | Não é possível | Sim, com a CLI pack |
Buildpacks personalizados | Disponível no tempo de execução | Tem de estar integrado no criador |
Ciclo de vida do pacote de compilação
Passo | Cloud Foundry | Kf com Buildpacks V2 | Kf com Buildpacks V3 |
---|---|---|---|
Localização da origem | Serviço BITS | Registo de contentores | Registo de contentores |
Localização do buildpack | BOSH/HTTP | HTTP | Registo de contentores |
Localização da pilha | BOSH | Registo de contentores | Registo de contentores |
Resultado | Droplet (binário da app sem pilha) | Imagem (gota numa pilha) | Imagem |
Tempo de execução | A gota é colada na parte superior da pilha e é executada | Executar imagem produzida | Executar imagem produzida |
O Kf produz sempre uma imagem executável completa como resultado do respetivo processo de compilação. Por outro lado, o Cloud Foundry produz partes de uma imagem executável no momento da compilação e o resto é adicionado no momento da execução.
Kf optou por seguir o modelo de produzir sempre uma imagem completa pelos seguintes motivos:
- As imagens podem ser exportadas, executadas localmente e inspecionadas estaticamente
- Melhor segurança e auditoria com ferramentas como a autorização binária
- As implementações de apps são reproduzíveis
Kf e Buildpacks
O Kf armazena a respetiva lista global de buildpacks e stacks no config-defaults
ConfigMap no kf
Namespace.
Cada espaço reflete estes buildpacks no respetivo campo de estado.
Para um espaço com o nome buildpack-docs
, pode executar o seguinte comando para ver a configuração completa do espaço:
kf space buildpack-docs
Getting Space buildpack-docs API Version: kf.dev/v1alpha1 Kind: Space Metadata: Creation Timestamp: 2020-02-14T15:09:52Z Name: buildpack-docs Self Link: /apis/kf.dev/v1alpha1/spaces/buildpack-docs UID: 0cf1e196-4f3c-11ea-91a4-42010a80008d Status: Build Config: Buildpacks V2: - Name: staticfile_buildpack URL: https://github.com/cloudfoundry/staticfile-buildpack Disabled: false - Name: java_buildpack URL: https://github.com/cloudfoundry/java-buildpack Disabled: false Stacks V2: - Image: cloudfoundry/cflinuxfs3 Name: cflinuxfs3 Stacks V3: - Build Image: cloudfoundry/cnb:cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Name: org.cloudfoundry.stacks.cflinuxfs3 Run Image: cloudfoundry/run:full-cnb
Na secção Build Config
, existem três campos a ter em atenção:
- O Buildpacks V2 contém uma lista de buildpacks compatíveis com a V2 pela ordem em que vão ser executados
- O Stacks V2 indica as stacks que podem ser escolhidas para acionar uma compilação de buildpack V2
- O Stacks V3 indica as stacks que podem ser escolhidas para acionar uma compilação de buildpack V3
Também pode listar as associações com kf stacks
:
kf stacks
Getting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04
Uma vez que as imagens de compilação da V3 já têm os respetivos buildpacks incorporados, tem de usar kf buildpacks
para obter a lista:
kf buildpacks
Getting buildpacks in Space: buildpack-docs Buildpacks for V2 stacks: Name Position URL staticfile_buildpack 0 https://github.com/cloudfoundry/staticfile-buildpack java_buildpack 1 https://github.com/cloudfoundry/java-buildpack V3 Stack: org.cloudfoundry.stacks.cflinuxfs3: Name Position Version Latest org.cloudfoundry.jdbc 0 v1.0.179 true org.cloudfoundry.jmx 1 v1.0.180 true org.cloudfoundry.go 2 v0.0.2 true org.cloudfoundry.tomcat 3 v1.1.102 true org.cloudfoundry.distzip 4 v1.0.171 true org.cloudfoundry.springboot 5 v1.1.2 true ...
Personalizar os Buildpacks V3
Pode personalizar os buildpacks disponíveis para os seus programadores criando a sua própria imagem do criador com exatamente os buildpacks aos quais devem ter acesso. Também pode usar imagens do criador publicadas por outros autores.
Use uma imagem de criador de terceiros
Pode encontrar uma lista de stacks de CNB publicadas na CLI de Buildpack pack
. No momento da redação deste artigo, o pack suggest-stacks
produz:
pack suggest-stacks
Stacks maintained by the community:
Stack ID: heroku-18 Description: The official Heroku stack based on Ubuntu 18.04 Maintainer: Heroku Build Image: heroku/pack:18-build Run Image: heroku/pack:18
Stack ID: io.buildpacks.stacks.bionic Description: A minimal Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:base-cnb Run Image: cloudfoundry/run:base-cnb
Stack ID: org.cloudfoundry.stacks.cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:full-cnb Run Image: cloudfoundry/run:full-cnb
Stack ID: org.cloudfoundry.stacks.tiny Description: A tiny Cloud Foundry stack based on Ubuntu 18.04, similar to distroless Maintainer: Cloud Foundry Build Image: cloudfoundry/build:tiny-cnb Run Image: cloudfoundry/run:tiny-cnb
Para modificar o Kf de modo a usar a pilha publicada pelo Heroku, edite o config-defaults
ConfigMap no kf
Namespace.
Adicione uma entrada à chave spaceStacksV3
da seguinte forma:
kubectl edit kfsystem kfsystem
spaceStacksV3: | - name: org.cloudfoundry.stacks.cflinuxfs3 description: A large Cloud Foundry stack based on Ubuntu 18.04 buildImage: cloudfoundry/cnb:cflinuxfs3 runImage: cloudfoundry/run:full-cnb - name: heroku-18 description: The official Heroku stack based on Ubuntu 18.04 buildImage: heroku/pack:18-build runImage: heroku/pack:18
Em seguida, execute stacks
novamente:
kf stacks
Getting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04 V3 heroku-18 heroku/pack:18-build heroku/pack:18 The official Heroku stack based on Ubuntu 18.04
Crie a sua própria imagem do criador
A CLI Buildpack pack
é usada para criar a sua própria imagem do criador. Pode seguir a documentação Trabalhar com criadores usando o create-builder
do pack
para criar a sua própria imagem do criador. Depois de criado, envie-o para um registo de contentores e adicione-o ao config-defaults
ConfigMap.
Predefinir uma hierarquia
É atribuída às apps uma pilha predefinida se não for fornecida nenhuma no respetivo manifesto. A hierarquia predefinida é a primeira na lista de hierarquias V2 ou V3. Salvo se for substituído, é escolhida uma pilha V2 para compatibilidade com o Cloud Foundry.
Pode forçar o Kf a usar uma pilha V3 em vez de uma V2 definindo o campo spaceDefaultToV3Stack
no config-defaults
ConfigMap no kf
namespace como "true"
:
kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
Esta opção também pode ser modificada por espaço, alterando a definição do campo spec.buildConfig.defaultToV3Stack
para true
ou false
. Se não estiver definido, é usado o valor do config-defaults
ConfigMap.
Valor config-defaults para spaceDefaultToV3Stack |
spec.buildConfig.defaultToV3Stack do espaço |
Conjunto predefinido |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
qualquer | false |
V2 |
qualquer | true |
V3 |