如何在 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")
}
}
按照 example 从 cloud-init
文档安装软件包,这里是 my_cloud_init.conf
的内容:
#cloud-config
packages:
- kubectl
在运行宁terraform plan -out myplan
和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
寻找有关 cloud-init
与 Google 云计算实例一起使用的线索没有结果:
- "Google Cloud Engine" 来自
cloud-init
文档的页面建议设置 user-data
到 cloud-init
配置应该足够了,
- 我看到
cloud-init
tutorial,但它是 Container Optimized OS
,
- 在其他图片上有 some clues 关于
cloud-init
,但没有任何迹象表明 cloud-init
在 debian-cloud/debian-9
、 上可用
- 有“Running startup scripts”,但没有提到
cloud-init
。
我不介意使用其他映像,只要它是 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,为了完整性张贴此内容:
为了安装我最初计划的 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:
Debian:
在 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")
}
}
按照 example 从 cloud-init
文档安装软件包,这里是 my_cloud_init.conf
的内容:
#cloud-config
packages:
- kubectl
在运行宁terraform plan -out myplan
和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
寻找有关 cloud-init
与 Google 云计算实例一起使用的线索没有结果:
- "Google Cloud Engine" 来自
cloud-init
文档的页面建议设置user-data
到cloud-init
配置应该足够了, - 我看到
cloud-init
tutorial,但它是Container Optimized OS
, - 在其他图片上有 some clues 关于
cloud-init
,但没有任何迹象表明cloud-init
在debian-cloud/debian-9
、 上可用
- 有“Running startup scripts”,但没有提到
cloud-init
。
我不介意使用其他映像,只要它是 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
。
为了补充
为了安装我最初计划的
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:
Debian: