Skip to content

Commit

Permalink
feat: support bootstrap buildkit with HTTP (#1652)
Browse files Browse the repository at this point in the history
Signed-off-by: Keming <kemingyang@tensorchord.ai>
  • Loading branch information
kemingy committed Jun 14, 2023
1 parent 936b0ec commit 56406e9
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 22 deletions.
19 changes: 15 additions & 4 deletions pkg/app/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ var CommandBootstrap = &cli.Command{
sshconfig.GetPublicKeyOrPanic(), sshconfig.GetPrivateKeyOrPanic()),
Aliases: []string{"k"},
},
&cli.BoolFlag{
Name: "use-http",
Usage: "Use HTTP instead of HTTPS for the registry",
Value: false,
},
},

Action: bootstrap,
Expand Down Expand Up @@ -279,17 +284,23 @@ func buildkit(clicontext *cli.Context) error {

logrus.Debug("bootstrap the buildkitd container")
var bkClient buildkitd.Client
mirror := clicontext.String("dockerhub-mirror")
setRegistryCA := clicontext.IsSet("registry-ca-keypair")
useHTTP := clicontext.Bool("use-http")

if setRegistryCA && useHTTP {
return errors.New("cannot use both registry CA and HTTP")
}

if c.Builder == types.BuilderTypeMoby {
bkClient, err = buildkitd.NewMobyClient(clicontext.Context,
c.Builder, c.BuilderAddress, clicontext.String("dockerhub-mirror"),
clicontext.IsSet("registry-ca-keypair"))
c.Builder, c.BuilderAddress, mirror, setRegistryCA, useHTTP)
if err != nil {
return errors.Wrap(err, "failed to create moby buildkit client")
}
} else {
bkClient, err = buildkitd.NewClient(clicontext.Context,
c.Builder, c.BuilderAddress, clicontext.String("dockerhub-mirror"),
clicontext.IsSet("registry-ca-keypair"))
c.Builder, c.BuilderAddress, mirror, setRegistryCA, useHTTP)
if err != nil {
return errors.Wrap(err, "failed to create buildkit client")
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/app/prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,13 @@ func prune(clicontext *cli.Context) error {
var bkClient buildkitd.Client
if c.Builder == types.BuilderTypeMoby {
bkClient, err = buildkitd.NewMobyClient(clicontext.Context,
c.Builder, c.BuilderAddress, "", false)
c.Builder, c.BuilderAddress, "", false, false)
if err != nil {
return errors.Wrap(err, "failed to create moby buildkit client")
}
} else {
bkClient, err = buildkitd.NewClient(clicontext.Context,
c.Builder, c.BuilderAddress, "", false)
c.Builder, c.BuilderAddress, "", false, false)
if err != nil {
return errors.Wrap(err, "failed to create buildkit client")
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/builder/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,13 @@ func New(ctx context.Context, opt Options) (Builder, error) {
var cli buildkitd.Client
if c.Builder == types.BuilderTypeMoby {
cli, err = buildkitd.NewMobyClient(ctx,
c.Builder, c.BuilderAddress, "", false)
c.Builder, c.BuilderAddress, "", false, false)
if err != nil {
return nil, errors.Wrap(err, "failed to create moby buildkit client")
}
} else {
cli, err = buildkitd.NewClient(ctx,
c.Builder, c.BuilderAddress, "", false)
c.Builder, c.BuilderAddress, "", false, false)
if err != nil {
return nil, errors.Wrap(err, "failed to create buildkit client")
}
Expand Down
11 changes: 7 additions & 4 deletions pkg/buildkitd/buildkitd.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ type generalClient struct {
image string
mirror string
enableRegistryCA bool
useHTTP bool

driver types.BuilderType
socket string
Expand All @@ -75,13 +76,14 @@ type generalClient struct {
}

func NewMobyClient(ctx context.Context, driver types.BuilderType,
socket, mirror string, enableRegistryCA bool) (Client, error) {
socket, mirror string, enableRegistryCA bool, useHTTP bool) (Client, error) {
logrus.Debug("getting moby buildkit client")
c := &generalClient{
containerName: socket,
image: viper.GetString(flag.FlagBuildkitdImage),
mirror: mirror,
enableRegistryCA: enableRegistryCA,
useHTTP: useHTTP,
socket: socket,
driver: driver,
}
Expand All @@ -104,19 +106,20 @@ func NewMobyClient(ctx context.Context, driver types.BuilderType,
}),
)
if err != nil {
return nil, errors.Wrap(err, "failed to create buildkit clientt")
return nil, errors.Wrap(err, "failed to create buildkit client")
}
c.Client = bkcli
return c, nil
}

func NewClient(ctx context.Context, driver types.BuilderType,
socket, mirror string, enableRegistryCA bool) (Client, error) {
socket, mirror string, enableRegistryCA bool, useHTTP bool) (Client, error) {
c := &generalClient{
containerName: socket,
image: viper.GetString(flag.FlagBuildkitdImage),
mirror: mirror,
enableRegistryCA: enableRegistryCA,
useHTTP: useHTTP,
socket: socket,
driver: driver,
}
Expand Down Expand Up @@ -174,7 +177,7 @@ func (c *generalClient) maybeStart(ctx context.Context,

if client != nil {
if _, err := client.StartBuildkitd(ctx, c.image, c.containerName, c.mirror,
c.enableRegistryCA, runningTimeout); err != nil {
c.enableRegistryCA, c.useHTTP, runningTimeout); err != nil {
return "", err
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/driver/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
type Client interface {
// Load loads the image from the reader to the docker host.
Load(ctx context.Context, r io.ReadCloser, quiet bool) error
StartBuildkitd(ctx context.Context, tag, name, mirror string, enableRegistryCA bool, timeout time.Duration) (string, error)
StartBuildkitd(ctx context.Context, tag, name, mirror string, enableRegistryCA, useHTTP bool, timeout time.Duration) (string, error)

Exec(ctx context.Context, cname string, cmd []string) error

Expand Down
22 changes: 14 additions & 8 deletions pkg/driver/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ const buildkitdMirror = `
[registry."docker.io"]
mirrors = ["%s"]
`
const buildkitdHTTP = `
[registry."docker.io"]
http = true
`
const buildkitdCertPath = "/etc/registry"
const buildkitdRegistry = `
[registry."docker.io"]
Expand Down Expand Up @@ -186,7 +190,7 @@ func (c dockerClient) ResumeContainer(ctx context.Context, name string) (string,
}

func (c dockerClient) StartBuildkitd(ctx context.Context, tag, name, mirror string,
enableRegistryCA bool, timeout time.Duration) (string, error) {
enableRegistryCA, useHTTP bool, timeout time.Duration) (string, error) {
logger := logrus.WithFields(logrus.Fields{
"tag": tag,
"container": name,
Expand Down Expand Up @@ -218,8 +222,8 @@ func (c dockerClient) StartBuildkitd(ctx context.Context, tag, name, mirror stri
Privileged: true,
AutoRemove: true,
}
var cfg string
if mirror != "" {
var cfg string
if enableRegistryCA {
cfg = fmt.Sprintf(buildkitdRegistry, mirror)
hostConfig.Mounts = append(hostConfig.Mounts, mount.Mount{
Expand All @@ -230,13 +234,15 @@ func (c dockerClient) StartBuildkitd(ctx context.Context, tag, name, mirror stri
} else {
cfg = fmt.Sprintf(buildkitdMirror, mirror)
}
config.Entrypoint = []string{
"/bin/sh",
"-c",
fmt.Sprintf("mkdir /etc/buildkit && echo '%s' > /etc/buildkit/buildkitd.toml && buildkitd", cfg),
}
logger.Debugf("setting buildkit config: %s", cfg)
} else if useHTTP {
cfg = buildkitdHTTP
}
config.Entrypoint = []string{
"/bin/sh",
"-c",
fmt.Sprintf("mkdir /etc/buildkit && echo '%s' > /etc/buildkit/buildkitd.toml && buildkitd", cfg),
}
logger.Debugf("setting buildkit config: %s", cfg)
created, _ := c.Exists(ctx, name)
if created {
err := c.ContainerStart(ctx, name, types.ContainerStartOptions{})
Expand Down
2 changes: 1 addition & 1 deletion pkg/driver/nerdctl/nerdctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (nc *nerdctlClient) Load(ctx context.Context, r io.ReadCloser, quiet bool)
}

func (nc *nerdctlClient) StartBuildkitd(ctx context.Context, tag, name, mirror string,
enableRegistryCA bool, timeout time.Duration) (string, error) {
enableRegistryCA, useHTTP bool, timeout time.Duration) (string, error) {
logger := logrus.WithFields(logrus.Fields{
"tag": tag,
"container": name,
Expand Down

0 comments on commit 56406e9

Please sign in to comment.