master.tf 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # Clean up any existing k3s installation on the master node
  2. resource "null_resource" "k3s_cleanup_master" {
  3. # SSH 登录你的 master server
  4. connection {
  5. type = "ssh"
  6. host = var.master_ip
  7. user = "root"
  8. password = var.master_password
  9. }
  10. # 远程执行清理命令
  11. provisioner "remote-exec" {
  12. inline = [
  13. "echo -e '\\033[32mCleanup start on master node\\033[0m'",
  14. "systemctl stop k3s 2>/dev/null || true",
  15. "pkill -f k3s 2>/dev/null || true",
  16. #"rm -rf /usr/local/bin/k3s",
  17. "rm -f /etc/systemd/system/k3s.service",
  18. "rm -rf /var/lib/rancher/k3s",
  19. "rm -rf /etc/rancher/k3s",
  20. "rm -rf /root/.kube",
  21. "echo -e '\\033[32mCleanup completed on master node\\033[0m'"
  22. ]
  23. }
  24. }
  25. resource "null_resource" "k3s_install_master" {
  26. depends_on = [null_resource.k3s_cleanup_master]
  27. # SSH 登录你的 master server
  28. connection {
  29. type = "ssh"
  30. host = var.master_ip
  31. user = "root"
  32. password = var.master_password
  33. }
  34. # 远程执行命令(你原来的所有逻辑,一模一样)
  35. provisioner "remote-exec" {
  36. inline = [
  37. "echo -e '\\033[32mChecking if k3s binary exists...\\033[0m'",
  38. "if [ ! -f /usr/local/bin/k3s ]; then",
  39. " echo -e '\\033[32mDownloading k3s binary...\\033[0m'",
  40. " wget -O /usr/local/bin/k3s http://download.9981.tech/k3s-v1.35.0%2Bk3s1",
  41. " chmod +x /usr/local/bin/k3s",
  42. "else",
  43. " echo -e '\\033[33mk3s binary already exists, skipping download\\033[0m'",
  44. "fi",
  45. "echo -e '\\033[32mCreating k3s systemd service...\\033[0m'",
  46. # 关键:用 heredoc 完全避免语法错误
  47. "cat > /etc/systemd/system/k3s.service <<'EOF'",
  48. "[Unit]",
  49. "Description=Lightweight Kubernetes",
  50. "Documentation=https://k3s.io",
  51. "After=network-online.target",
  52. "[Service]",
  53. "Type=exec",
  54. "ExecStart=/usr/local/bin/k3s server --tls-san ${var.master_ip} --advertise-address ${var.master_ip} --disable=servicelb --disable=metrics-server --token=my-secret-token --https-listen-port=6443 --pause-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 --system-default-registry=registry.cn-hangzhou.aliyuncs.com",
  55. "Restart=always",
  56. "RestartSec=5s",
  57. "[Install]",
  58. "WantedBy=multi-user.target",
  59. "EOF",
  60. "systemctl daemon-reload",
  61. "systemctl enable --now k3s",
  62. "echo -e '\\033[32mK3s started successfully via systemd!\\033[0m'",
  63. ]
  64. }
  65. }
  66. resource "null_resource" "copy_token_to_workers" {
  67. depends_on = [null_resource.k3s_install_master]
  68. connection {
  69. type = "ssh"
  70. host = var.master_ip
  71. user = "root"
  72. password = var.master_password
  73. }
  74. provisioner "remote-exec" {
  75. inline = [
  76. "echo -e '\\033[32mK3s Starting copy token to workers!\\033[0m'",
  77. "timeout 300 bash -c 'while [ ! -f /var/lib/rancher/k3s/server/node-token ]; do echo waiting for k3s token...; sleep 10; done'",
  78. "sshpass -p '${var.worker_password}' scp -o StrictHostKeyChecking=no /var/lib/rancher/k3s/server/node-token root@${var.worker_ips[0]}:/root/",
  79. "sshpass -p '${var.worker_password}' scp -o StrictHostKeyChecking=no /var/lib/rancher/k3s/server/node-token root@${var.worker_ips[1]}:/root/",
  80. "echo -e '\\033[32mK3s Done copy token to workers!\\033[0m'",
  81. ]
  82. }
  83. }