如何在 Google Cloud 上将 cloud-init 与基于 debian 的映像一起使用?

How to use cloud-init with a debian-based image on Google Cloud?

在 bootstrapping 实例的 terraform best practice 之后,我正在处理 cloud-init 配置以便 bootstrap 我的实例。我只需要安装一个特定的包。

我的地形配置如下所示:

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")
  }
}

按照 examplecloud-init 文档安装软件包,这里是 my_cloud_init.conf 的内容:

#cloud-config

packages:
 - kubectl

在运行宁terraform plan -out myplanterraform apply myplan之后,我ssh到节点上才发现kubectl不可用。此外,没有证据表明 cloud-init 是 运行 或者它存在于节点上:

$ which -a cloud-init
$ cat /var/log/cloud-init
cat: /var/log/cloud-init: No such file or directory

寻找有关 cloud-init 与 Google 云计算实例一起使用的线索没有结果:

我不介意使用其他映像,只要它是 Debian 或 Ubuntu,而且我不必自己制作映像模板。

如何在 Google Cloud 上使用 cloud-init 和基于 debian 的映像?我错过了什么?

cloud-init 安装在最新的(在撰写本文时)Ubuntu 18.04 LTS (ubuntu-1804-bionic-v20191002) image :

<my_user>@instance-1:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

<my_user>@instance-1:~$ which cloud-init
/usr/bin/cloud-init

您应该将 debian-cloud/debian-9 替换为 ubuntu-os-cloud/ubuntu-1804-bionic-v20191002

为了补充 from @norbjd,为了完整性张贴此内容: