1
0
mirror of https://github.com/rancher/quickstart.git synced 2026-02-05 12:45:15 +01:00

Merge pull request #194 from bashofmann/linode

Add Linode provider
This commit is contained in:
Bastian Hofmann
2022-01-04 17:41:54 +01:00
committed by GitHub
11 changed files with 408 additions and 1 deletions

View File

@@ -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:

View File

@@ -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
View 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
View 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.

View 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
View 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
View 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
View File

@@ -0,0 +1,6 @@
provider "linode" {
token = var.linode_token
}
provider "tls" {
}

View 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
View 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
View 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"
}