This is a quick guide to run LinuxKit on GCP. A lot of internal development and CI has used Google Cloud so the support is very good; other platforms will have similar support soon.
You have two choices for authentication with Google Cloud
- You can use Application Default Credentials
- You can use a Service Account
You need the Google Cloud SDK
installed. Either install it from the URL or view brew (on a Mac):
brew tap caskroom/cask
brew cask install google-cloud-sdkOr via source code:
curl -SsL https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-151.0.0-darwin-x86_64.tar.gz
tar xzvf google-cloud-sdk-151.0.0-darwin-x86_64.tar.gz
./google-cloud-sdk/install.shThen, set up some environment variables (adjust as needed) and login:
export CLOUDSDK_CORE_PROJECT=<GCP project>
export CLOUDSDK_COMPUTE_ZONE=europe-west1-d
gcloud auth loginThe authentication will redirect to a browser with Google login.
Also authenticate local applications with
gcloud auth application-default login
You can use this guide to create a Service Account.
Make sure to download the credentials in JSON format and store them somewhere safe.
When using linuxkit build ... to build an image, specify -format gcp to
build an image in a format that GCP will understand. For example:
linuxkit build -format gcp myprefix.yml
This will create a local myprefix.img.tar.gz compressed image file.
Do linuxkit push gcp -project myproject-1234 -bucket bucketname myprefix.img.tar.gz to upload it to the
specified bucket, and create a bootable image from the stored image.
Alternatively, you can set the project name and the bucket name using environment variables, CLOUDSDK_CORE_PROJECT and CLOUDSDK_IMAGE_BUCKET.
See the constant values defined in src/cmd/linuxkit/run_gcp.go for the complete list of the supported environment variables.
With the image created, we can now create an instance and connect to the serial port.
linuxkit run gcp -project myproject-1234 myprefix
Google Cloud offers Nested
Virtualization
as a beta feature. linuxkit supports this by pushing the image with
linuxkit push gcp -nested-virt <other options> and linuxkit run gcp -nested-virt <other options>. The push sets the appropriate license
on the image while the run argument ensures that the CPU is at least
Haswell or newer.