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-sdk
Or 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.sh
Then, 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 login
The 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.