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

标签 google-cloud-platform google-compute-engine terraform cloud-init

关注地形 best practice对于引导实例,我正在处理 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")
  }
}

关注 example用于安装来自 cloud-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 Cloud Compute 实例并不富有成效:
  • Google Cloud Engine” 页面来自 cloud-init文档建议设置 user-datacloud-init配置应该就够了,
  • 我看到一个 cloud-init tutorial ,但它适用于 Container Optimized OS ,
  • some clues关于 cloud-init在其他图像上,但没有任何指示 cloud-init可在 debian-cloud/debian-9 上找到,
  • 有“Running startup scripts”,但没有提到cloud-init .

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

    使用方法 cloud-init在 Google Cloud 上使用基于 debian 的镜像?我错过了什么?

    最佳答案

    补充answer来自 @norbjd ,为了完整性发布这个:

  • 为了安装kubectl我最初计划的包,我不得不写这个cloud-init配置:
    #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
    
  • 如果您需要知道哪些图像包含哪些包,这些资源可能会有所帮助:
  • Ubuntu:
  • Ubuntu Cloud Images (RELEASED)
  • 实际内容(示例):
  • https://cloud-images.ubuntu.com/releases/releases/18.04/release-20191003/ubuntu-18.04-server-cloudimg-amd64.manifest
  • Debian:
  • List of differences between standard and cloud systems
  • 实际内容:
  • https://salsa.debian.org/cloud-team/debian-cloud-images/blob/master/config_space/package_config/EXTRAS
  • https://salsa.debian.org/cloud-team/debian-cloud-images/blob/master/config_space/package_config/CLOUD
  • 关于google-cloud-platform - 如何在 Google Cloud 上将 cloud-init 与基于 debian 的镜像一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248190/

    相关文章:

    Kubernetes Ingress 负载均衡器将所有内容重写为索引;为什么?

    google-compute-engine - gCloud/GCE 磁盘大小警告 - 有意义吗?

    google-compute-engine - GCP HTTP 负载平衡中的一些 502 错误

    terraform - 导入tf文件中定义的所有资源

    python - 为什么我使用此 GCP App Engine 应用程序没有收到 DeadlineExceededError 错误?

    google-app-engine - AppEngine 部署与文件的 SHA1 总和发生冲突

    maven - 如何在 GCP 中向 dataproc 集群添加 jar 依赖?

    google-app-engine - 如何在 Google Cloud SQL 中将私有(private) IP 列入白名单?

    azure - Terraform:Azure API 管理授权 - 客户端凭据

    Terraform For 循环从 map 生成 JSON