Following terraform best practice for bootstrapping instances, I'm working on a cloud-init
config in order to bootstrap my instance. My only need is to install a specific package.
My terraform config looks like this:
resource "google_compute_instance" "bastion" {
name = "my-first-instance"
machine_type = "n1-standard-1"
zone = "europe-west1-b"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
metadata = {
ssh-keys = "eugene:${file("/Users/eugene/.ssh/id_rsa.pub")}"
user-data = file("my_cloud_init.conf")
}
}
Following example for installing packages from cloud-init
docs, here's the contents of my_cloud_init.conf
:
#cloud-config
packages:
- kubectl
After running terraform plan -out myplan
and terraform apply myplan
, I ssh onto the node only to find kubectl
not available. Moreover, there's no evidence that cloud-init
was run or that it exists on the node:
$ which -a cloud-init
$ cat /var/log/cloud-init
cat: /var/log/cloud-init: No such file or directory
Looking for clues about usage of cloud-init
with Google Cloud Compute instances wasn't fruitful:
cloud-init
docs suggests settings user-data
to a cloud-init
config should be enough,cloud-init
tutorial, but it's for Container Optimized OS
,cloud-init
on other images, but nothing indicates cloud-init
is available on debian-cloud/debian-9
,cloud-init
.I don't mind using another image, as long as it's Debian or Ubuntu and I don't have to make an image template myself.
How to use cloud-init
with a debian-based image on Google Cloud? What am I missing?
You can use one of the following image types: Public images are provided and maintained by Google, open source communities, and third-party vendors. By default, all Google Cloud projects have access to these images and can use them to create instances. Custom images are available only to your Cloud project.
To complement answer from @norbjd, posting this for completeness:
in order to install kubectl
package that I planned initially, I had to write this cloud-init
config:
#cloud-config
bootcmd:
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
apt:
sources:
kubernetes.list:
source: "deb http://apt.kubernetes.io/ kubernetes-xenial main"
packages:
- kubectl
if you need to know which images contain which packages, these resources may be helpful:
Ubuntu:
Ubuntu Cloud Images (RELEASED)
Actual contents (example):
Debian:
List of differences between standard and cloud systems
Actual contents:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With