terraform: create ubuntu vms and install kubernetes with kubeadm
This commit is contained in:
58
kubernetes-kvm-terraform/join_command.tf
Normal file
58
kubernetes-kvm-terraform/join_command.tf
Normal file
@@ -0,0 +1,58 @@
|
||||
resource "null_resource" "kubeadm_token" {
|
||||
depends_on = [libvirt_domain.master] # or whatever your master resource is
|
||||
|
||||
provisioner "remote-exec" {
|
||||
inline = [
|
||||
"until sudo kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes; do sleep 5; done",
|
||||
"sudo kubeadm token create --print-join-command > /tmp/join-command.txt"
|
||||
]
|
||||
|
||||
connection {
|
||||
type = "ssh"
|
||||
host = local.master_ip
|
||||
user = "ubuntu"
|
||||
private_key = file("~/.ssh/id_rsa")
|
||||
timeout = "10m" # connection timeout
|
||||
}
|
||||
}
|
||||
|
||||
provisioner "local-exec" {
|
||||
command = "scp -o StrictHostKeyChecking=no ubuntu@${local.master_ip}:/tmp/join-command.txt ./join-command.txt"
|
||||
}
|
||||
}
|
||||
|
||||
data "local_file" "join_command" {
|
||||
depends_on = [null_resource.kubeadm_token]
|
||||
filename = "./join-command.txt"
|
||||
}
|
||||
|
||||
# get kubeconfig and store it locally
|
||||
resource "null_resource" "kubeconfig" {
|
||||
|
||||
provisioner "remote-exec" {
|
||||
inline = [
|
||||
"until sudo ls -la /etc/kubernetes/admin.conf; do sleep 5; done",
|
||||
"sudo cp /etc/kubernetes/admin.conf /tmp/admin.conf",
|
||||
"sudo chown $(id -u):$(id -g) /tmp/admin.conf",
|
||||
# Rewrite server address from localhost/internal to accessible IP
|
||||
"sudo sed -i 's|server: https://.*:6443|server: https://${local.master_ip}:6443|' /tmp/admin.conf"
|
||||
]
|
||||
|
||||
connection {
|
||||
type = "ssh"
|
||||
host = local.master_ip
|
||||
user = "ubuntu"
|
||||
private_key = file("~/.ssh/id_rsa")
|
||||
}
|
||||
}
|
||||
|
||||
provisioner "local-exec" {
|
||||
command = "scp -o StrictHostKeyChecking=no ubuntu@${local.master_ip}:/tmp/admin.conf ./kubeconfig"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
locals {
|
||||
# parse: kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:yyy
|
||||
join_command = trimspace(data.local_file.join_command.content)
|
||||
}
|
||||
Reference in New Issue
Block a user