The available selectable options could also be checked using the Opnstack CLI commands : | Code Block |
|---|
$ openstack keypair list
$ openstack image list
$ openstack flavor list
$ openstack network list |
Create a directory for your configuration and change directory into it: | Code Block |
|---|
$ mkdir example-magnum-k8s
$ cd example-magnum-k8s |
Create the main configuration file to define the infrastructure: | Code Block |
|---|
$ touch main.tf |
Open the main.tf file in a text editor and fill it as needed like in the following minimal example : | Code Block |
|---|
# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
}
}
}
provider "openstack" {
versioncloud = "~> 1.53.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
# ...
}
resource "openstack_compute_instance_v2" "server-name"openstack"
}
variable "magnum_cluster_template" {
description = <<EOT
The name of the Magnum cluster template to create the kubernetes cluster with
You may view a list of available template by running `openstack coe cluster template list`
EOT
type = string
default = "cluster-template-name"
}
data "openstack_containerinfra_clustertemplate_v1" "clustertemplate" {
name = var.magnum_cluster_template
}
resource "openstack_containerinfra_cluster_v1" "cluster" {
name = "servercluster-name"
image_namecluster_template_id = data.openstack_containerinfra_clustertemplate_v1.clustertemplate.id
master_count = "imagemaster-namecount"
master_flavor_name = "master-flavor-name"
key_pairnode_count = "worker-node-count"
flavor = "keyworker-node-flavor-name"
security_groupskeypair = "ssh-keypair"
fixed_network = ["secgroupprivate-network-name-1", "secgroup-name-2", ...]
network {
name = "network-name"
}
}"
fixed_subnet = "private-subnet-name"
labels = {
monitoring_enabled = "true"
auto_healing_enabled = "true"
}
merge_labels = "true"
create_timeout = "180"
}
|
Replace the following fields as desired: - server
cluster-template-name - image
cluster-name flavor master- namecount keymaster-flavor-name secgroupworker-node-count worker-node-flavor name-1 , secgroup-name-2network-name
For instance for ECMWF can be : | Code Block |
|---|
resource "openstack_compute_instance_v2" "test-server" {
name = "test-server"
image_name = "Rocky-9.4-20240717094419"
flavor_name = "2cpu-2gbmem-30gbdisk"
key_pair = "mykey"
security_groups = ["default", "ssh"]
network {
name = "private-cci1-ewcloud-ms-nmhs-project"
}
} |
Initialize the directory : | Section |
|---|
| | Column |
|---|
Terraform | Code Block |
|---|
$ terraform init |
|
|
Review the required changes: | Code Block |
|---|
$ terraform plan |
Apply the changes to create the Kubernetes cluster : | Section |
|---|
| | Column |
|---|
Terraform | Code Block |
|---|
$ terraform apply |
|
|
Status can be then seen via: | Section |
|---|
| | Column |
|---|
Terraform | Code Block |
|---|
$ terraform show |
|
|
The created cluster can be then destroyed by simply running: | Section |
|---|
| | Column |
|---|
Terraform | Code Block |
|---|
$ terraform destroy |
|
|
|