mirror of
https://github.com/rancher/quickstart.git
synced 2026-02-05 12:45:15 +01:00
2
.github/workflows/terraform.yml
vendored
2
.github/workflows/terraform.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
provider: ['aws', 'azure', 'do', 'gcp', 'hcloud']
|
||||
provider: ['aws', 'azure', 'do', 'gcp', 'hcloud', 'linode']
|
||||
|
||||
# Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest
|
||||
defaults:
|
||||
|
||||
@@ -37,6 +37,7 @@ Quickstarts are provided for:
|
||||
- [**DigitalOcean** (`do`)](./do)
|
||||
- [**Google Cloud Platform** (`gcp`)](./gcp)
|
||||
- [**Hetzner Cloud** (`hcloud`)](./hcloud)
|
||||
- [**Linode** (`linode`)](./linode)
|
||||
|
||||
**You will be responsible for any and all infrastructure costs incurred by these resources.**
|
||||
|
||||
|
||||
120
linode/.terraform.lock.hcl
generated
Normal file
120
linode/.terraform.lock.hcl
generated
Normal file
@@ -0,0 +1,120 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/helm" {
|
||||
version = "2.4.1"
|
||||
constraints = "2.4.1"
|
||||
hashes = [
|
||||
"h1:CLb4n9f/hLyqqq0zbc+h5SuNOB7KnO65qOOb+ohwsKA=",
|
||||
"zh:07517b24ea2ce4a1d3be3b88c3efc7fb452cd97aea8fac93ca37a08a8ec06e14",
|
||||
"zh:11ef6118ed03a1b40ff66adfe21b8707ece0568dae1347ddfbcff8452c0655d5",
|
||||
"zh:1ae07e9cc6b088a6a68421642c05e2fa7d00ed03e9401e78c258cf22a239f526",
|
||||
"zh:1c5b4cd44033a0d7bf7546df930c55aa41db27b70b3bca6d145faf9b9a2da772",
|
||||
"zh:256413132110ddcb0c3ea17c7b01123ad2d5b70565848a77c5ccc22a3f32b0dd",
|
||||
"zh:4ab46fd9aadddef26604382bc9b49100586647e63ef6384e0c0c3f010ff2f66e",
|
||||
"zh:5a35d23a9f08c36fceda3cef7ce2c7dc5eca32e5f36494de695e09a5007122f0",
|
||||
"zh:8e9823a1e5b985b63fe283b755a821e5011a58112447d42fb969c7258ed57ed3",
|
||||
"zh:8f79722eba9bf77d341edf48a1fd51a52d93ec31d9cac9ba8498a3a061ea4a7f",
|
||||
"zh:b2ea782848b10a343f586ba8ee0cf4d7ff65aa2d4b144eea5bbd8f9801b54c67",
|
||||
"zh:e72d1ccf8a75d8e8456c6bb4d843fd4deb0e962ad8f167fa84cf17f12c12304e",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/local" {
|
||||
version = "2.1.0"
|
||||
constraints = "2.1.0"
|
||||
hashes = [
|
||||
"h1:KfieWtVyGWwplSoLIB5usKAUnrIkDQBkWaR5TI+4WYg=",
|
||||
"zh:0f1ec65101fa35050978d483d6e8916664b7556800348456ff3d09454ac1eae2",
|
||||
"zh:36e42ac19f5d68467aacf07e6adcf83c7486f2e5b5f4339e9671f68525fc87ab",
|
||||
"zh:6db9db2a1819e77b1642ec3b5e95042b202aee8151a0256d289f2e141bf3ceb3",
|
||||
"zh:719dfd97bb9ddce99f7d741260b8ece2682b363735c764cac83303f02386075a",
|
||||
"zh:7598bb86e0378fd97eaa04638c1a4c75f960f62f69d3662e6d80ffa5a89847fe",
|
||||
"zh:ad0a188b52517fec9eca393f1e2c9daea362b33ae2eb38a857b6b09949a727c1",
|
||||
"zh:c46846c8df66a13fee6eff7dc5d528a7f868ae0dcf92d79deaac73cc297ed20c",
|
||||
"zh:dc1a20a2eec12095d04bf6da5321f535351a594a636912361db20eb2a707ccc4",
|
||||
"zh:e57ab4771a9d999401f6badd8b018558357d3cbdf3d33cc0c4f83e818ca8e94b",
|
||||
"zh:ebdcde208072b4b0f8d305ebf2bfdc62c926e0717599dcf8ec2fd8c5845031c3",
|
||||
"zh:ef34c52b68933bedd0868a13ccfd59ff1c820f299760b3c02e008dc95e2ece91",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/tls" {
|
||||
version = "3.1.0"
|
||||
constraints = "3.1.0"
|
||||
hashes = [
|
||||
"h1:XTU9f6sGMZHOT8r/+LWCz2BZOPH127FBTPjMMEAAu1U=",
|
||||
"zh:3d46616b41fea215566f4a957b6d3a1aa43f1f75c26776d72a98bdba79439db6",
|
||||
"zh:623a203817a6dafa86f1b4141b645159e07ec418c82fe40acd4d2a27543cbaa2",
|
||||
"zh:668217e78b210a6572e7b0ecb4134a6781cc4d738f4f5d09eb756085b082592e",
|
||||
"zh:95354df03710691773c8f50a32e31fca25f124b7f3d6078265fdf3c4e1384dca",
|
||||
"zh:9f97ab190380430d57392303e3f36f4f7835c74ea83276baa98d6b9a997c3698",
|
||||
"zh:a16f0bab665f8d933e95ca055b9c8d5707f1a0dd8c8ecca6c13091f40dc1e99d",
|
||||
"zh:be274d5008c24dc0d6540c19e22dbb31ee6bfdd0b2cddd4d97f3cd8a8d657841",
|
||||
"zh:d5faa9dce0a5fc9d26b2463cea5be35f8586ab75030e7fa4d4920cd73ee26989",
|
||||
"zh:e9b672210b7fb410780e7b429975adcc76dd557738ecc7c890ea18942eb321a5",
|
||||
"zh:eb1f8368573d2370605d6dbf60f9aaa5b64e55741d96b5fb026dbfe91de67c0d",
|
||||
"zh:fc1e12b713837b85daf6c3bb703d7795eaf1c5177aebae1afcf811dd7009f4b0",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/linode/linode" {
|
||||
version = "1.25.0"
|
||||
constraints = "1.25.0"
|
||||
hashes = [
|
||||
"h1:v2qko+7oqNZC7LsAEFr9q5eCywpwPcQgS2J9vumlL4k=",
|
||||
"zh:100f49672c90dfe7a8fa69fe8d43a3649ecf6293eb527d88c9ea3814ac592ef3",
|
||||
"zh:1d4b81997e9ad2729529cccc5976a53942da4819e968124b3262ee50bfd2ea85",
|
||||
"zh:1fd503d66c13b02e943b74f9d5d994808dc6275a18ddc3cb7464d8613a8e6ddd",
|
||||
"zh:2281cf09948a7941b37f1b921bce7b918649a026b9bd8900a0ac6262e6880046",
|
||||
"zh:2ff9d4cba7c4c8db0959dea5b828235d07c7549057619f9d3902f663d411ecd7",
|
||||
"zh:36c3a29447520e8deaa1c9e5ec2435f150d64ce63ac054457a6a642d2c8f6df8",
|
||||
"zh:52a92f6dc12b38d9fc867abaa89eaf507baf41a8e51fd2335c2363bbed483025",
|
||||
"zh:75eeffb93398582737940d7bd1a6f2bb901d87619ff78ae84569d42a1d2cf9a2",
|
||||
"zh:a64ea279b4972b0d73278a5c3f5704430f4360dcb930e6890782b362e5ec1390",
|
||||
"zh:b4ce6eadb0097e50c6ac11f103ce81ce6accc05f5d87a900e69da088078f102e",
|
||||
"zh:bea97f3e9ca9313fed89af8a21c6367f9acd02b1cafe20921502195ba9c67d9a",
|
||||
"zh:cb48fc4fb44494509702e90cec063add890a31ae4b02a137f6c22e3f66fc8f05",
|
||||
"zh:e25ff64ff9e785fa677b9339cea1406f92928bd96db779a5f0f020b9aa862824",
|
||||
"zh:f427dcb08fe8c4190415659c7914d06c5601a07ec419f17dec3b7d49c0c08ece",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/loafoe/ssh" {
|
||||
version = "1.0.1"
|
||||
constraints = "1.0.1"
|
||||
hashes = [
|
||||
"h1:U39yuaapulq3oNqpU1TxOQe1zVWGmL3D6kNv6gL5NHY=",
|
||||
"zh:075aefc3618270aa6f581b380c7601cb13cedb03ed117db0832e4128dab2c0f8",
|
||||
"zh:0c1c58f144f8618d8a25591e83f617773b0806a488682e48ec14acea4095a8b5",
|
||||
"zh:20f1f670a9314e4b6d2d8ed3b8e01b9c3e77df7b3d50a22827e6f119ddb06b5f",
|
||||
"zh:40c05a7dd30731b613912c0cd9895913f7c137a75489c8c6622a35bb6d752862",
|
||||
"zh:565a597fd5b6d60bbcb6093304851ee5885588d215af582598acc7e63796dc4d",
|
||||
"zh:771aa19144da01b96783cfd07006c231ec96b72d403d96888222f3b7973775d8",
|
||||
"zh:84e422645bceee2398d25f3412917e22ff38545a5649a4c4723ed7de4855b249",
|
||||
"zh:92863ab038304907253a9467c176ec1a78ca06b79313ffa3daea8dc9e2c0fb48",
|
||||
"zh:a137be3de2d6299992eb3a337f6b29325a344b86f7fb1ff317098cf9a89f659f",
|
||||
"zh:abdd03c95d73f964c59575abaa51a5b0d1d90c2950911f5f6af1103d9b94b3c5",
|
||||
"zh:d7dc58d2d45d3042bb674800062a2ffe1436d4574717f36aaaa4b9ded87dce60",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/rancher/rancher2" {
|
||||
version = "1.21.0"
|
||||
constraints = "1.21.0"
|
||||
hashes = [
|
||||
"h1:8VYSDYxLlXm2Do3sPVwlk6NCErwbmsH0FykHDh4Uji8=",
|
||||
"zh:16585b284e9d4c77f7ddad5564e318f2f66e43c8dd740d707b038d1377c3e27d",
|
||||
"zh:222792b01bdccd1fc269b6c935557b0d6855fa73afbe622187fdd55e0ca287f0",
|
||||
"zh:437f84836aa2aaf023f6615c526582963ebdfcfe8e1e9076eec6bca73b0d26ee",
|
||||
"zh:4837455fc817f2c8a9274c0e646247a305d4e38735b7e8ee8e9776989b1f7e75",
|
||||
"zh:4f26cc06dc472b5c6e261fbf21d0ec3ec8827b1e91c121bac220ced584ac6900",
|
||||
"zh:562d6dccb1574fb476791bd87ec3d6df9324404cfb818009b06cf6413ceb44bb",
|
||||
"zh:5d5e6a268cd152e6fe2c047a78a23705f4cbe21eacbb43db2988ebfcba397347",
|
||||
"zh:79bdb708863cb656b68bc7c9cefff14b1a906c1bc8a750f6dabf3111fc261ef0",
|
||||
"zh:afd3cb44e6b6d9342a33e8c24f28127ee21ce08d15571eb79815fb228eff4f91",
|
||||
"zh:b763f7a28cdc22ce2a124011c540dbd9b8c9372f9530eb6364b44c6d997a5d59",
|
||||
"zh:baf6b6e77b2d6f61e32c7417bffa2f2b78fb08fd6510154116990298c8b58c46",
|
||||
"zh:fdee2d9cf371e77950ea2b7cdc9f01298380094c29c0743f18841db7f56b4c07",
|
||||
]
|
||||
}
|
||||
57
linode/README.md
Normal file
57
linode/README.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Linode Rancher Quickstart
|
||||
|
||||
Two single-node RKE Kubernetes clusters will be created from two linodes running Ubuntu 18.04 and Docker.
|
||||
Both instances will be accessible over SSH using the SSH keys `id_rsa` and `id_rsa.pub`.
|
||||
|
||||
## Variables
|
||||
|
||||
###### `linode_token`
|
||||
- **Required**
|
||||
Linode API token used to create infrastructure
|
||||
|
||||
###### `linode_region`
|
||||
- Default: **`"eu-central"`**
|
||||
Linode region used for all resources
|
||||
|
||||
###### `prefix`
|
||||
- Default: **`"quickstart"`**
|
||||
Prefix added to names of all resources
|
||||
|
||||
###### `linode_size`
|
||||
- Default: **`"g6-standard-2"`**
|
||||
Linode size used for all linode
|
||||
|
||||
###### `docker_version`
|
||||
- Default: **`"19.03"`**
|
||||
Docker version to install on nodes
|
||||
|
||||
###### `rancher_kubernetes_version`
|
||||
- Default: **`"v1.21.8+k3s1"`**
|
||||
Kubernetes version to use for Rancher server cluster
|
||||
|
||||
See `rancher-common` module variable `rancher_kubernetes_version` for more details.
|
||||
|
||||
###### `workload_kubernetes_version`
|
||||
- Default: **`"v1.20.6-rancher1-1"`**
|
||||
Kubernetes version to use for managed workload cluster
|
||||
|
||||
See `rancher-common` module variable `workload_kubernetes_version` for more details.
|
||||
|
||||
###### `cert_manager_version`
|
||||
- Default: **`"1.5.3"`**
|
||||
Version of cert-manager to install alongside Rancher (format: 0.0.0)
|
||||
|
||||
See `rancher-common` module variable `cert_manager_version` for more details.
|
||||
|
||||
###### `rancher_version`
|
||||
- Default: **`"v2.6.3"`**
|
||||
Rancher server version (format v0.0.0)
|
||||
|
||||
See `rancher-common` module variable `rancher_version` for more details.
|
||||
|
||||
###### `rancher_server_admin_password`
|
||||
- **Required**
|
||||
Admin password to use for Rancher server bootstrap
|
||||
|
||||
See `rancher-common` module variable `admin_password` for more details.
|
||||
|
||||
7
linode/files/userdata_quickstart_node.template
Normal file
7
linode/files/userdata_quickstart_node.template
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash -x
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
curl -sL https://releases.rancher.com/install-docker/${docker_version}.sh | sh
|
||||
sudo usermod -aG docker ${username}
|
||||
|
||||
${register_command} --etcd --controlplane --worker
|
||||
82
linode/infra.tf
Normal file
82
linode/infra.tf
Normal file
@@ -0,0 +1,82 @@
|
||||
# Linode infrastructure resources
|
||||
|
||||
resource "tls_private_key" "global_key" {
|
||||
algorithm = "RSA"
|
||||
rsa_bits = 2048
|
||||
}
|
||||
|
||||
resource "local_file" "ssh_private_key_pem" {
|
||||
filename = "${path.module}/id_rsa"
|
||||
sensitive_content = tls_private_key.global_key.private_key_pem
|
||||
file_permission = "0600"
|
||||
}
|
||||
|
||||
resource "local_file" "ssh_public_key_openssh" {
|
||||
filename = "${path.module}/id_rsa.pub"
|
||||
content = tls_private_key.global_key.public_key_openssh
|
||||
}
|
||||
|
||||
# Temporary key pair used for SSH accesss
|
||||
resource "linode_sshkey" "quickstart_ssh_key" {
|
||||
label = "${var.prefix}-rancher-ssh-key"
|
||||
ssh_key = replace(tls_private_key.global_key.public_key_openssh, "\n", "")
|
||||
}
|
||||
|
||||
# Linode for creating a single node RKE cluster and installing the Rancher server
|
||||
resource "linode_instance" "rancher_server" {
|
||||
label = "${var.prefix}-rancher-server"
|
||||
image = "linode/ubuntu20.04"
|
||||
region = var.linode_region
|
||||
type = var.linode_type
|
||||
private_ip = true
|
||||
authorized_keys = [linode_sshkey.quickstart_ssh_key.ssh_key]
|
||||
}
|
||||
|
||||
# Rancher resources
|
||||
module "rancher_common" {
|
||||
source = "../rancher-common"
|
||||
|
||||
node_public_ip = linode_instance.rancher_server.ip_address
|
||||
node_internal_ip = linode_instance.rancher_server.private_ip_address
|
||||
node_username = local.node_username
|
||||
ssh_private_key_pem = tls_private_key.global_key.private_key_pem
|
||||
rancher_kubernetes_version = var.rancher_kubernetes_version
|
||||
|
||||
cert_manager_version = var.cert_manager_version
|
||||
rancher_version = var.rancher_version
|
||||
|
||||
rancher_server_dns = join(".", ["rancher", linode_instance.rancher_server.ip_address, "sslip.io"])
|
||||
admin_password = var.rancher_server_admin_password
|
||||
|
||||
workload_kubernetes_version = var.workload_kubernetes_version
|
||||
workload_cluster_name = "quickstart-linode-custom"
|
||||
}
|
||||
|
||||
# Linode stackscript to initialise node
|
||||
resource "linode_stackscript" "quickstart_node" {
|
||||
label = "${var.prefix}-workload-node"
|
||||
description = "Quickstart launch script"
|
||||
script = templatefile(
|
||||
"${path.module}/files/userdata_quickstart_node.template",
|
||||
{
|
||||
docker_version = var.docker_version
|
||||
username = local.node_username
|
||||
register_command = module.rancher_common.custom_cluster_command
|
||||
}
|
||||
)
|
||||
|
||||
images = ["linode/ubuntu20.04"]
|
||||
rev_note = "initial version"
|
||||
}
|
||||
|
||||
# Linode for creating a single node workload cluster
|
||||
resource "linode_instance" "quickstart_node" {
|
||||
label = "${var.prefix}-workload-node"
|
||||
image = "linode/ubuntu20.04"
|
||||
region = var.linode_region
|
||||
type = var.linode_type
|
||||
private_ip = true
|
||||
authorized_keys = [linode_sshkey.quickstart_ssh_key.ssh_key]
|
||||
|
||||
stackscript_id = linode_stackscript.quickstart_node.id
|
||||
}
|
||||
11
linode/output.tf
Normal file
11
linode/output.tf
Normal file
@@ -0,0 +1,11 @@
|
||||
output "rancher_server_url" {
|
||||
value = module.rancher_common.rancher_url
|
||||
}
|
||||
|
||||
output "rancher_node_ip" {
|
||||
value = linode_instance.rancher_server.ip_address
|
||||
}
|
||||
|
||||
output "workload_node_ip" {
|
||||
value = linode_instance.quickstart_node.ip_address
|
||||
}
|
||||
6
linode/provider.tf
Normal file
6
linode/provider.tf
Normal file
@@ -0,0 +1,6 @@
|
||||
provider "linode" {
|
||||
token = var.linode_token
|
||||
}
|
||||
|
||||
provider "tls" {
|
||||
}
|
||||
41
linode/terraform.tfvars.example
Normal file
41
linode/terraform.tfvars.example
Normal file
@@ -0,0 +1,41 @@
|
||||
# Required variables
|
||||
# - Fill in before beginning quickstart
|
||||
# ==========================================================
|
||||
|
||||
# Linode API token
|
||||
linode_token = ""
|
||||
|
||||
# Password used to log in to the `admin` account on the new Rancher server
|
||||
rancher_server_admin_password = ""
|
||||
|
||||
|
||||
# Optional variables
|
||||
# - Uncomment variables to customize quickstart
|
||||
# ----------------------------------------------------------
|
||||
|
||||
# DigitalOcean region for all resources
|
||||
# linode_region = ""
|
||||
|
||||
# Prefix for all resources created by quickstart
|
||||
# prefix = ""
|
||||
|
||||
# Size of all created linodes
|
||||
# linode_type = ""
|
||||
|
||||
# Docker version installed on target hosts
|
||||
# - Must be a version supported by the Rancher install scripts
|
||||
# docker_version = ""
|
||||
|
||||
# Kubernetes version used for creating management server cluster
|
||||
# - Must be supported by RKE terraform provider 1.0.1
|
||||
# rancher_kubernetes_version = ""
|
||||
|
||||
# Kubernetes version used for creating workload cluster
|
||||
# - Must be supported by RKE terraform provider 1.0.1
|
||||
# workload_kubernetes_version = ""
|
||||
|
||||
# Version of cert-manager to install, used in case of older Rancher versions
|
||||
# cert_manager_version = ""
|
||||
|
||||
# Version of Rancher to install
|
||||
# rancher_version = ""
|
||||
65
linode/variables.tf
Normal file
65
linode/variables.tf
Normal file
@@ -0,0 +1,65 @@
|
||||
# Variables for Linode infrastructure module
|
||||
|
||||
variable "linode_token" {
|
||||
type = string
|
||||
description = "Linode API token used to create infrastructure"
|
||||
}
|
||||
|
||||
variable "linode_region" {
|
||||
type = string
|
||||
description = "Linode region used for all resources"
|
||||
default = "eu-central"
|
||||
}
|
||||
|
||||
variable "prefix" {
|
||||
type = string
|
||||
description = "Prefix added to names of all resources"
|
||||
default = "quickstart"
|
||||
}
|
||||
|
||||
variable "linode_type" {
|
||||
type = string
|
||||
description = "Linode type used for all droplets"
|
||||
default = "g6-standard-2"
|
||||
}
|
||||
|
||||
variable "docker_version" {
|
||||
type = string
|
||||
description = "Docker version to install on nodes"
|
||||
default = "19.03"
|
||||
}
|
||||
|
||||
variable "rancher_kubernetes_version" {
|
||||
type = string
|
||||
description = "Kubernetes version to use for Rancher server cluster"
|
||||
default = "v1.21.8+k3s1"
|
||||
}
|
||||
|
||||
variable "workload_kubernetes_version" {
|
||||
type = string
|
||||
description = "Kubernetes version to use for managed workload cluster"
|
||||
default = "v1.20.6-rancher1-1"
|
||||
}
|
||||
|
||||
variable "cert_manager_version" {
|
||||
type = string
|
||||
description = "Version of cert-manager to install alongside Rancher (format: 0.0.0)"
|
||||
default = "1.5.3"
|
||||
}
|
||||
|
||||
variable "rancher_version" {
|
||||
type = string
|
||||
description = "Rancher server version (format: v0.0.0)"
|
||||
default = "v2.6.3"
|
||||
}
|
||||
|
||||
# Required
|
||||
variable "rancher_server_admin_password" {
|
||||
type = string
|
||||
description = "Admin password to use for Rancher server bootstrap"
|
||||
}
|
||||
|
||||
# Local variables used to reduce repetition
|
||||
locals {
|
||||
node_username = "root"
|
||||
}
|
||||
17
linode/versions.tf
Normal file
17
linode/versions.tf
Normal file
@@ -0,0 +1,17 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
linode = {
|
||||
source = "linode/linode"
|
||||
version = "1.25.0"
|
||||
}
|
||||
local = {
|
||||
source = "hashicorp/local"
|
||||
version = "2.1.0"
|
||||
}
|
||||
tls = {
|
||||
source = "hashicorp/tls"
|
||||
version = "3.1.0"
|
||||
}
|
||||
}
|
||||
required_version = ">= 1.0.0"
|
||||
}
|
||||
Reference in New Issue
Block a user