毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
以下の記事を書きました。
OpenTofuでProxmox VEのCT(Container)を起動する #ProxmoxVE - Qiita
https://qiita.com/ynott/items/b6e72981d90564f982de
そうするとだんだん欲が出るもので、OpenTofuでプロビジョニングして、同時に何かインストールしてくれるといいんじゃない?
それに動かすのならDockerで動かせるとなお良いよね!って事で、以下のような対応をしました。
- ProxmoxでCT(LXC Container)を動かす
- このCTにDockerをインストールするために「非特権コンテナー」と「nested」にする
- Dockerをremote-execでインストールする
1. ProxmoxでCT(LXC Container)を動かすOpenTofuファイル
main.tf
terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
version = "2.9.11"
}
}
}
provider "proxmox" {
pm_api_url = "https://proxmox.hogehoge.dev:8006/api2/json"
}
resource "proxmox_lxc" "ubuntu_container" {
target_node = "proxmox"
hostname = "ubuntu-22-04-lxc"
ostemplate = "local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst"
password = "your-root-password"
unprivileged = true
features {
nesting = true
}
// 基本設定
cores = 2
memory = 2048
swap = 512
onboot = true
ssh_public_keys = <<-EOT
ssh-ed25519 <公開鍵>
EOT
// ストレージ
rootfs {
storage = "local-lvm"
size = "8G"
}
// ネットワーク
network {
name = "eth0"
bridge = "vmbr0"
ip = "192.168.20.11/24"
gw = "192.168.20.1"
}
provisioner "remote-exec" {
inline = [
"apt-get update",
"apt-get install -y docker.io",
"systemctl enable docker",
"systemctl start docker"
]
connection {
type = "ssh"
user = "root"
private_key = file("~/<秘密鍵のファイルパス>")
host = split("/", self.network[0].ip)[0]
}
}
2. 非特権コンテナーでnestedにする
main.tfで以下の部分が、Dockerコンテナを動かすための指定部分です。
unprivileged = true
features {
nesting = true
}
3. Dockerをremote-execでインストールする
以下の部分が、Containerが起動した後に外からdockerをインストールします。
provisioner "remote-exec" {
inline = [
"apt-get update",
"apt-get install -y docker.io",
"systemctl enable docker",
"systemctl start docker"
]
connection {
type = "ssh"
user = "root"
private_key = file("~/<秘密鍵のファイルパス>")
host = split("/", self.network[0].ip)[0]
}
4. 適用する
tofu init
tofu plan
tofu apply
すれば起動します。
5. まとめ
ProxmoxのCTは起動も早いので便利ですね。
これで、Dockerまで動くなんて最高でしょう。
6. 参照
TerraformからAnsibleのplaybookを実行する #AWS - Qiita
https://qiita.com/hayaosato/items/ee0d6eabb7b3d0a22136#remote-exec