diff --git a/.gitignore b/.gitignore index d30131c..8304763 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,13 @@ *.tfplan cloud.tf tmp +*.tfvars + +# Exclude example.tfvars from being ignored +!example.tfvars # OS files Icon* .DS_Store -.env* \ No newline at end of file +.env* + diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 47751ee..51f0c0c 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -2,42 +2,43 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/null" { - version = "3.2.1" + version = "3.2.2" + constraints = "3.2.2" hashes = [ - "h1:ydA0/SNRVB1o95btfshvYsmxA+jZFRZcvKzZSB+4S1M=", - "zh:58ed64389620cc7b82f01332e27723856422820cfd302e304b5f6c3436fb9840", - "zh:62a5cc82c3b2ddef7ef3a6f2fedb7b9b3deff4ab7b414938b08e51d6e8be87cb", - "zh:63cff4de03af983175a7e37e52d4bd89d990be256b16b5c7f919aff5ad485aa5", - "zh:74cb22c6700e48486b7cabefa10b33b801dfcab56f1a6ac9b6624531f3d36ea3", + "h1:IMVAUHKoydFrlPrl9OzasDnw/8ntZFerCC9iXw1rXQY=", + "zh:3248aae6a2198f3ec8394218d05bd5e42be59f43a3a7c0b71c66ec0df08b69e7", + "zh:32b1aaa1c3013d33c245493f4a65465eab9436b454d250102729321a44c8ab9a", + "zh:38eff7e470acb48f66380a73a5c7cdd76cc9b9c9ba9a7249c7991488abe22fe3", + "zh:4c2f1faee67af104f5f9e711c4574ff4d298afaa8a420680b0cb55d7bbc65606", + "zh:544b33b757c0b954dbb87db83a5ad921edd61f02f1dc86c6186a5ea86465b546", + "zh:696cf785090e1e8cf1587499516b0494f47413b43cb99877ad97f5d0de3dc539", + "zh:6e301f34757b5d265ae44467d95306d61bef5e41930be1365f5a8dcf80f59452", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:79e553aff77f1cfa9012a2218b8238dd672ea5e1b2924775ac9ac24d2a75c238", - "zh:a1e06ddda0b5ac48f7e7c7d59e1ab5a4073bbcf876c73c0299e4610ed53859dc", - "zh:c37a97090f1a82222925d45d84483b2aa702ef7ab66532af6cbcfb567818b970", - "zh:e4453fbebf90c53ca3323a92e7ca0f9961427d2f0ce0d2b65523cc04d5d999c2", - "zh:e80a746921946d8b6761e77305b752ad188da60688cfd2059322875d363be5f5", - "zh:fbdb892d9822ed0e4cb60f2fedbdbb556e4da0d88d3b942ae963ed6ff091e48f", - "zh:fca01a623d90d0cad0843102f9b8b9fe0d3ff8244593bd817f126582b52dd694", + "zh:913a929070c819e59e94bb37a2a253c228f83921136ff4a7aa1a178c7cce5422", + "zh:aa9015926cd152425dbf86d1abdbc74bfe0e1ba3d26b3db35051d7b9ca9f72ae", + "zh:bb04798b016e1e1d49bcc76d62c53b56c88c63d6f2dfe38821afef17c416a0e1", + "zh:c23084e1b23577de22603cff752e59128d83cfecc2e6819edadd8cf7a10af11e", ] } provider "registry.terraform.io/telmate/proxmox" { - version = "2.9.14" - constraints = "2.9.14" + version = "3.0.1-rc3" + constraints = "3.0.1-rc3" hashes = [ - "h1:asZa5VKbWeCpLNv1JAutt5CdD27HaGFjxxcr6mvn8Ps=", - "zh:0d049d33f705e5b814d30028770c084151218439424e99684ce31d7e26a720b5", - "zh:20b1c64ed56d81de95f3f37b82b45b4654c0de26670c0e87a474c5cce13cd015", - "zh:2946058abd1d8e50e475b9ec39781eb02576b40dbd80f4653fade4493a4514c6", - "zh:29e50a25c456f040ce072f23ac57b5b82ebd3b916ca5ae6688332b5ec62adc4a", - "zh:3612932306ce5f08db94868f526cbb8c56d0d3c6ebe1c11a83f92bbf94354296", - "zh:42d1699b0abebaac82ea5a19f4393541d8bb2741bde204a8ac1028cdc29d1b14", - "zh:5ffd5dc567262eb8aafdf2f6eac63f7f21361da9c5d75a3c36b479638a0001b0", - "zh:6692ef323e3b89de99934ad731f6a1850525bf8142916ae28ea4e4048d73a787", - "zh:a5afc98e9a4038516bb58e788cb77dea67a60dce780dfcd206d7373c5a56b776", - "zh:bf902cded709d84fa27fbf91b589c241f2238a6c4924e4e479eebd74320b93a5", - "zh:cab0e1e72c9cebcf669fc6f35ec28cb8ab2dffb0237afc8860aa40d23bf8a49f", - "zh:e523b99a48beec83d9bc04b2d336266044f9f53514cefb652fe6768611847196", - "zh:f593915e8a24829d322d2eaeedcb153328cf9042f0d84f66040dde1be70ede04", - "zh:fba1aff541133e2129dfda0160369635ab48503d5c44b8407ce5922ecc15d0bd", + "h1:T4bbKkNL+iIAcGrtVv0CUnTkrBkHclX9Vc/e+t+o1l4=", + "zh:3699c41289c6fbe0f33b6c54360d43dcfba429de5fbf49506df9276d03aea915", + "zh:486c9ddda427d3fecdc6dfa189fce85c4a2aa1f490b024d636c0ac6a4dd3c692", + "zh:6091e141a0b8dcb1632c31e0f9555117bb023176c5d083f0e03441bbcf673a4e", + "zh:63d312c2c2994ed39dcb47b4d43c89990bd5fff20dbda63cddfb11c9202270f4", + "zh:6e69c70a85cfa720f543090ee3ce7d2eb2902df19657121b8b7ae64d44875d9f", + "zh:897b9f6075262fc9533f87d470217b14ae82614c6818a26b578a6d41c403d4eb", + "zh:91c24bd374fb8ee0c9e4e1c213d157139c047be78b0cafac3c4c9724db8083b0", + "zh:a224b58759314dc045fdbfc88b63b036b8ca6f75ad32606e94b553f150077c13", + "zh:a56e940c71b45e222c69a2a45388b58ed319836b922f84f62bded5b063662f4a", + "zh:b2e0a83aa535cd3493fbc7485d05d1a823c48bf487e313703f01a17edc631908", + "zh:ba0ad4fea8ba3b01c67fb164ed92fa927ac70d2d898378d192a01e818fcf6bee", + "zh:c49ebe13e7011d35d72e8e6a720df83f21c106444ef4383c5d6c0015aee55db6", + "zh:c53e2775040e103aedcce06b9acb79ca5fccdb4c578a4b6e32489c89e9c652dc", + "zh:c9002cc470ccfd8cd298d5655cf76af84b1d8a200207973d9ad80235818e89e3", ] } diff --git a/README.md b/README.md index 25c6030..9b6f912 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This project allows you to create a Kubernetes cluster on [Proxmox VE](https://p Ensure the following software versions are installed: -* [Proxmox VE](https://www.proxmox.com/en/proxmox-ve/get-started/) `7.x` and `8.0`. (>=8.1 is not supported) +* [Proxmox VE](https://www.proxmox.com/en/proxmox-ve/get-started/) `7.x` or `8.x`. * [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli/) `>=1.3.3` > Kubespray will be set up automatically. @@ -30,82 +30,80 @@ Follow these steps to use the project: 1. Clone the repo: - ```sh - $ git clone https://github.com/khanh-ph/proxmox-kubernetes.git - ``` - + ```sh + $ git clone https://github.com/khanh-ph/proxmox-kubernetes.git + ``` 2. Open the `example.tfvars` file in a text editor and update all the mandatory variables with your own values. - 3. Initialize the Terraform working directory. - ```sh - $ terraform init - ``` - + ```sh + $ terraform init + ``` 4. Generate an execution plan and review the output to ensure that the planned changes align with your expectations. - ```sh - $ terraform plan -var-file="example.tfvars" - ``` - + ```sh + $ terraform plan -var-file="example.tfvars" + ``` 5. If you're satisfied with the plan and ready to apply the changes. Run the following command: - ```sh - $ terraform apply -var-file="example.tfvars" - ``` + ```sh + $ terraform apply -var-file="example.tfvars" + ``` ## Terraform configurations The project provides several Terraform variables that allow you to customize the cluster to suit your needs. Please see the following: + ### Inputs -| Name | Description | Type | Default | Required | -|------|-------------|------|---------|:--------:| -| env\_name | The stage of the development lifecycle for the k8s cluster. Example: `prod`, `dev`, `qa`, `stage`, `test` | `string` | `"test"` | no | -| location | The city or region where the cluster is provisioned | `string` | `null` | no | -| cluster\_number | The instance count for the k8s cluster, to differentiate it from other clusters. Example: `00`, `01` | `string` | `"01"` | no | -| cluster\_domain | The cluster domain name | `string` | `"local"` | no | -| use\_legacy\_naming\_convention | Whether to use legacy naming convention for the VM and cluster name. If your cluster was provisioned using version <= 3.x, set it to `true` | `bool` | `false` | no | -| pm\_api\_url | The base URL for Proxmox VE API. See https://pve.proxmox.com/wiki/Proxmox_VE_API#API_URL | `string` | n/a | yes | -| pm\_api\_token\_id | The token ID to access Proxmox VE API. | `string` | n/a | yes | -| pm\_api\_token\_secret | The UUID/secret of the token defined in the variable `pm_api_token_id`. | `string` | n/a | yes | -| pm\_tls\_insecure | Disable TLS verification while connecting to the Proxmox VE API server. | `bool` | n/a | yes | -| pm\_host | The name of Proxmox node where the VM is placed. | `string` | n/a | yes | -| pm\_parallel | The number of simultaneous Proxmox processes. E.g: creating resources. | `number` | `2` | no | -| pm\_timeout | Timeout value (seconds) for proxmox API calls. | `number` | `600` | no | -| internal\_net\_name | Name of the internal network bridge | `string` | `"vmbr1"` | no | -| internal\_net\_subnet\_cidr | CIDR of the internal network | `string` | `"10.0.1.0/24"` | no | -| ssh\_private\_key | SSH private key in base64, will be used by Terraform client to connect to the VM after provisioning | `string` | n/a | yes | -| ssh\_public\_keys | SSH public keys in base64 | `string` | n/a | yes | -| vm\_user | The default user for all VMs | `string` | `"ubuntu"` | no | -| vm\_sockets | Number of the CPU socket to allocate to the VMs | `number` | `1` | no | -| vm\_max\_vcpus | The maximum CPU cores available per CPU socket to allocate to the VM | `number` | `2` | no | -| vm\_cpu\_type | The type of CPU to emulate in the Guest | `string` | `"host"` | no | -| vm\_os\_disk\_storage | Default storage pool where OS VM disk is placed | `string` | n/a | yes | -| add\_worker\_node\_data\_disk | Whether to add a data disk to each worker node of the cluster | `bool` | `false` | no | -| worker\_node\_data\_disk\_storage | The storage pool where the data disk is placed | `string` | `""` | no | -| worker\_node\_data\_disk\_size | The size of worker node data disk in Gigabyte | `string` | `10` | no | -| vm\_ubuntu\_tmpl\_name | Name of Cloud-init template Ubuntu VM | `string` | `"ubuntu-2204"` | no | -| bastion\_ssh\_ip | IP of the bastion host, could be either public IP or local network IP of the bastion host | `string` | `""` | no | -| bastion\_ssh\_user | The user to authenticate to the bastion host | `string` | `"ubuntu"` | no | -| bastion\_ssh\_port | The SSH port number on the bastion host | `number` | `22` | no | -| vm\_k8s\_control\_plane | Control Plane VM specification | `object({ node_count = number, vcpus = number, memory = number, disk_size = number })` |
{
"disk_size": 20,
"memory": 1536,
"node_count": 1,
"vcpus": 2
} | no |
-| vm\_k8s\_worker | Worker VM specification | `object({ node_count = number, vcpus = number, memory = number, disk_size = number })` | {
"disk_size": 20,
"memory": 2048,
"node_count": 2,
"vcpus": 2
} | no |
-| create\_kubespray\_host | Whether to provision the Kubespray as a VM | `bool` | `true` | no |
-| kubespray\_image | The Docker image to deploy Kubespray | `string` | `"khanhphhub/kubespray:v2.22.0"` | no |
-| kube\_version | Kubernetes version | `string` | `"v1.24.6"` | no |
-| kube\_network\_plugin | The network plugin to be installed on your cluster. Example: `cilium`, `calico`, `kube-ovn`, `weave` or `flannel` | `string` | `"calico"` | no |
-| enable\_nodelocaldns | Whether to enable nodelocal dns cache on your cluster | `bool` | `false` | no |
-| podsecuritypolicy\_enabled | Whether to enable pod security policy on your cluster (RBAC must be enabled either by having 'RBAC' in authorization\_modes or kubeadm enabled) | `bool` | `false` | no |
-| persistent\_volumes\_enabled | Whether to add Persistent Volumes Storage Class for corresponding cloud provider (supported: in-tree OpenStack, Cinder CSI, AWS EBS CSI, Azure Disk CSI, GCP Persistent Disk CSI) | `bool` | `false` | no |
-| helm\_enabled | Whether to enable Helm on your cluster | `bool` | `false` | no |
-| ingress\_nginx\_enabled | Whether to enable Nginx ingress on your cluster | `bool` | `false` | no |
-| argocd\_enabled | Whether to enable ArgoCD on your cluster | `bool` | `false` | no |
-| argocd\_version | The ArgoCD version to be installed | `string` | `"v2.4.12"` | no |
+| Name | Description | Type | Default | Required |
+| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | :------: |
+| env\_name | The stage of the development lifecycle for the k8s cluster. Example:`prod`, `dev`, `qa`, `stage`, `test` | `string` | `"test"` | no |
+| location | The city or region where the cluster is provisioned | `string` | `null` | no |
+| cluster\_number | The instance count for the k8s cluster, to differentiate it from other clusters. Example:`00`, `01` | `string` | `"01"` | no |
+| cluster\_domain | The cluster domain name | `string` | `"local"` | no |
+| use\_legacy\_naming\_convention | Whether to use legacy naming convention for the VM and cluster name. If your cluster was provisioned using version <= 3.x, set it to `true` | `bool` | `false` | no |
+| pm\_api\_url | The base URL for Proxmox VE API. See https://pve.proxmox.com/wiki/Proxmox_VE_API#API_URL | `string` | n/a | yes |
+| pm\_api\_token\_id | The token ID to access Proxmox VE API. | `string` | n/a | yes |
+| pm\_api\_token\_secret | The UUID/secret of the token defined in the variable `pm_api_token_id`. | `string` | n/a | yes |
+| pm\_tls\_insecure | Disable TLS verification while connecting to the Proxmox VE API server. | `bool` | n/a | yes |
+| pm\_host | The name of Proxmox node where the VM is placed. | `string` | n/a | yes |
+| pm\_parallel | The number of simultaneous Proxmox processes. E.g: creating resources. | `number` | `2` | no |
+| pm\_timeout | Timeout value (seconds) for proxmox API calls. | `number` | `600` | no |
+| internal\_net\_name | Name of the internal network bridge | `string` | `"vmbr1"` | no |
+| internal\_net\_subnet\_cidr | CIDR of the internal network | `string` | `"10.0.1.0/24"` | no |
+| ssh\_private\_key | SSH private key in base64, will be used by Terraform client to connect to the VM after provisioning | `string` | n/a | yes |
+| ssh\_public\_keys | SSH public keys in base64 | `string` | n/a | yes |
+| vm\_user | The default user for all VMs | `string` | `"ubuntu"` | no |
+| vm\_sockets | Number of the CPU socket to allocate to the VMs | `number` | `1` | no |
+| vm\_max\_vcpus | The maximum CPU cores available per CPU socket to allocate to the VM | `number` | `2` | no |
+| vm\_cpu\_type | The type of CPU to emulate in the Guest | `string` | `"host"` | no |
+| vm\_os\_disk\_storage | Default storage pool where OS VM disk is placed | `string` | n/a | yes |
+| add\_worker\_node\_data\_disk | Whether to add a data disk to each worker node of the cluster | `bool` | `false` | no |
+| worker\_node\_data\_disk\_storage | The storage pool where the data disk is placed | `string` | `""` | no |
+| worker\_node\_data\_disk\_size | The size of worker node data disk in Gigabyte | `string` | `10` | no |
+| vm\_ubuntu\_tmpl\_name | Name of Cloud-init template Ubuntu VM | `string` | `"ubuntu-2404"` | no |
+| bastion\_ssh\_ip | IP of the bastion host, could be either public IP or local network IP of the bastion host | `string` | `""` | no |
+| bastion\_ssh\_user | The user to authenticate to the bastion host | `string` | `"ubuntu"` | no |
+| bastion\_ssh\_port | The SSH port number on the bastion host | `number` | `22` | no |
+| vm\_k8s\_control\_plane | Control Plane VM specification | `object({ node_count = number, vcpus = number, memory = number, disk_size = number })` | ``{`
` "disk_size": 20,`
` "memory":2048,`
` "node_count": 1,`
` "vcpus": 2 `
`}`` | no |
+| vm\_k8s\_worker | Worker VM specification | `object({ node_count = number, vcpus = number, memory = number, disk_size = number })` | ``{`
` "disk_size": 20,`
` "memory":3072,`
` "node_count": 3,`
` "vcpus": 2 `
`}`` | no |
+| create\_kubespray\_host | Whether to provision the Kubespray as a VM | `bool` | `true` | no |
+| kubespray\_image | The Docker image to deploy Kubespray | `string` | `"quay.io/kubespray/kubespray:v2.25.0"` | no |
+| kube\_version | Kubernetes version | `string` | `"v1.29.5"` | no |
+| kube\_network\_plugin | The network plugin to be installed on your cluster. Example:`cilium`, `calico`, `kube-ovn`, `weave` or `flannel` | `string` | `"calico"` | no |
+| enable\_nodelocaldns | Whether to enable nodelocal dns cache on your cluster | `bool` | `false` | no |
+| podsecuritypolicy\_enabled | Whether to enable pod security policy on your cluster (RBAC must be enabled either by having 'RBAC' in authorization\_modes or kubeadm enabled) | `bool` | `false` | no |
+| persistent\_volumes\_enabled | Whether to add Persistent Volumes Storage Class for corresponding cloud provider (supported: in-tree OpenStack, Cinder CSI, AWS EBS CSI, Azure Disk CSI, GCP Persistent Disk CSI) | `bool` | `false` | no |
+| helm\_enabled | Whether to enable Helm on your cluster | `bool` | `false` | no |
+| ingress\_nginx\_enabled | Whether to enable Nginx ingress on your cluster | `bool` | `false` | no |
+| argocd\_enabled | Whether to enable ArgoCD on your cluster | `bool` | `false` | no |
+| argocd\_version | The ArgoCD version to be installed | `string` | `"v2.11.4"` | no |
+
## Blog posts
-For more detailed instructions, refer to the following blog post: [Create a Kubernetes cluster on Proxmox with Terraform & Kubespray](https://www.khanhph.com/install-proxmox-kubernetes/)
+For more detailed instructions, refer to the following blog post: [Create a Kubernetes cluster on Proxmox with Terraform & Kubespray](https://www.khanhph.com/install-proxmox-kubernetes/)
diff --git a/example.tfvars b/example.tfvars
index d85c296..d40c3f1 100644
--- a/example.tfvars
+++ b/example.tfvars
@@ -63,7 +63,7 @@ vm_k8s_worker = {
# Kubernetes settings
########################################################################
-kube_version = "v1.24.6"
+kube_version = "v1.29.5"
kube_network_plugin = "calico"
enable_nodelocaldns = false
podsecuritypolicy_enabled = false
@@ -71,4 +71,4 @@ persistent_volumes_enabled = false
helm_enabled = false
ingress_nginx_enabled = false
argocd_enabled = false
-argocd_version = "v2.4.12"
\ No newline at end of file
+argocd_version = "v2.11.4"
\ No newline at end of file
diff --git a/modules/proxmox_ubuntu_vm/main.tf b/modules/proxmox_ubuntu_vm/main.tf
index 959eac8..c1b25ae 100644
--- a/modules/proxmox_ubuntu_vm/main.tf
+++ b/modules/proxmox_ubuntu_vm/main.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
- version = "2.9.14"
+ version = "3.0.1-rc3"
}
}
}
@@ -27,27 +27,37 @@ resource "proxmox_vm_qemu" "ubuntu_vm" {
scsihw = "virtio-scsi-single"
hotplug = "network,disk,usb,memory,cpu"
numa = true
- automatic_reboot = false
+ automatic_reboot = true
desc = "This VM is managed by Terraform, cloned from an Cloud-init Ubuntu image, configured with an internal network and supports CPU hotplug/hot unplug and memory hotplug capabilities."
tags = var.vm_tags
- disk {
- slot = 0
- type = "virtio"
- storage = var.vm_os_disk_storage
- size = "${var.vm_os_disk_size_gb}G"
- iothread = 1
- }
-
- dynamic "disk" {
- for_each = var.add_worker_node_data_disk ? [var.worker_node_data_disk_size] : []
+ disks {
+ virtio {
+ virtio0 {
+ disk {
+ size = "${var.vm_os_disk_size_gb}G"
+ storage = var.vm_os_disk_storage
+ iothread = true
+ }
+ }
- content {
- slot = 1
- type = "virtio"
- storage = var.worker_node_data_disk_storage
- size = "${var.worker_node_data_disk_size}G"
- iothread = 1
+ dynamic "virtio1" {
+ for_each = var.add_worker_node_data_disk ? [var.worker_node_data_disk_size] : []
+ content {
+ disk {
+ size = "${var.worker_node_data_disk_size}G"
+ storage = var.worker_node_data_disk_storage
+ iothread = true
+ }
+ }
+ }
+ }
+ ide {
+ ide0 {
+ cloudinit {
+ storage = var.vm_os_disk_storage
+ }
+ }
}
}
diff --git a/modules/proxmox_ubuntu_vm/variables.tf b/modules/proxmox_ubuntu_vm/variables.tf
index c937d2e..6d5eeda 100644
--- a/modules/proxmox_ubuntu_vm/variables.tf
+++ b/modules/proxmox_ubuntu_vm/variables.tf
@@ -88,7 +88,7 @@ variable "vm_os_disk_storage" {
variable "vm_ubuntu_tmpl_name" {
type = string
description = "Name of Cloud-init template Ubuntu VM."
- default = "ubuntu-2204"
+ default = "ubuntu-2404"
}
variable "vm_host_number" {
diff --git a/providers.tf b/providers.tf
index 2b7bd61..6eee723 100644
--- a/providers.tf
+++ b/providers.tf
@@ -4,11 +4,11 @@ terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
- version = "2.9.14"
+ version = "3.0.1-rc3"
}
null = {
source = "hashicorp/null"
- version = "3.2.1"
+ version = "3.2.2"
}
}
}
diff --git a/scripts/setup_kubespray.sh b/scripts/setup_kubespray.sh
index c0eb7b3..2f21148 100644
--- a/scripts/setup_kubespray.sh
+++ b/scripts/setup_kubespray.sh
@@ -42,6 +42,16 @@ if ! command -v docker &> /dev/null; then
exit 1
fi
+# Check and add DPkg::Lock::Timeout=600 to apt-get install if not already present
+ if ! grep -q 'apt-get install.*DPkg::Lock::Timeout=600' get-docker.sh; then
+ sed -i 's/apt-get install/apt-get install -o DPkg::Lock::Timeout=600/g' get-docker.sh
+ fi
+
+ # Check and add DPkg::Lock::Timeout=600 to apt-get update if not already present
+ if ! grep -q 'apt-get update.*DPkg::Lock::Timeout=600' get-docker.sh; then
+ sed -i 's/apt-get update/apt-get update -o DPkg::Lock::Timeout=600/g' get-docker.sh
+ fi
+
# Install Docker
if ! sudo sh get-docker.sh; then
echo "Error installing Docker. Exiting." >&2
diff --git a/variables.tf b/variables.tf
index 35fcea6..e11f913 100644
--- a/variables.tf
+++ b/variables.tf
@@ -88,11 +88,13 @@ variable "internal_net_subnet_cidr" {
variable "ssh_private_key" {
type = string
description = "SSH private key in base64, will be used by Terraform client to connect to the VM after provisioning"
+ sensitive = false
}
variable "ssh_public_keys" {
type = string
description = "SSH public keys in base64"
+ sensitive = false
}
variable "vm_user" {
@@ -145,7 +147,7 @@ variable "worker_node_data_disk_size" {
variable "vm_ubuntu_tmpl_name" {
type = string
description = "Name of Cloud-init template Ubuntu VM"
- default = "ubuntu-2204"
+ default = "ubuntu-2404"
}
variable "bastion_ssh_ip" {
@@ -191,13 +193,13 @@ variable "create_kubespray_host" {
variable "kubespray_image" {
type = string
description = "The Docker image to deploy Kubespray"
- default = "khanhphhub/kubespray:v2.22.0"
+ default = "quay.io/kubespray/kubespray:v2.25.0"
}
variable "kube_version" {
type = string
description = "Kubernetes version"
- default = "v1.24.6"
+ default = "v1.29.5"
}
variable "kube_network_plugin" {
type = string
@@ -238,7 +240,7 @@ variable "argocd_enabled" {
variable "argocd_version" {
type = string
description = "The ArgoCD version to be installed"
- default = "v2.4.12"
+ default = "v2.11.4"
}
diff --git a/vm-k8s-nodes.tf b/vm-k8s-nodes.tf
index 78a0fba..5cb98d9 100644
--- a/vm-k8s-nodes.tf
+++ b/vm-k8s-nodes.tf
@@ -16,7 +16,7 @@ module "k8s_control_plane_nodes" {
vm_net_subnet_cidr = var.internal_net_subnet_cidr
vm_host_number = 10
vm_user = var.vm_user
- vm_tags = "${var.env_name};terraform;k8s-control-plane"
+ vm_tags = "${var.env_name};terraform;k8s_control_plane"
ssh_public_keys = var.ssh_public_keys
use_legacy_naming_convention = var.use_legacy_naming_convention
}
@@ -39,7 +39,7 @@ module "k8s_worker_nodes" {
vm_net_subnet_cidr = var.internal_net_subnet_cidr
vm_host_number = 20
vm_user = var.vm_user
- vm_tags = "${var.env_name};terraform;k8s-worker"
+ vm_tags = "${var.env_name};terraform;k8s_worker"
ssh_public_keys = var.ssh_public_keys
add_worker_node_data_disk = var.add_worker_node_data_disk
worker_node_data_disk_storage = var.worker_node_data_disk_storage
diff --git a/vm-kubespray-host.tf b/vm-kubespray-host.tf
index 27fd333..c961dc7 100644
--- a/vm-kubespray-host.tf
+++ b/vm-kubespray-host.tf
@@ -80,7 +80,7 @@ resource "null_resource" "setup_kubespray" {
provisioner "remote-exec" {
inline = [
local.setup_kubespray_script_content,
- "echo ${var.ssh_private_key} | base64 -d > ${local.kubespray_data_dir}/id_rsa",
+ "echo \"${var.ssh_private_key}\" | base64 -d > ${local.kubespray_data_dir}/id_rsa",
<<-EOT
cat <