新規 LXC の追加¶
terraform/lxcs.tf に module ブロックを追加し、plan / apply で Proxmox 上にコンテナを作成する。
事前確認
手順¶
terraform/lxcs.tfにmodule "lxc_<id>"ブロックを追加する- PR を作成し、CI の
terraform planを確認する(または手元でterraform plan) - merge 後に CI の apply で反映する(手元 apply も可)
- インベントリ を更新する
定義例(新規作成向け)¶
import 直後の既存コンテナ定義は項目が多く、新規作成では必要な項目だけを指定する。
module "lxc_310" {
source = "./modules/lxc"
node_name = "pve-03"
vm_id = 310
unprivileged = true
start_on_boot = true
disk = {
datastore_id = "local-lvm"
size = 8
}
initialization = {
hostname = "example"
dns = {
servers = ["192.168.40.1", "8.8.8.8"]
}
ip_config = {
ipv4 = {
address = "192.168.40.310/24"
gateway = "192.168.40.1"
}
}
}
memory = {
dedicated = 512
swap = 512
}
cpu = {
cores = 1
}
network_interface = {
bridge = "vmbr0"
name = "eth0"
}
operating_system = {
template_file_id = "local:vztmpl/debian-13-standard_13.1-2_amd64.tar.zst"
type = "debian"
}
}
DHCP にする場合は ip_config.ipv4.address = "dhcp" とし、gateway は省略する。
root パスワード¶
ログイン名は root である。 これは Proxmox ノードの root ではなく、コンテナの中の root である。
modules/lxc にユーザー名もパスワードも無い。
コンテナ作成時、パスワードは入らない。
ホストからコンテナへ入る pct はパスワードを使わないので、未設定のまま passwd で決められる。
pct は、そのコンテナが動いているノードで実行する。
ノードが違うと、コンテナが無いと言って失敗する。
googlehome-watch(ID 303、ノード pve-03)なら、pve-03 のシェルで次を実行する。
手元が pve-03 でないときは、TTY を割り当ててノード上で同じ pct を実行する。
passwd は新しいパスワードを二度尋ねる。
ログイン名は root のままである。
あとの terraform apply は、このパスワードを戻さない。
パスワードを入れても ssh root@<コンテナIP> が Permission denied, please try again. になることがある。
Debian テンプレートの sshd は PermitRootLogin prohibit-password が既定で、root のパスワードログインを受け付けない。
この拒否は、パスワードの一致より先に決まる。
pve-03 で実効値を見る。
prohibit-password なら、パスワードログインを許して sshd を読み直す。
pct exec 303 -- bash -c 'printf "%s\n" "PermitRootLogin yes" > /etc/ssh/sshd_config.d/permit-root-password.conf'
pct exec 303 -- systemctl reload ssh
そのあと ssh root@192.168.40.221 で、passwd で決めたパスワードを使う。
補足¶
- モジュールは
consoleにデフォルトを持つため、通常は省略してよい features.nestingをデフォルトで有効にしている- 既存コンテナを取り込む場合は 既存リソースの import を参照する