Sebastian Rieger
3 years ago
19 changed files with 1253 additions and 3 deletions
-
2.gitignore
-
3terraform/demo4-scale-out-lb/get-terraform.sh
-
3terraform/lab1/get-terraform.sh
-
178terraform/lab1/lab1.tf
-
0terraform/lab1/run-terraform.sh
-
0terraform/lab1/stop-terraform.sh
-
0terraform/lab4-scale-out-lb/demo4-scale-out-lb.tf
-
3terraform/lab4-scale-out-lb/get-terraform.sh
-
259terraform/lab4-scale-out-lb/lab4.tf
-
23terraform/lab4-scale-out-lb/run-terraform.sh
-
6terraform/lab4-scale-out-lb/stop-terraform.sh
-
179terraform/rancher-terraform/example-templates/cluster-options-example.yml
-
49terraform/rancher-terraform/example-templates/node-template-example.json
-
500terraform/rancher-terraform/main.tf
-
20terraform/rke-terraform/main.tf
-
6terraform/rke-terraform/user-data.sh
-
11terraform/rke2-terraform/main.tf
-
5terraform/rke2-terraform/outputs.tf
-
9terraform/rke2-terraform/variables.tf
@ -0,0 +1,2 @@ |
|||
clouds.yaml |
|||
**/clouds.yaml |
@ -1,3 +0,0 @@ |
|||
#!/bin/bash |
|||
wget https://releases.hashicorp.com/terraform/0.14.10/terraform_0.14.10_linux_amd64.zip -O terraform_0.14.10_linux_amd64.zip |
|||
unzip -o terraform_0.14.10_linux_amd64.zip |
@ -0,0 +1,3 @@ |
|||
#!/bin/bash |
|||
wget https://releases.hashicorp.com/terraform/1.1.3/terraform_1.1.3_linux_amd64.zip -O terraform_1.1.3_linux_amd64.zip |
|||
unzip -o terraform_1.1.3_linux_amd64.zip |
@ -0,0 +1,178 @@ |
|||
# Define CloudComp group number |
|||
variable "group_number" { |
|||
type = string |
|||
default = "20" |
|||
} |
|||
|
|||
## OpenStack credentials can be used in a more secure way by using |
|||
## cloud.yaml from https://private-cloud.informatik.hs-fulda.de/project/api_access/clouds.yaml/ |
|||
|
|||
# or by using env vars exported from openrc here, |
|||
# e.g., using 'export TF_VAR_os_password=$OS_PASSWORD' |
|||
|
|||
# Define OpenStack credentials, project config etc. |
|||
locals { |
|||
auth_url = "https://private-cloud.informatik.hs-fulda.de:5000/v3" |
|||
user_name = "CloudComp${var.group_number}" |
|||
user_password = "<password of your group here, private-cloud is only reachable via vpn>" |
|||
tenant_name = "CloudComp${var.group_number}" |
|||
#network_name = "CloudComp${var.group_number}-net" |
|||
router_name = "CloudComp${var.group_number}-router" |
|||
image_name = "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image" |
|||
flavor_name = "m1.small" |
|||
region_name = "RegionOne" |
|||
} |
|||
|
|||
# Define OpenStack provider |
|||
terraform { |
|||
required_version = ">= 0.14.0" |
|||
required_providers { |
|||
openstack = { |
|||
source = "terraform-provider-openstack/openstack" |
|||
version = ">= 1.46.0" |
|||
} |
|||
} |
|||
} |
|||
|
|||
# Configure the OpenStack Provider |
|||
provider "openstack" { |
|||
user_name = local.user_name |
|||
tenant_name = local.tenant_name |
|||
password = local.user_password |
|||
auth_url = local.auth_url |
|||
region = local.region_name |
|||
use_octavia = true |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create keypair |
|||
# |
|||
########################################################################### |
|||
|
|||
# import keypair, if public_key is not specified, create new keypair to use |
|||
resource "openstack_compute_keypair_v2" "terraform-keypair" { |
|||
name = "my-terraform-pubkey" |
|||
#public_key = file("~/.ssh/id_rsa.pub") |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create security group |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_secgroup_v2" "terraform-secgroup" { |
|||
name = "my-terraform-secgroup" |
|||
description = "for terraform instances" |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-http" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 80 |
|||
port_range_max = 80 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-ssh" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 22 |
|||
port_range_max = 22 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-secgroup.id |
|||
} |
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create network |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_network_v2" "terraform-network-1" { |
|||
name = "my-terraform-network-1" |
|||
admin_state_up = "true" |
|||
} |
|||
|
|||
resource "openstack_networking_subnet_v2" "terraform-subnet-1" { |
|||
name = "my-terraform-subnet-1" |
|||
network_id = openstack_networking_network_v2.terraform-network-1.id |
|||
cidr = "192.168.255.0/24" |
|||
ip_version = 4 |
|||
} |
|||
|
|||
data "openstack_networking_router_v2" "router-1" { |
|||
name = local.router_name |
|||
} |
|||
|
|||
resource "openstack_networking_router_interface_v2" "router_interface_1" { |
|||
router_id = data.openstack_networking_router_v2.router-1.id |
|||
subnet_id = openstack_networking_subnet_v2.terraform-subnet-1.id |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create instances |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_compute_instance_v2" "terraform-instance-1" { |
|||
name = "my-terraform-instance-1" |
|||
image_name = local.image_name |
|||
flavor_name = local.flavor_name |
|||
key_pair = openstack_compute_keypair_v2.terraform-keypair.name |
|||
security_groups = [openstack_networking_secgroup_v2.terraform-secgroup.name] |
|||
|
|||
depends_on = [openstack_networking_subnet_v2.terraform-subnet-1] |
|||
|
|||
network { |
|||
uuid = openstack_networking_network_v2.terraform-network-1.id |
|||
} |
|||
|
|||
user_data = <<-EOF |
|||
#!/bin/bash |
|||
apt-get update |
|||
apt-get -y install apache2 |
|||
rm /var/www/html/index.html |
|||
cat > /var/www/html/index.html << INNEREOF |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<body> |
|||
<h1>It works!</h1> |
|||
<p>hostname</p> |
|||
</body> |
|||
</html> |
|||
INNEREOF |
|||
sed -i "s/hostname/terraform-instance-1/" /var/www/html/index.html |
|||
sed -i "1s/$/ terraform-instance-1/" /etc/hosts |
|||
EOF |
|||
} |
|||
|
|||
########################################################################### |
|||
# |
|||
# assign floating ip to instance |
|||
# |
|||
########################################################################### |
|||
resource "openstack_networking_floatingip_v2" "fip_1" { |
|||
pool = "public1" |
|||
} |
|||
|
|||
resource "openstack_compute_floatingip_associate_v2" "fip_1_assoc" { |
|||
floating_ip = openstack_networking_floatingip_v2.fip_1.address |
|||
instance_id = openstack_compute_instance_v2.terraform-instance-1.id |
|||
} |
|||
|
|||
output "vip_addr" { |
|||
value = openstack_networking_floatingip_v2.fip_1 |
|||
} |
@ -0,0 +1,3 @@ |
|||
#!/bin/bash |
|||
wget https://releases.hashicorp.com/terraform/1.1.3/terraform_1.1.3_linux_amd64.zip -O terraform_1.1.3_linux_amd64.zip |
|||
unzip -o terraform_1.1.3_linux_amd64.zip |
@ -0,0 +1,259 @@ |
|||
# Define CloudComp group number |
|||
variable "group_number" { |
|||
type = string |
|||
default = "20" |
|||
} |
|||
|
|||
## OpenStack credentials can be used in a more secure way by using |
|||
## cloud.yaml from https://private-cloud.informatik.hs-fulda.de/project/api_access/clouds.yaml/ |
|||
|
|||
# or by using env vars exported from openrc here, |
|||
# e.g., using 'export TF_VAR_os_password=$OS_PASSWORD' |
|||
|
|||
# Define OpenStack credentials, project config etc. |
|||
locals { |
|||
auth_url = "https://private-cloud.informatik.hs-fulda.de:5000/v3" |
|||
user_name = "CloudComp${var.group_number}" |
|||
user_password = "<password of your group here, private-cloud is only reachable via vpn>" |
|||
tenant_name = "CloudComp${var.group_number}" |
|||
#network_name = "CloudComp${var.group_number}-net" |
|||
router_name = "CloudComp${var.group_number}-router" |
|||
image_name = "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image" |
|||
flavor_name = "m1.small" |
|||
region_name = "RegionOne" |
|||
} |
|||
|
|||
# Define OpenStack provider |
|||
terraform { |
|||
required_version = ">= 0.14.0" |
|||
required_providers { |
|||
openstack = { |
|||
source = "terraform-provider-openstack/openstack" |
|||
version = ">= 1.46.0" |
|||
} |
|||
} |
|||
} |
|||
|
|||
# Configure the OpenStack Provider |
|||
provider "openstack" { |
|||
user_name = local.user_name |
|||
tenant_name = local.tenant_name |
|||
password = local.user_password |
|||
auth_url = local.auth_url |
|||
region = local.region_name |
|||
use_octavia = true |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create keypair |
|||
# |
|||
########################################################################### |
|||
|
|||
# import keypair, if public_key is not specified, create new keypair to use |
|||
resource "openstack_compute_keypair_v2" "terraform-keypair" { |
|||
name = "my-terraform-pubkey" |
|||
#public_key = file("~/.ssh/id_rsa.pub") |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create security group |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_secgroup_v2" "terraform-secgroup" { |
|||
name = "my-terraform-secgroup" |
|||
description = "for terraform instances" |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-http" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 80 |
|||
port_range_max = 80 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-ssh" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 22 |
|||
port_range_max = 22 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-secgroup.id |
|||
} |
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create network |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_network_v2" "terraform-network-1" { |
|||
name = "my-terraform-network-1" |
|||
admin_state_up = "true" |
|||
} |
|||
|
|||
resource "openstack_networking_subnet_v2" "terraform-subnet-1" { |
|||
name = "my-terraform-subnet-1" |
|||
network_id = openstack_networking_network_v2.terraform-network-1.id |
|||
cidr = "192.168.255.0/24" |
|||
ip_version = 4 |
|||
} |
|||
|
|||
data "openstack_networking_router_v2" "router-1" { |
|||
name = local.router_name |
|||
} |
|||
|
|||
resource "openstack_networking_router_interface_v2" "router_interface_1" { |
|||
router_id = data.openstack_networking_router_v2.router-1.id |
|||
subnet_id = openstack_networking_subnet_v2.terraform-subnet-1.id |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create instances |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_compute_instance_v2" "terraform-instance-1" { |
|||
name = "my-terraform-instance-1" |
|||
image_name = local.image_name |
|||
flavor_name = local.flavor_name |
|||
key_pair = openstack_compute_keypair_v2.terraform-keypair.name |
|||
security_groups = [openstack_networking_secgroup_v2.terraform-secgroup.name] |
|||
|
|||
depends_on = [openstack_networking_subnet_v2.terraform-subnet-1] |
|||
|
|||
network { |
|||
uuid = openstack_networking_network_v2.terraform-network-1.id |
|||
} |
|||
|
|||
user_data = <<-EOF |
|||
#!/bin/bash |
|||
apt-get update |
|||
apt-get -y install apache2 |
|||
rm /var/www/html/index.html |
|||
cat > /var/www/html/index.html << INNEREOF |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<body> |
|||
<h1>It works!</h1> |
|||
<p>hostname</p> |
|||
</body> |
|||
</html> |
|||
INNEREOF |
|||
sed -i "s/hostname/terraform-instance-1/" /var/www/html/index.html |
|||
sed -i "1s/$/ terraform-instance-1/" /etc/hosts |
|||
EOF |
|||
} |
|||
|
|||
resource "openstack_compute_instance_v2" "terraform-instance-2" { |
|||
name = "my-terraform-instance-2" |
|||
image_name = local.image_name |
|||
flavor_name = local.flavor_name |
|||
key_pair = openstack_compute_keypair_v2.terraform-keypair.name |
|||
security_groups = [openstack_networking_secgroup_v2.terraform-secgroup.id] |
|||
|
|||
depends_on = [openstack_networking_subnet_v2.terraform-subnet-1] |
|||
|
|||
network { |
|||
uuid = openstack_networking_network_v2.terraform-network-1.id |
|||
} |
|||
|
|||
user_data = <<-EOF |
|||
#!/bin/bash |
|||
apt-get update |
|||
apt-get -y install apache2 |
|||
rm /var/www/html/index.html |
|||
cat > /var/www/html/index.html << INNEREOF |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<body> |
|||
<h1>It works!</h1> |
|||
<p>hostname</p> |
|||
</body> |
|||
</html> |
|||
INNEREOF |
|||
sed -i "s/hostname/terraform-instance-2/" /var/www/html/index.html |
|||
sed -i "1s/$/ terraform-instance-2/" /etc/hosts |
|||
EOF |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create load balancer |
|||
# |
|||
########################################################################### |
|||
resource "openstack_lb_loadbalancer_v2" "lb_1" { |
|||
vip_subnet_id = openstack_networking_subnet_v2.terraform-subnet-1.id |
|||
} |
|||
|
|||
resource "openstack_lb_listener_v2" "listener_1" { |
|||
protocol = "HTTP" |
|||
protocol_port = 80 |
|||
loadbalancer_id = openstack_lb_loadbalancer_v2.lb_1.id |
|||
connection_limit = 1024 |
|||
} |
|||
|
|||
resource "openstack_lb_pool_v2" "pool_1" { |
|||
protocol = "HTTP" |
|||
lb_method = "ROUND_ROBIN" |
|||
listener_id = openstack_lb_listener_v2.listener_1.id |
|||
} |
|||
|
|||
resource "openstack_lb_members_v2" "members_1" { |
|||
pool_id = openstack_lb_pool_v2.pool_1.id |
|||
|
|||
member { |
|||
address = openstack_compute_instance_v2.terraform-instance-1.access_ip_v4 |
|||
protocol_port = 80 |
|||
} |
|||
|
|||
member { |
|||
address = openstack_compute_instance_v2.terraform-instance-2.access_ip_v4 |
|||
protocol_port = 80 |
|||
} |
|||
} |
|||
|
|||
resource "openstack_lb_monitor_v2" "monitor_1" { |
|||
pool_id = openstack_lb_pool_v2.pool_1.id |
|||
type = "HTTP" |
|||
delay = 5 |
|||
timeout = 5 |
|||
max_retries = 3 |
|||
http_method = "GET" |
|||
url_path = "/" |
|||
expected_codes = 200 |
|||
|
|||
depends_on = [openstack_lb_loadbalancer_v2.lb_1, openstack_lb_listener_v2.listener_1, openstack_lb_pool_v2.pool_1, openstack_lb_members_v2.members_1 ] |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# assign floating ip to load balancer |
|||
# |
|||
########################################################################### |
|||
resource "openstack_networking_floatingip_v2" "fip_1" { |
|||
pool = "public1" |
|||
port_id = openstack_lb_loadbalancer_v2.lb_1.vip_port_id |
|||
} |
|||
|
|||
output "loadbalancer_vip_addr" { |
|||
value = openstack_networking_floatingip_v2.fip_1 |
|||
} |
@ -0,0 +1,23 @@ |
|||
#!/bin/bash |
|||
|
|||
# initialization of terraform state and download openstack plugin/dependencies |
|||
./terraform init |
|||
|
|||
# show what will done |
|||
./terraform plan |
|||
|
|||
# let terraform create the resources specified in .tf file in same directory |
|||
./terraform apply |
|||
|
|||
# you can also use "terraform apply -auto-approve" to prevent terraform from asking back whether it should proceed |
|||
|
|||
# among the benefits of terraform, is that is deploys the resources rather quick. It identifies dependencies and |
|||
# deploys independent resources in parallel. |
|||
# "terraform graph" creates a dependency graph of the resource specified in the .tf file |
|||
# another benefit of terraform is, that it does the heavy lifting to support the APIs of multiple cloud |
|||
# providers and supports way more features and cloud services than, e.g., libcloud, hence it's quite popular |
|||
# |
|||
# among the drawbacks however is, that it comes with its own definition language and does not offer the full |
|||
# flexibility of a programming language. In this regard, libcloud, boto3, openstack-sdk etc. are way more flexible |
|||
# |
|||
# we discuss different cloud service deployment solutions and their pros/cons in the course |
@ -0,0 +1,6 @@ |
|||
#!/bin/bash |
|||
|
|||
# let terraform remove the resources specified in .tf file in same directory |
|||
./terraform destroy |
|||
|
|||
# you can also use "terraform destroy -auto-approve" to prevent terraform from asking back whether it should proceed |
@ -0,0 +1,179 @@ |
|||
# |
|||
# Cluster Config |
|||
# |
|||
docker_root_dir: /var/lib/docker |
|||
enable_cluster_alerting: false |
|||
enable_cluster_monitoring: false |
|||
enable_network_policy: false |
|||
local_cluster_auth_endpoint: |
|||
enabled: true |
|||
name: openstack-rke |
|||
# |
|||
# Rancher Config |
|||
# |
|||
rancher_kubernetes_engine_config: |
|||
##################################################################### |
|||
# |
|||
# Config for OpenStack @ NetLab Hochschule Fulda Start |
|||
# |
|||
# Paste the following section into rancher_kubernetes_engine_config |
|||
# be sure to use correct indention, if in doubt, use YAML syntax |
|||
# checker |
|||
# |
|||
# You need to replace tenant-id with your project id, you can see |
|||
# the id, e.g., in the OpenStack Web Interface (Horizon) here: |
|||
# - https://private-cloud.informatik.hs-fulda.de/project/api_access/view_credentials/ |
|||
# |
|||
# Replace floating-network-id with the id of the network "public1". |
|||
# Click in network "public1" here: |
|||
# - https://private-cloud.informatik.hs-fulda.de/project/networks/ |
|||
# and use the value shown for ID. |
|||
# |
|||
# Replace subnet-id with the id of the subnet (not network!) that you |
|||
# use for your RKE node instances. If you use network |
|||
# "my-terraform-rancher-network-1" you can got to: |
|||
# - https://private-cloud.informatik.hs-fulda.de/project/networks/ |
|||
# click on my-terraform-rancher-network-1, then click on its subnet |
|||
# my-terraform-rancher-subnet-1, and use the shown ID of the subnet. |
|||
# |
|||
# Replace the router-id with the id of your router. Go to: |
|||
# - https://private-cloud.informatik.hs-fulda.de/project/routers/ |
|||
# click on the router you use for the network of your RKE instances |
|||
# and use the shown ID of this router. |
|||
# |
|||
# Replace password with the password of your groups' OpenStack |
|||
# account |
|||
# |
|||
# You can also see other config options in RKE docu here: |
|||
# https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/openstack/ |
|||
# |
|||
##################################################################### |
|||
cloud_provider: |
|||
name: openstack |
|||
openstackCloudProvider: |
|||
block_storage: |
|||
ignore-volume-az: true |
|||
trust-device-path: false |
|||
global: |
|||
auth-url: 'https://private-cloud.informatik.hs-fulda.de:5000' |
|||
domain-name: Default |
|||
tenant-id: <id of your project here> |
|||
username: IntServ19 |
|||
password: <your password here> |
|||
load_balancer: |
|||
create-monitor: false |
|||
floating-network-id: <id of network public1> |
|||
lb-version: v2 |
|||
manage-security-groups: true |
|||
monitor-max-retries: 0 |
|||
subnet-id: <id of the subnet your use for rke instances> |
|||
use-octavia: true |
|||
metadata: |
|||
request-timeout: 0 |
|||
route: |
|||
router-id: <id of the router you use for the rke instances> |
|||
##################################################################### |
|||
# |
|||
# Config for OpenStack @ NetLab Hochschule Fulda End |
|||
# |
|||
##################################################################### |
|||
addon_job_timeout: 45 |
|||
authentication: |
|||
strategy: x509 |
|||
dns: |
|||
nodelocal: |
|||
ip_address: '' |
|||
node_selector: null |
|||
update_strategy: {} |
|||
enable_cri_dockerd: false |
|||
ignore_docker_version: true |
|||
# |
|||
# # Currently only nginx ingress provider is supported. |
|||
# # To disable ingress controller, set `provider: none` |
|||
# # To enable ingress on specific nodes, use the node_selector, eg: |
|||
# provider: nginx |
|||
# node_selector: |
|||
# app: ingress |
|||
# |
|||
ingress: |
|||
default_backend: false |
|||
default_ingress_class: true |
|||
http_port: 0 |
|||
https_port: 0 |
|||
provider: nginx |
|||
kubernetes_version: v1.21.8-rancher1-1 |
|||
monitoring: |
|||
provider: metrics-server |
|||
replicas: 1 |
|||
# |
|||
# If you are using calico on AWS |
|||
# |
|||
# network: |
|||
# plugin: calico |
|||
# calico_network_provider: |
|||
# cloud_provider: aws |
|||
# |
|||
# # To specify flannel interface |
|||
# |
|||
# network: |
|||
# plugin: flannel |
|||
# flannel_network_provider: |
|||
# iface: eth1 |
|||
# |
|||
# # To specify flannel interface for canal plugin |
|||
# |
|||
# network: |
|||
# plugin: canal |
|||
# canal_network_provider: |
|||
# iface: eth1 |
|||
# |
|||
network: |
|||
mtu: 0 |
|||
options: |
|||
flannel_backend_type: vxlan |
|||
plugin: canal |
|||
rotate_encryption_key: false |
|||
# |
|||
# services: |
|||
# kube-api: |
|||
# service_cluster_ip_range: 10.43.0.0/16 |
|||
# kube-controller: |
|||
# cluster_cidr: 10.42.0.0/16 |
|||
# service_cluster_ip_range: 10.43.0.0/16 |
|||
# kubelet: |
|||
# cluster_domain: cluster.local |
|||
# cluster_dns_server: 10.43.0.10 |
|||
# |
|||
services: |
|||
etcd: |
|||
backup_config: |
|||
enabled: true |
|||
interval_hours: 12 |
|||
retention: 6 |
|||
safe_timestamp: false |
|||
timeout: 300 |
|||
creation: 12h |
|||
extra_args: |
|||
election-timeout: 5000 |
|||
heartbeat-interval: 500 |
|||
gid: 0 |
|||
retention: 72h |
|||
snapshot: false |
|||
uid: 0 |
|||
kube_api: |
|||
always_pull_images: false |
|||
pod_security_policy: false |
|||
secrets_encryption_config: |
|||
enabled: false |
|||
service_node_port_range: 30000-32767 |
|||
ssh_agent_auth: false |
|||
upgrade_strategy: |
|||
max_unavailable_controlplane: '1' |
|||
max_unavailable_worker: 10% |
|||
node_drain_input: |
|||
delete_local_data: false |
|||
force: false |
|||
grace_period: -1 |
|||
ignore_daemon_sets: true |
|||
timeout: 120 |
|||
windows_prefered_cluster: false |
@ -0,0 +1,49 @@ |
|||
{ |
|||
"driver": "openstack", |
|||
"name": "openstack-template", |
|||
"openstackConfig": { |
|||
"activeTimeout": "200", |
|||
"applicationCredentialId": "", |
|||
"applicationCredentialName": "", |
|||
"applicationCredentialSecret": "", |
|||
"authUrl": "https://private-cloud.informatik.hs-fulda.de:5000", |
|||
"availabilityZone": "nova", |
|||
"bootFromVolume": false, |
|||
"cacert": "", |
|||
"configDrive": false, |
|||
"domainId": "", |
|||
"domainName": "Default", |
|||
"endpointType": "", |
|||
"flavorId": "", |
|||
"flavorName": "m1.medium", |
|||
"floatingipPool": "public1", |
|||
"imageId": "", |
|||
"imageName": "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image", |
|||
"insecure": false, |
|||
"ipVersion": "4", |
|||
"keypairName": "rancher-key", |
|||
"netId": "", |
|||
"netName": "my-terraform-rancher-network-1", |
|||
"novaNetwork": false, |
|||
"region": "RegionOne", |
|||
"secGroups": "my-terraform-rancher-secgroup", |
|||
"sshPort": "22", |
|||
"sshUser": "ubuntu", |
|||
"tenantDomainId": "", |
|||
"tenantDomainName": "Default", |
|||
"tenantId": "", |
|||
"tenantName": "IntServ19", |
|||
"userDataFile": "", |
|||
"userDomainId": "", |
|||
"userDomainName": "Default", |
|||
"userId": "", |
|||
"username": "IntServ19", |
|||
"password": "<your password here>", |
|||
"volumeDevicePath": "", |
|||
"volumeId": "", |
|||
"volumeName": "", |
|||
"volumeSize": "0", |
|||
"volumeType": "" |
|||
}, |
|||
"type": "nodeTemplate", |
|||
} |
@ -0,0 +1,500 @@ |
|||
# Define IntServ group number |
|||
# TODO: change to use OS env vars etc. |
|||
variable "group_number" { |
|||
type = string |
|||
default = "19" |
|||
} |
|||
|
|||
## OpenStack credentials can be used in a more secure way by using |
|||
## cloud.yaml from https://private-cloud.informatik.hs-fulda.de/project/api_access/clouds.yaml/ |
|||
|
|||
# Define OpenStack credentials, project config etc. |
|||
locals { |
|||
auth_url = "https://private-cloud.informatik.hs-fulda.de:5000/v3" |
|||
user_name = "IntServ${var.group_number}" |
|||
user_password = "<password of your group here, private-cloud is only reachable via vpn>" |
|||
tenant_name = "IntServ${var.group_number}" |
|||
#network_name = "IntServ${var.group_number}-net" |
|||
router_name = "IntServ${var.group_number}-router" |
|||
image_name = "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image" |
|||
flavor_name = "m1.medium" |
|||
region_name = "RegionOne" |
|||
rke_flavor_name = "m1.medium" |
|||
availability_zone = "nova" |
|||
domain_name = "Default" |
|||
# possibly set floating_ip_pool = "" to avoid assigning floating ips to |
|||
# every created node and use only load balancer as frontend, however needed |
|||
# for node port forwarding etc. using kube proxy |
|||
floating_ip_pool = "public1" |
|||
ssh_user = "ubuntu" |
|||
} |
|||
|
|||
# Define OpenStack provider |
|||
terraform { |
|||
required_version = ">= 0.14.0" |
|||
required_providers { |
|||
openstack = { |
|||
source = "terraform-provider-openstack/openstack" |
|||
version = ">= 1.46.0" |
|||
} |
|||
rancher2 = { |
|||
source = "rancher/rancher2" |
|||
version = ">= 1.22.2" |
|||
} |
|||
} |
|||
} |
|||
|
|||
# Configure the OpenStack Provider |
|||
provider "openstack" { |
|||
user_name = local.user_name |
|||
tenant_name = local.tenant_name |
|||
password = local.user_password |
|||
auth_url = local.auth_url |
|||
region = local.region_name |
|||
use_octavia = true |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create keypair |
|||
# |
|||
########################################################################### |
|||
|
|||
# import keypair, if public_key is not specified, create new keypair to use |
|||
resource "openstack_compute_keypair_v2" "terraform-rancher-keypair" { |
|||
name = "my-terraform-rancher-pubkey" |
|||
# public_key = file("~/srieger_rsa.pub") |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create security group |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_secgroup_v2" "terraform-rancher-secgroup" { |
|||
name = "my-terraform-rancher-secgroup" |
|||
description = "for terraform rancher instances" |
|||
} |
|||
|
|||
# TODO: possibly cleanup unnecessary ports? |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-ssh" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 22 |
|||
port_range_max = 22 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-http" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 80 |
|||
port_range_max = 80 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-https" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 443 |
|||
port_range_max = 443 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-2376" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 2376 |
|||
port_range_max = 2376 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-2379" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 2379 |
|||
port_range_max = 2379 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-2380" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 2380 |
|||
port_range_max = 2380 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-6443" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 6443 |
|||
port_range_max = 6443 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-9099" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 9099 |
|||
port_range_max = 9099 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-10250" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 10250 |
|||
port_range_max = 10250 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-10254" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "tcp" |
|||
port_range_min = 10254 |
|||
port_range_max = 10254 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
resource "openstack_networking_secgroup_rule_v2" "terraform-secgroup-rule-8472" { |
|||
direction = "ingress" |
|||
ethertype = "IPv4" |
|||
protocol = "udp" |
|||
port_range_min = 8472 |
|||
port_range_max = 8472 |
|||
#remote_ip_prefix = "0.0.0.0/0" |
|||
security_group_id = openstack_networking_secgroup_v2.terraform-rancher-secgroup.id |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create network |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_networking_network_v2" "terraform-rancher-network-1" { |
|||
name = "my-terraform-rancher-network-1" |
|||
admin_state_up = "true" |
|||
} |
|||
|
|||
resource "openstack_networking_subnet_v2" "terraform-rancher-subnet-1" { |
|||
name = "my-terraform-rancher-subnet-1" |
|||
network_id = openstack_networking_network_v2.terraform-rancher-network-1.id |
|||
cidr = "192.168.254.0/24" |
|||
dns_nameservers = [ "192.168.76.253" ] |
|||
ip_version = 4 |
|||
} |
|||
|
|||
data "openstack_networking_router_v2" "router-1" { |
|||
name = local.router_name |
|||
} |
|||
|
|||
resource "openstack_networking_router_interface_v2" "router_interface_1" { |
|||
router_id = data.openstack_networking_router_v2.router-1.id |
|||
subnet_id = openstack_networking_subnet_v2.terraform-rancher-subnet-1.id |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create instances |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "openstack_compute_instance_v2" "terraform-rancher-instance-1" { |
|||
name = "my-terraform-rancher-instance-1" |
|||
image_name = local.image_name |
|||
flavor_name = local.flavor_name |
|||
key_pair = openstack_compute_keypair_v2.terraform-rancher-keypair.name |
|||
security_groups = [openstack_networking_secgroup_v2.terraform-rancher-secgroup.name] |
|||
|
|||
network { |
|||
uuid = openstack_networking_network_v2.terraform-rancher-network-1.id |
|||
} |
|||
|
|||
user_data = <<-EOF |
|||
#!/bin/bash |
|||
apt-get update |
|||
apt-get -y upgrade |
|||
curl https://releases.rancher.com/install-docker/20.10.sh | sh |
|||
sudo docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 --env CATTLE_BOOTSTRAP_PASSWORD=this-is-not-a-secure-bootstrap-pw rancher/rancher |
|||
#sudo docker ps |
|||
#sudo docker logs $(sudo docker ps | grep rancher | cut -d " " -f 1) 2>&1 | grep "Bootstrap Password:" |
|||
EOF |
|||
|
|||
depends_on = [ |
|||
openstack_networking_subnet_v2.terraform-rancher-subnet-1 |
|||
] |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# assign floating ip to rancher instance |
|||
# |
|||
########################################################################### |
|||
resource "openstack_networking_floatingip_v2" "fip_1" { |
|||
pool = "public1" |
|||
} |
|||
|
|||
resource "openstack_compute_floatingip_associate_v2" "fip_1" { |
|||
floating_ip = "${openstack_networking_floatingip_v2.fip_1.address}" |
|||
instance_id = "${openstack_compute_instance_v2.terraform-rancher-instance-1.id}" |
|||
} |
|||
|
|||
output "floating_ip" { |
|||
value = openstack_networking_floatingip_v2.fip_1 |
|||
} |
|||
|
|||
########################################################################### |
|||
# |
|||
# bootstrap rancher |
|||
# |
|||
########################################################################### |
|||
|
|||
# Provider bootstrap config |
|||
provider "rancher2" { |
|||
alias = "bootstrap" |
|||
|
|||
api_url = "https://${openstack_networking_floatingip_v2.fip_1.address}" |
|||
bootstrap = true |
|||
insecure = true |
|||
# takes roughly ~7 minutes currently |
|||
timeout = "600s" |
|||
} |
|||
|
|||
# Create a new rancher2_bootstrap for Rancher v2.6.0 and above |
|||
resource "rancher2_bootstrap" "admin" { |
|||
provider = rancher2.bootstrap |
|||
initial_password = "this-is-not-a-secure-bootstrap-pw" |
|||
password = "this-is-not-a-secure-admin-pw" |
|||
telemetry = true |
|||
token_update=true |
|||
} |
|||
|
|||
# Rancher2 administration provider |
|||
provider "rancher2" { |
|||
alias = "admin" |
|||
|
|||
api_url = "https://${openstack_networking_floatingip_v2.fip_1.address}" |
|||
insecure = true |
|||
# ca_certs = data.kubernetes_secret.rancher_cert.data["ca.crt"] |
|||
token_key = rancher2_bootstrap.admin.token |
|||
} |
|||
|
|||
########################################################################### |
|||
# |
|||
# enable rancher node driver openstack |
|||
# |
|||
########################################################################### |
|||
|
|||
#data "rancher2_node_driver" "OpenStack" { |
|||
# provider = rancher2.admin |
|||
# name = "openstack" |
|||
#} |
|||
|
|||
# Create a new rancher2 Node Driver |
|||
# TODO: creates a new builtin driver, maybe better to change existing one |
|||
resource "rancher2_node_driver" "OpenStack" { |
|||
provider = rancher2.admin |
|||
name = "openstack" |
|||
active = true |
|||
builtin = true |
|||
url = "local://" |
|||
# external_id = data.rancher2_node_driver.OpenStack |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create rancher node template for hsfd openstack |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "rancher2_node_template" "hsfd-rancher-openstack" { |
|||
provider = rancher2.admin |
|||
name = "hsfd-rancher-openstack" |
|||
driver_id = rancher2_node_driver.OpenStack.id |
|||
openstack_config { |
|||
auth_url = local.auth_url |
|||
availability_zone = local.availability_zone |
|||
region = local.region_name |
|||
username = local.user_name |
|||
# TODO: (Optional/Sensitive) OpenStack password. Mandatory on Rancher v2.0.x and v2.1.x. Use rancher2_cloud_credential from Rancher v2.2.x (string) |
|||
password = local.user_password |
|||
active_timeout = "200" |
|||
domain_name = local.domain_name |
|||
boot_from_volume = false |
|||
flavor_name = local.rke_flavor_name |
|||
floating_ip_pool = local.floating_ip_pool |
|||
image_name = local.image_name |
|||
ip_version = "4" |
|||
keypair_name = openstack_compute_keypair_v2.terraform-rancher-keypair.name |
|||
net_id = openstack_networking_network_v2.terraform-rancher-network-1.id |
|||
sec_groups = openstack_networking_secgroup_v2.terraform-rancher-secgroup.name |
|||
ssh_user = local.ssh_user |
|||
private_key_file = openstack_compute_keypair_v2.terraform-rancher-keypair.private_key |
|||
tenant_name = local.tenant_name |
|||
} |
|||
# TODO: get latest recommended string possible? |
|||
engine_install_url = "https://releases.rancher.com/install-docker/20.10.sh" |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create rke template for hsfd openstack |
|||
# |
|||
########################################################################### |
|||
|
|||
data "openstack_identity_project_v3" "my-project" { |
|||
name = local.tenant_name |
|||
} |
|||
|
|||
data "openstack_networking_network_v2" "public1" { |
|||
name = local.floating_ip_pool |
|||
} |
|||
|
|||
# Create a new rancher2 Cluster Template |
|||
resource "rancher2_cluster_template" "hsfd-rke-openstack" { |
|||
provider = rancher2.admin |
|||
name = "hsfd-rke-openstack" |
|||
template_revisions { |
|||
name = "V1" |
|||
cluster_config { |
|||
rke_config { |
|||
cloud_provider { |
|||
name = "openstack" |
|||
openstack_cloud_provider { |
|||
block_storage { |
|||
ignore_volume_az = true |
|||
trust_device_path = false |
|||
} |
|||
global { |
|||
auth_url = local.auth_url |
|||
domain_name = local.domain_name |
|||
tenant_id = data.openstack_identity_project_v3.my-project.id |
|||
username = local.user_name |
|||
password = local.user_password |
|||
} |
|||
load_balancer { |
|||
create_monitor = false |
|||
floating_network_id = data.openstack_networking_network_v2.public1.id |
|||
lb_version = "v2" |
|||
manage_security_groups = true |
|||
monitor_max_retries = 0 |
|||
subnet_id = openstack_networking_subnet_v2.terraform-rancher-subnet-1.id |
|||
use_octavia = true |
|||
} |
|||
metadata { |
|||
request_timeout = 0 |
|||
} |
|||
route { |
|||
router_id = data.openstack_networking_router_v2.router-1.id |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
default = true |
|||
} |
|||
description = "Terraform RKE template for HSFD OpenStack" |
|||
} |
|||
|
|||
|
|||
|
|||
########################################################################### |
|||
# |
|||
# create rke demo cluster |
|||
# |
|||
########################################################################### |
|||
|
|||
resource "rancher2_cluster" "hsfd-rke-demo" { |
|||
provider = rancher2.admin |
|||
name = "hsfd-rke-demo" |
|||
cluster_template_id = rancher2_cluster_template.hsfd-rke-openstack.id |
|||
cluster_template_revision_id = rancher2_cluster_template.hsfd-rke-openstack.template_revisions.0.id |
|||
|
|||
# if instance is gone before deleting the cluster, we'll not be able to |
|||
# reach rke anymore |
|||
depends_on = [ |
|||
openstack_compute_instance_v2.terraform-rancher-instance-1, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-ssh, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-http, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-https, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2376, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2379, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2380, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-6443, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-9099, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-10250, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-10254, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-8472, |
|||
openstack_compute_floatingip_associate_v2.fip_1 |
|||
] |
|||
} |
|||
|
|||
# Create a new rancher2 Node Pool |
|||
resource "rancher2_node_pool" "pool1" { |
|||
provider = rancher2.admin |
|||
cluster_id = rancher2_cluster.hsfd-rke-demo.id |
|||
name = "ctrl-etcd-work" |
|||
hostname_prefix = "ctrl-etcd-work" |
|||
node_template_id = rancher2_node_template.hsfd-rancher-openstack.id |
|||
quantity = 1 |
|||
control_plane = true |
|||
etcd = true |
|||
worker = true |
|||
|
|||
# if instance is gone before deleting the cluster, we'll not be able to |
|||
# reach rke anymore |
|||
depends_on = [ |
|||
openstack_compute_instance_v2.terraform-rancher-instance-1, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-ssh, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-http, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-https, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2376, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2379, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-2380, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-6443, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-9099, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-10250, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-10254, |
|||
openstack_networking_secgroup_rule_v2.terraform-secgroup-rule-8472, |
|||
openstack_compute_floatingip_associate_v2.fip_1 |
|||
] |
|||
} |
@ -0,0 +1,20 @@ |
|||
# Consider using 'export TF_VAR_os_auth_url=$OS_AUTH_URL' |
|||
variable "os_auth_url"{} |
|||
# Consider using 'export TF_VAR_os_password=$OS_PASSWORD' |
|||
variable "os_password"{} |
|||
|
|||
module "rke" { |
|||
source = "remche/rke/openstack" |
|||
image_name = "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image" |
|||
public_net_name = "public1" |
|||
master_flavor_name = "m1.small" |
|||
worker_flavor_name = "m1.small" |
|||
os_auth_url = var.os_auth_url |
|||
os_password = var.os_password |
|||
#use_ssh_agent = false |
|||
#enable_loadbalancer = true |
|||
#use_octavia = true |
|||
wait_for_commands = ["while docker info ; [ $? -ne 0 ]; do echo wait for docker; sudo newgrp - docker ; sleep 30 ; done"] |
|||
user_data_file = "user-data.sh" |
|||
dns_servers = [ "192.168.76.253" ] |
|||
} |
@ -0,0 +1,6 @@ |
|||
#!/bin/bash |
|||
#apt-get update |
|||
#apt-get -y upgrade |
|||
curl https://releases.rancher.com/install-docker/20.10.sh | sh |
|||
groupadd docker |
|||
usermod -aG docker ubuntu |
@ -0,0 +1,11 @@ |
|||
module "controlplane" { |
|||
source = "remche/rke2/openstack" |
|||
cluster_name = var.cluster_name |
|||
dns_servers = var.dns_servers |
|||
write_kubeconfig = true |
|||
image_name = "Ubuntu 20.04 - Focal Fossa - 64-bit - Cloud Based Image" |
|||
flavor_name = "m1.medium" |
|||
public_net_name = "public1" |
|||
use_ssh_agent = false |
|||
ssh_key_file = "/root/.ssh/id_rsa" |
|||
} |
@ -0,0 +1,5 @@ |
|||
output "server_ip" { |
|||
description = "Server floating IP" |
|||
value = module.controlplane.floating_ip[0] |
|||
sensitive = true |
|||
} |
@ -0,0 +1,9 @@ |
|||
variable "cluster_name" { |
|||
type = string |
|||
default = "minimal" |
|||
} |
|||
|
|||
variable "dns_servers" { |
|||
type = list(string) |
|||
default = ["192.168.76.253"] |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue