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

gmi*_*ile 8 cloud-init google-compute-engine google-cloud-platform terraform

遵循用于引导实例的terraform最佳实践,我正在处理cloud-init配置以引导我的实例。我唯一的需要是安装一个特定的包。

我的 terraform 配置如下所示:

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")
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是从docs安装软件包的示例cloud-init,这是以下内容my_cloud_init.conf

#cloud-config

packages:
 - kubectl
Run Code Online (Sandbox Code Playgroud)

运行terraform plan -out myplanand 后terraform 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
Run Code Online (Sandbox Code Playgroud)

寻找有关使用cloud-initGoogle Cloud Compute 实例的线索并没有结果:

  • 文档中的“ Google Cloud Engine ”页面cloud-init建议user-datacloud-init配置进行设置就足够了,
  • 我看到一个cloud-init 教程,但它是为了Container Optimized OS
  • 一些线索有关cloud-init的其他图片,但没有证据表明cloud-init可以用debian-cloud/debian-9
  • 有“运行启动脚本”,但没有提到cloud-init.

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

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

nor*_*bjd 5

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

<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
Run Code Online (Sandbox Code Playgroud)

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


gmi*_*ile 5

为了补充@norbjd答案,发布此内容以确保完整性: