From c9acf0d05963e507954d96d7fb8b00c2d78b191f Mon Sep 17 00:00:00 2001 From: Chandu Paladugu <59978378+devopstoday11@users.noreply.github.com> Date: Wed, 27 Jul 2022 02:49:16 -0500 Subject: [PATCH 001/107] Initial commit --- LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 2 files changed, 203 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3686bc2 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# controlplane-dataplane +TalOS cluster setup for control-plane & data-plane on different cloud providers and on-premise From 6a89e9b5cc8b2f70b074a2b77512cb005d235460 Mon Sep 17 00:00:00 2001 From: "mend-bolt-for-github[bot]" <42819689+mend-bolt-for-github[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 07:49:21 +0000 Subject: [PATCH 002/107] Add .whitesource configuration file --- .whitesource | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .whitesource diff --git a/.whitesource b/.whitesource new file mode 100644 index 0000000..9c7ae90 --- /dev/null +++ b/.whitesource @@ -0,0 +1,14 @@ +{ + "scanSettings": { + "baseBranches": [] + }, + "checkRunSettings": { + "vulnerableCheckRunConclusionLevel": "failure", + "displayMode": "diff", + "useMendCheckNames": true + }, + "issueSettings": { + "minSeverityLevel": "LOW", + "issueType": "DEPENDENCY" + } +} \ No newline at end of file From b9a795ddfc46ca57c7eee18d548c184f003f0c6a Mon Sep 17 00:00:00 2001 From: DeepSource Bot Date: Mon, 1 Aug 2022 04:21:58 +0000 Subject: [PATCH 003/107] Add .deepsource.toml --- .deepsource.toml | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 0000000..4d900b3 --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,54 @@ +version = 1 + +[[analyzers]] +name = "terraform" +enabled = true + +[[analyzers]] +name = "secrets" +enabled = true + +[[analyzers]] +name = "javascript" +enabled = true + +[[analyzers]] +name = "docker" +enabled = true + +[[analyzers]] +name = "csharp" +enabled = true + +[[analyzers]] +name = "python" +enabled = true + + [analyzers.meta] + runtime_version = "3.x.x" + +[[analyzers]] +name = "sql" +enabled = true + +[[analyzers]] +name = "test-coverage" +enabled = true + +[[analyzers]] +name = "shell" +enabled = true + +[[analyzers]] +name = "rust" +enabled = true + + [analyzers.meta] + msrv = "1.30.0" + +[[analyzers]] +name = "go" +enabled = true + + [analyzers.meta] + import_root = "github.com/kube-tarian/controlplane-dataplane" \ No newline at end of file From 61feec077083d4ae087380dbe8ef54e3489bace9 Mon Sep 17 00:00:00 2001 From: DeepSource Bot Date: Mon, 1 Aug 2022 04:28:45 +0000 Subject: [PATCH 004/107] Update .deepsource.toml --- .deepsource.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.deepsource.toml b/.deepsource.toml index 4d900b3..775a560 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -1,5 +1,13 @@ version = 1 +[[analyzers]] +name = "ansible" +enabled = true + +[[analyzers]] +name = "ruby" +enabled = true + [[analyzers]] name = "terraform" enabled = true From cd14a55cc0b32e07ef0deb18915502b7e07ffeb7 Mon Sep 17 00:00:00 2001 From: DeepSource Bot Date: Mon, 1 Aug 2022 04:56:47 +0000 Subject: [PATCH 005/107] Update .deepsource.toml --- .deepsource.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.deepsource.toml b/.deepsource.toml index 775a560..24fa9ec 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -59,4 +59,5 @@ name = "go" enabled = true [analyzers.meta] - import_root = "github.com/kube-tarian/controlplane-dataplane" \ No newline at end of file + import_root = "github.com/kube-tarian/controlplane-dataplane" + dependencies_vendored = true \ No newline at end of file From ed3703f4c489bc47ddb615b348cd319f99ff67bd Mon Sep 17 00:00:00 2001 From: root Date: Fri, 19 Aug 2022 04:10:15 -0400 Subject: [PATCH 006/107] adding initial version of talos controlplane --- aws/talos/main.tf | 185 ++++++++++++++++++++++++++++ aws/talos/outputs.tf | 72 +++++++++++ aws/talos/scripts/bootstrapetcd.sh | 39 ++++++ aws/talos/scripts/talosconfiggen.sh | 44 +++++++ aws/talos/values.tfvars | 12 ++ aws/talos/vars.tf | 50 ++++++++ 6 files changed, 402 insertions(+) create mode 100644 aws/talos/main.tf create mode 100644 aws/talos/outputs.tf create mode 100755 aws/talos/scripts/bootstrapetcd.sh create mode 100755 aws/talos/scripts/talosconfiggen.sh create mode 100644 aws/talos/values.tfvars create mode 100644 aws/talos/vars.tf diff --git a/aws/talos/main.tf b/aws/talos/main.tf new file mode 100644 index 0000000..7408040 --- /dev/null +++ b/aws/talos/main.tf @@ -0,0 +1,185 @@ +provider "aws" { + region = var.region + access_key = var.AWS_ACCESS_KEY + secret_key = var.AWS_SECRET_KEY +} + +data "aws_ami" "talos"{ + most_recent = true + name_regex = "^talos-v1.1.1-ap-south-1*" + owners = ["540036508848"] + + filter { + name = "architecture" + values = ["x86_64"] + } + +} + +module "vpc" { + source = "terraform-aws-modules/vpc/aws" + + name = var.vpcname + cidr = var.vpccidr + + azs = ["${var.region}a", "${var.region}b", "${var.region}c"] + private_subnets = [ var.privatesubnet ] + create_igw = true +} + +resource "aws_internet_gateway" "ig" { + vpc_id = "${module.vpc.vpc_id}" + tags = { + Name = "${var.vpcname}-igw" + } +} + + +resource "aws_route" "igwroute" { + route_table_id = module.vpc.vpc_main_route_table_id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +resource "aws_route" "privateigwroute" { + route_table_id = module.vpc.private_route_table_ids[0] + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +module "security_group" { + source = "terraform-aws-modules/security-group/aws" + + name = var.securitygroupname + description = "Security group for VPC" + vpc_id = module.vpc.vpc_id + + + ingress_cidr_blocks = ["0.0.0.0/0"] + ingress_rules = [ "k8s-apiserver" ] + + rules = { "k8s-apiserver" : [ 6443 , 6443 , "tcp" , "Apiserver" ] , "all-all": [ -1, -1, "icmp", "All protocols" ]} + + egress_rules = ["all-all"] + +} + + +module "alb" { + source = "terraform-aws-modules/alb/aws" + + name = var.albname + + load_balancer_type = "network" + + vpc_id = module.vpc.vpc_id + + subnets = [ "${element(module.vpc.private_subnets, 0)}","${element(module.vpc.private_subnets, 1)}" ] + +} + +resource "null_resource" "createtalosconfig" { + provisioner "local-exec" { + + command = "/bin/bash scripts/talosconfiggen.sh -h ${module.alb.lb_dns_name} -p 443" + + } + + depends_on = [ module.alb ] + +} + +data "local_file" "controllerfile" { + filename = "scripts/controlplane.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +data "local_file" "workerfile" { + filename = "scripts/worker.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +resource "aws_instance" talos_master_instance { + + count = var.mastercount + + ami = data.aws_ami.talos.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = "${element(module.vpc.private_subnets, 0)}" + + user_data = data.local_file.controllerfile.content + associate_public_ip_address = true + + depends_on = [ data.local_file.controllerfile ] + + tags = { + Name = "talosmaster" + } + + +} + +resource "aws_instance" talos_worker_instance { + + count = var.workercount + + ami = data.aws_ami.talos.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = "${element(module.vpc.private_subnets, 0)}" + + user_data = data.local_file.workerfile.content + associate_public_ip_address = false + + depends_on = [ data.local_file.workerfile ] + + tags = { + Name = "talosworker" + } + + +} + + +resource "aws_lb_target_group" "talos-tg" { + name = "talos-tg" + port = 6443 + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + + +resource "aws_lb_target_group_attachment" "registertarget" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.talos-tg.arn + target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_master_instance ] + +} + + +resource "aws_alb_listener" "talos-listener" { + load_balancer_arn = module.alb.lb_arn + port = 443 + protocol = "TCP" + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.talos-tg.arn + } + +} + +resource "null_resource" "bootstrap_etcd" { + provisioner "local-exec" { + command = "/bin/bash scripts/bootstrapetcd.sh ${aws_instance.talos_master_instance.0.public_ip}" + + } + depends_on = [ aws_instance.talos_master_instance ] + +} diff --git a/aws/talos/outputs.tf b/aws/talos/outputs.tf new file mode 100644 index 0000000..235fc2a --- /dev/null +++ b/aws/talos/outputs.tf @@ -0,0 +1,72 @@ +output "ami_name" { + value = data.aws_ami.talos.id + description = "AMI used for talos installation" + +} + +output "vpc_id" { + value = module.vpc.vpc_id + description = "ID of the VPC created" +} + +output "private_route_table_ids" { + value = module.vpc.public_route_table_ids + description = "ID of the private route tables created" +} + +output "igw_id" { + value = aws_internet_gateway.ig.id + description = "ID of the Internet gateway created" +} + +output "security_group_id" { + value = module.security_group.security_group_id + description = "ID of the Security group Created" + +} + +output "aws_lb_target_group_name" { + value = module.alb.target_group_names + description = "List of target groups created" + +} + +output "alb_id" { + value = module.alb.lb_id + description = "ID of the alb created" + +} + +output "master_instance_ids" { + value = aws_instance.talos_master_instance.*.host_id + description = "instance id's of talos master nodes" + +} + +output "master_instance_private_ips" { + value = aws_instance.talos_master_instance.*.private_ip + description = "List of private ip's of master nodes" +} + +output "master_tags" { + value = aws_instance.talos_master_instance.*.tags_all + description = "All tags that are tagged for worker" + +} + +output "worker_instance_ids" { + value = aws_instance.talos_worker_instance.*.host_id + description = "instance id's of talos worker nodes" + +} + +output "worker_instance_private_ips" { + value = aws_instance.talos_worker_instance.*.private_ip + description = "List of private ip's worker nodes" +} + +output "worker_tags" { + value = aws_instance.talos_worker_instance.*.tags_all + description = "All tags that are tagged for worker" + +} diff --git a/aws/talos/scripts/bootstrapetcd.sh b/aws/talos/scripts/bootstrapetcd.sh new file mode 100755 index 0000000..79afcdc --- /dev/null +++ b/aws/talos/scripts/bootstrapetcd.sh @@ -0,0 +1,39 @@ +#!/bin/bash + + +TALOS_API_IP = 50000 + +if [ $# -ne 1 ] +then + echo "Usage: $0 nodeipaddress" +fi + +echo "node ip address is:" +echo $1 + +remoteip= $1 +count= 0 + +while [ $count >= 20 ] +do + echo "Waiting for Talos API to be up...." + nc -zv $remoteip $TALOS_API_IP + if [ $? -eq 0 ] + then + echo "Talos API is up bootstrapping etcd" + talosctl --talosconfig out/talosconfig config endpoint $remoteip + talosctl --talosconfig out/talosconfig config node $remoteip + talosctl --talosconfig out/talosconfig bootstrap $remoteip + break + fi + sleep 30 + count += 1 +done + +if [ $count >= 20 ] +then + echo "ERROR: Talos API is not up " +fi + +echo "ETCD bootstrap Finished" + diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh new file mode 100755 index 0000000..b8e6c9a --- /dev/null +++ b/aws/talos/scripts/talosconfiggen.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +if [ $# -ne 2 ] +then + echo "Usage: $0 dnsname port" +fi + +while getopts "h:p" OPTION; +do + case "${OPTION}" in + h) + dnsname="$OPTARG" + ;; + p) + port="$OPTARG" + ;; + esac +done +if ! command -v talosctl &> /dev/null +then + echo "Installing talos cli" + curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-amd64 + chmod +x /usr/local/bin/talosctl +else + echo "talosctl is already installed skipping.." +fi + +echo ${dnsname} +echo ${4} +talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ +talosctl validate --config scripts/controlplane.yaml --mode cloud +if [ $? -eq 1 ] +then + echo "scripts/controlplane.yaml is invalid" + exit +fi + +talosctl validate --config scripts/worker.yaml --mode cloud + +if [ $? -eq 1 ] +then + echo "scripts/worker.yaml is invalid" + exit +fi diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars new file mode 100644 index 0000000..c028207 --- /dev/null +++ b/aws/talos/values.tfvars @@ -0,0 +1,12 @@ +AWS_ACCESS_KEY = +AWS_SECRET_KEY = +albname = +privatesubnet = +region = +securitygroupname = +vpccidr = +vpcname = +instance_type = +nodemonitoringenabled = +mastercount = +workercount = diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf new file mode 100644 index 0000000..2ffbfb8 --- /dev/null +++ b/aws/talos/vars.tf @@ -0,0 +1,50 @@ +variable "AWS_ACCESS_KEY" { + description = "AWS Access key" +} + +variable "AWS_SECRET_KEY" { + description = "AWS Secret key" +} + +variable "region" { + description = "AWS Region to deploy the resources" +} + +variable "privatesubnet" { + description = "vpc private subnet cidr" +} + +variable "vpcname" { + description = "Name of the VPC to be created" +} + +variable "vpccidr" { + description = "VPC cidr to be used while creating VPC" +} + +variable "securitygroupname" { + description = "Security group name to be created " + +} + +variable "albname" { + description = "AWS loadbalancer name" + +} + +variable "instance_type" { + description = "aws instance type to be used" +} + +variable "nodemonitoringenabled" { + description = "aws monitoring enabled/disabled mark true/false" +} + +variable "mastercount" { + description = "talos master node count" +} + +variable "workercount" { + description = "talos worker node count" +} + From 3eeb6a6b4fb56f99f7d551276e014e8feb7f98c9 Mon Sep 17 00:00:00 2001 From: Pramod V Date: Fri, 19 Aug 2022 14:11:14 -0400 Subject: [PATCH 007/107] Fixing syntax --- aws/talos/main.tf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) mode change 100644 => 100755 aws/talos/main.tf diff --git a/aws/talos/main.tf b/aws/talos/main.tf old mode 100644 new mode 100755 index 7408040..172ae2d --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -28,7 +28,7 @@ module "vpc" { } resource "aws_internet_gateway" "ig" { - vpc_id = "${module.vpc.vpc_id}" + vpc_id = module.vpc.vpc_id tags = { Name = "${var.vpcname}-igw" } @@ -74,7 +74,7 @@ module "alb" { vpc_id = module.vpc.vpc_id - subnets = [ "${element(module.vpc.private_subnets, 0)}","${element(module.vpc.private_subnets, 1)}" ] + subnets = [ element(module.vpc.private_subnets, 0),element(module.vpc.private_subnets, 1) ] } @@ -107,7 +107,7 @@ resource "aws_instance" talos_master_instance { instance_type = var.instance_type monitoring = var.nodemonitoringenabled vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" + subnet_id = element(module.vpc.private_subnets, 0) user_data = data.local_file.controllerfile.content associate_public_ip_address = true @@ -129,7 +129,7 @@ resource "aws_instance" talos_worker_instance { instance_type = var.instance_type monitoring = var.nodemonitoringenabled vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" + subnet_id = element(module.vpc.private_subnets, 0) user_data = data.local_file.workerfile.content associate_public_ip_address = false @@ -158,7 +158,7 @@ resource "aws_lb_target_group_attachment" "registertarget" { count = var.mastercount target_group_arn = aws_lb_target_group.talos-tg.arn - target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" + target_id = element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index) depends_on = [ aws_instance.talos_master_instance ] } @@ -167,7 +167,7 @@ resource "aws_lb_target_group_attachment" "registertarget" { resource "aws_alb_listener" "talos-listener" { load_balancer_arn = module.alb.lb_arn port = 443 - protocol = "TCP" + protocol = "HTTPS" default_action { type = "forward" target_group_arn = aws_lb_target_group.talos-tg.arn From 9391d78ef0b48cf64288aaa864cb7d0e9b5c7e48 Mon Sep 17 00:00:00 2001 From: Pramod V Date: Fri, 19 Aug 2022 14:17:22 -0400 Subject: [PATCH 008/107] Activate session tokens --- aws/talos/main.tf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 172ae2d..3ccc2fd 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -114,6 +114,10 @@ resource "aws_instance" talos_master_instance { depends_on = [ data.local_file.controllerfile ] + metadata_options { + http_tokens = "required" + } + tags = { Name = "talosmaster" } @@ -136,6 +140,10 @@ resource "aws_instance" talos_worker_instance { depends_on = [ data.local_file.workerfile ] + metadata_options { + http_tokens = "required" + } + tags = { Name = "talosworker" } From 652a1346047f10390eef6ee1c8dd446c633543d4 Mon Sep 17 00:00:00 2001 From: Pramod V Date: Fri, 19 Aug 2022 14:30:23 -0400 Subject: [PATCH 009/107] Fix shell code smells --- aws/talos/scripts/bootstrapetcd.sh | 22 +++++++++++----------- aws/talos/scripts/talosconfiggen.sh | 13 +++++++------ 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/aws/talos/scripts/bootstrapetcd.sh b/aws/talos/scripts/bootstrapetcd.sh index 79afcdc..c9a7c7a 100755 --- a/aws/talos/scripts/bootstrapetcd.sh +++ b/aws/talos/scripts/bootstrapetcd.sh @@ -3,34 +3,34 @@ TALOS_API_IP = 50000 -if [ $# -ne 1 ] +if [ "$#" -ne 1 ] then echo "Usage: $0 nodeipaddress" fi echo "node ip address is:" -echo $1 +echo "$1" -remoteip= $1 -count= 0 +remoteip="$1" +count=0 -while [ $count >= 20 ] +while [ "$count" -ge 20 ] do echo "Waiting for Talos API to be up...." - nc -zv $remoteip $TALOS_API_IP - if [ $? -eq 0 ] + nc -zv "$remoteip" "$TALOS_API_IP" + if [ "$?" -eq 0 ] then echo "Talos API is up bootstrapping etcd" - talosctl --talosconfig out/talosconfig config endpoint $remoteip - talosctl --talosconfig out/talosconfig config node $remoteip - talosctl --talosconfig out/talosconfig bootstrap $remoteip + talosctl --talosconfig out/talosconfig config endpoint "$remoteip" + talosctl --talosconfig out/talosconfig config node "$remoteip" + talosctl --talosconfig out/talosconfig bootstrap "$remoteip" break fi sleep 30 count += 1 done -if [ $count >= 20 ] +if [ "$count" -ge 20 ] then echo "ERROR: Talos API is not up " fi diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index b8e6c9a..afdc940 100755 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ $# -ne 2 ] +if [ "$#" -ne 2 ] then echo "Usage: $0 dnsname port" fi @@ -25,11 +25,12 @@ else echo "talosctl is already installed skipping.." fi -echo ${dnsname} -echo ${4} -talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ +echo "${dnsname}" +echo "${4}" +echo "${port}" +talosctl gen config talosconfig-userdata https://"${dnsname}":"${4}" --with-examples=false --with-docs=false --output-dir scripts/ talosctl validate --config scripts/controlplane.yaml --mode cloud -if [ $? -eq 1 ] +if [ "$?" -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit @@ -37,7 +38,7 @@ fi talosctl validate --config scripts/worker.yaml --mode cloud -if [ $? -eq 1 ] +if [ "$?" -eq 1 ] then echo "scripts/worker.yaml is invalid" exit From a46dbc09c00a8952543f28b7d55af35c3692466b Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 20 Aug 2022 00:06:16 +0530 Subject: [PATCH 010/107] Fix shell code smell --- aws/talos/scripts/talosconfiggen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index afdc940..0843664 100755 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -19,7 +19,7 @@ done if ! command -v talosctl &> /dev/null then echo "Installing talos cli" - curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-amd64 + curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-"$(uname -s | tr "[:upper:]" "[:lower:]")"-amd64 chmod +x /usr/local/bin/talosctl else echo "talosctl is already installed skipping.." From 641d81921e7619ff76ba83bf385c53b30933c16d Mon Sep 17 00:00:00 2001 From: Pramod V Date: Fri, 16 Sep 2022 12:52:09 -0400 Subject: [PATCH 011/107] Adding k3s --- README.md | 0 aws/talos/outputs.tf | 0 aws/talos/scripts/talosconfiggen.sh | 4 +- aws/talos/values.tfvars | 0 aws/talos/vars.tf | 0 k3s/main.tf | 201 ++++++++++++++++++++++++++++ k3s/output.tf | 72 ++++++++++ k3s/scripts/server_install.sh | 0 k3s/scripts/worker_install.sh | 0 k3s/vars.tf | 0 10 files changed, 275 insertions(+), 2 deletions(-) mode change 100644 => 100755 README.md mode change 100644 => 100755 aws/talos/outputs.tf mode change 100644 => 100755 aws/talos/values.tfvars mode change 100644 => 100755 aws/talos/vars.tf create mode 100644 k3s/main.tf create mode 100644 k3s/output.tf create mode 100644 k3s/scripts/server_install.sh create mode 100644 k3s/scripts/worker_install.sh create mode 100644 k3s/vars.tf diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/aws/talos/outputs.tf b/aws/talos/outputs.tf old mode 100644 new mode 100755 diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index afdc940..1ee02fb 100755 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -8,7 +8,7 @@ fi while getopts "h:p" OPTION; do case "${OPTION}" in - h) + h) dnsname="$OPTARG" ;; p) @@ -19,7 +19,7 @@ done if ! command -v talosctl &> /dev/null then echo "Installing talos cli" - curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-amd64 + curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-"$(uname -s | tr "[:upper:]" "[:lower:]")"-amd64 chmod +x /usr/local/bin/talosctl else echo "talosctl is already installed skipping.." diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars old mode 100644 new mode 100755 diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf old mode 100644 new mode 100755 diff --git a/k3s/main.tf b/k3s/main.tf new file mode 100644 index 0000000..cfb1858 --- /dev/null +++ b/k3s/main.tf @@ -0,0 +1,201 @@ +#Initialization of Provider +provider "aws" { + region = var.region + access_key = var.AWS_ACCESS_KEY + secret_key = var.AWS_SECRET_KEY +} + +#Initially taking amazon linux ami kernel +data "aws_ami" "amazonlinux"{ + most_recent = true + name_regex = "^Amazon Linux 2 Kernel 5.10 *" + owners = ["ami-06489866022e12a14"] + + filter { + name = "architecture" + values = ["x86_64"] + } + +} + +#Server initialization script to be run on ec2 bringup +data "template_cloudinit_config" "server" { + content_type = "text/x-shellscript" + content = templatefile("${path.module}/scripts/server_install.sh", { + k3s_token = var.k3s_token, + is_k3s_server = true, + k3s_url = aws_lb.k3s_server.dns_name, + k3s_tls_san = aws_lb.k3s_server.dns_name + }) + +} + + +#Worker initialization script +data "template_cloudinit_config" "worker" { + content_type = "text/x-shellscript" + content = templatefile("${path.module}/scripts/worker_install.sh", { + k3s_token = var.k3s_token, + is_k3s_server = false, + k3s_url = aws_lb.k3s_worker.dns_name, + k3s_tls_san = aws_lb.k3s_worker.dns_name + }) + +} + +#Creating VPC with multiple availability zones +module "vpc" { + source = "terraform-aws-modules/vpc/aws" + + name = var.vpcname + cidr = var.vpccidr + + azs = ["${var.region}a", "${var.region}b", "${var.region}c"] + private_subnets = [ var.privatesubnet ] + create_igw = true +} + +#AWS internet gateway creation for ec2 instance to connect to internet to get binaries +resource "aws_internet_gateway" "ig" { + vpc_id = module.vpc.vpc_id + tags = { + Name = "${var.vpcname}-igw" + } +} + +#Adding internet gateway to the main routing table +resource "aws_route" "igwroute" { + route_table_id = module.vpc.vpc_main_route_table_id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +##Adding internet gateway to the VPC routing table +resource "aws_route" "privateigwroute" { + route_table_id = module.vpc.private_route_table_ids[0] + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + + +#Create Security group to restrict only some ports (here 6443 mainly for apiserver) +module "security_group" { + source = "terraform-aws-modules/security-group/aws" + + name = var.securitygroupname + description = "Security group for VPC" + vpc_id = module.vpc.vpc_id + + + ingress_cidr_blocks = ["0.0.0.0/0"] + ingress_rules = [ "k8s-apiserver" ] + + rules = { "k8s-apiserver" : [ 6443 , 6443 , "tcp" , "Apiserver" ] , "all-all": [ -1, -1, "icmp", "All protocols" ]} + + egress_rules = ["all-all"] + +} + + +#Creating aws server loadbalancer +resource "aws_lb" "k3s_server" { + name = "k3s_server_lb" + internal = false + load_balancer_type = "application" + security_groups = [ module.security_group.security_group_id ] + subnets = [ element(module.vpc.private_subnets, 0) ] + +} + +#creating aws worker loadbalancer +resource "aws_lb" "k3s_worker" { + name = "k3s_worker_lb" + internal = false + load_balancer_type = "application" + security_groups = [ module.security_group.security_group_id ] + subnets = [ element(module.vpc.private_subnets, 0) ] + +} + + +#Initializing k3s master instances +resource "aws_instance" k3s_master_instance { + + count = var.mastercount + + ami = data.aws_ami.amazonlinux.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = element(module.vpc.private_subnets, 0) + + user_data = data.template_cloudinit_config.server.rendered + associate_public_ip_address = true + + metadata_options { + http_tokens = "required" + } + + tags = { + Name = "k3s-server" + } + + +} + +#Initializing k3s worker instances +resource "aws_instance" k3s_worker_instance { + + count = var.workercount + + ami = data.aws_ami.amazonlinux.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = element(module.vpc.private_subnets, 0) + + user_data = data.template_cloudinit_config.worker.rendered + associate_public_ip_address = false + + metadata_options { + http_tokens = "required" + } + + tags = { + Name = "k3s-worker" + } + + +} + +#Creating target group for apiserver +resource "aws_lb_target_group" "k3s-tg" { + name = "k3s-tg" + port = 6443 + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + +#Attaching instances to the target group +resource "aws_lb_target_group_attachment" "registertarget" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.k3s-tg.arn + target_id = element(split(",", join(",", aws_instance.k3s_master_instance.*.private_ip)), count.index) + depends_on = [ aws_instance.k3s_master_instance ] + +} + +#creating LB listener on 443 Port +resource "aws_alb_listener" "k3s-listener" { + load_balancer_arn = module.alb.lb_arn + port = 443 + protocol = "HTTPS" + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.k3s-tg.arn + } + +} diff --git a/k3s/output.tf b/k3s/output.tf new file mode 100644 index 0000000..db172f0 --- /dev/null +++ b/k3s/output.tf @@ -0,0 +1,72 @@ +output "ami_name" { + value = data.aws_ami.talos.id + description = "AMI used for talos installation" + +} + +output "vpc_id" { + value = module.vpc.vpc_id + description = "ID of the VPC created" +} + +output "private_route_table_ids" { + value = module.vpc.public_route_table_ids + description = "ID of the private route tables created" +} + +output "igw_id" { + value = aws_internet_gateway.ig.id + description = "ID of the Internet gateway created" +} + +output "security_group_id" { + value = module.security_group.security_group_id + description = "ID of the Security group Created" + +} + +output "aws_lb_target_group_name" { + value = module.alb.target_group_names + description = "List of target groups created" + +} + +output "alb_id" { + value = aws_lb.k3s_server.dns_name + description = "ID of the alb created" + +} + +output "master_instance_ids" { + value = aws_instance.k3s_master_instance.*.host_id + description = "instance id's of talos master nodes" + +} + +output "master_instance_private_ips" { + value = aws_instance.k3s_master_instance.*.private_ip + description = "List of private ip's of master nodes" +} + +output "master_tags" { + value = aws_instance.k3s_master_instance.*.tags_all + description = "All tags that are tagged for worker" + +} + +output "worker_instance_ids" { + value = aws_instance.k3s_worker_instance.*.host_id + description = "instance id's of talos worker nodes" + +} + +output "worker_instance_private_ips" { + value = aws_instance.k3s_worker_instance.*.private_ip + description = "List of private ip's worker nodes" +} + +output "worker_tags" { + value = aws_instance.k3s_worker_instance.*.tags_all + description = "All tags that are tagged for worker" + +} diff --git a/k3s/scripts/server_install.sh b/k3s/scripts/server_install.sh new file mode 100644 index 0000000..e69de29 diff --git a/k3s/scripts/worker_install.sh b/k3s/scripts/worker_install.sh new file mode 100644 index 0000000..e69de29 diff --git a/k3s/vars.tf b/k3s/vars.tf new file mode 100644 index 0000000..e69de29 From c1cfc7058f3484dd776b7c10a37f7a12eea47a68 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 23 Sep 2022 23:12:45 +0530 Subject: [PATCH 012/107] Update server_install.sh --- k3s/scripts/server_install.sh | 50 +++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/k3s/scripts/server_install.sh b/k3s/scripts/server_install.sh index e69de29..858fe51 100644 --- a/k3s/scripts/server_install.sh +++ b/k3s/scripts/server_install.sh @@ -0,0 +1,50 @@ +export k3s_token = "SECRET" +export s3_config_file_path = "/usr/bin/s3cfg" +export bucket_name = "intelops_k3s" +echo " Installing K3s Master " +curl -sfL https://get.k3s.io | sh -s - server --token=$K3S_TOKEN +echo " K3s Installed " +export config_path=/etc/rancher/k3s/k3s.yaml +kubectl get pods --all-namespaces +yum install s3cmd +echo " access_key = "$s3_access_key" +host_base = "$s3_host_base" +host_bucket = "$s3_host_bucket" +secret_key = "$s3_secret_key" " >> "$s3_config_file_path" +echo "[INFO] Testing S3 connection" +s3cmd --no-check-certificate ls +if [ $? -eq 0 ] +then +echo "[INFO] S3 connection test success" +else +echo "[ERROR] S3 connection test failed" +exit 1 +fi + +echo "[INFO] Checking if s3://${BUCKET_NAME} bucket exists" +s3cmd --no-check-certificate ls ${BUCKET_NAME} +touch test-bucket.txt +s3cmd --no-check-certificate put test-bucket.txt s3://${BUCKET_NAME}/test-bucket.txt +if [ $? -eq 0 ] +then +echo "[INFO] s3://${BUCKET_NAME} bucket exists.No need to create" +else +echo "[INFO] s3://${BUCKET_NAME} bucket does not exists. Creating one..." +s3cmd --no-check-certificate mb s3://${BUCKET_NAME} +if [ $? -eq 0 ] +then +echo "[INFO] s3://${BUCKET_NAME} bucket created successfully" +else +echo "[ERROR] s3://${BUCKET_NAME} bucket creation failed" +exit 2 +fi +fi +echo "[INFO] Uploading k3s config to s3" +s3cmd --no-check-certificate put ${config_path} s3://${BUCKET_NAME}/config/k3s.yaml +if [ $? -eq 0 ] +then +echo "[INFO] Upload success" +else +echo "[ERROR] Upload failed" +exit 3 +fi From a4f816fa55ed9afa860081e23ec32d61aa1b8f63 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 23 Sep 2022 23:13:17 +0530 Subject: [PATCH 013/107] Update worker_install.sh --- k3s/scripts/worker_install.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/k3s/scripts/worker_install.sh b/k3s/scripts/worker_install.sh index e69de29..babe86d 100644 --- a/k3s/scripts/worker_install.sh +++ b/k3s/scripts/worker_install.sh @@ -0,0 +1,13 @@ +export node_ip="" +export k3s_url="https://${node_ip}:6443" +export k3s_token="SECRET" +if [[ $is_master eq 1 ]] +then + echo " Installing K3s Master " + curl -sfL https://get.k3s.io | sh -s - server --token=$K3S_TOKEN + echo " K3s Installed " +else + echo " Installing k3s Worker " + curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh - + echo " K3s Installed " +fi From b7592d82865c5f72662d97cb3cafdb12c43c87a4 Mon Sep 17 00:00:00 2001 From: Pramod V Date: Sat, 24 Sep 2022 08:39:33 -0400 Subject: [PATCH 014/107] Adding DB for HA --- k3s/main.tf | 62 ++++++++++++++++++++++++++++++++--- k3s/scripts/server_install.sh | 2 +- k3s/scripts/worker_install.sh | 2 +- k3s/vars.tf | 50 ++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 6 deletions(-) diff --git a/k3s/main.tf b/k3s/main.tf index cfb1858..c19e5c5 100644 --- a/k3s/main.tf +++ b/k3s/main.tf @@ -22,20 +22,39 @@ data "aws_ami" "amazonlinux"{ data "template_cloudinit_config" "server" { content_type = "text/x-shellscript" content = templatefile("${path.module}/scripts/server_install.sh", { - k3s_token = var.k3s_token, + K3S_TOKEN = var.k3s_token, is_k3s_server = true, k3s_url = aws_lb.k3s_server.dns_name, - k3s_tls_san = aws_lb.k3s_server.dns_name + k3s_tls_san = aws_lb.k3s_server.dns_name, + k3sdbuser = var.k3sdbuser, + k3sdbpwd = var.k3sdbpwd, + k3sdbip = aws_db_instance.default.endpoint, + k3sdbname = "k3sdb" }) } +#Worker initialization script +data "template_cloudinit_config" "add_master" { + content_type = "text/x-shellscript" + content = templatefile("${path.module}/scripts/worker_install.sh", { + K3S_TOKEN = var.k3s_token, + is_k3s_server = true, + k3s_url = aws_lb.k3s_worker.dns_name, + k3s_tls_san = aws_lb.k3s_worker.dns_name, + k3sdbuser = var.k3sdbuser, + k3sdbpwd = var.k3sdbpwd, + k3sdbip = aws_db_instance.default.endpoint, + k3sdbname = "k3sdb" + }) + +} #Worker initialization script data "template_cloudinit_config" "worker" { content_type = "text/x-shellscript" content = templatefile("${path.module}/scripts/worker_install.sh", { - k3s_token = var.k3s_token, + K3S_TOKEN = var.k3s_token, is_k3s_server = false, k3s_url = aws_lb.k3s_worker.dns_name, k3s_tls_san = aws_lb.k3s_worker.dns_name @@ -117,11 +136,22 @@ resource "aws_lb" "k3s_worker" { } +resource "aws_db_instance" "default" { + allocated_storage = 10 + db_name = "k3sdb" + engine = "mysql" + engine_version = "5.7" + instance_class = "db.t3.micro" + username = var.k3sdbuser + password = var.k3sdbpwd + parameter_group_name = "default.mysql5.7" + skip_final_snapshot = true +} #Initializing k3s master instances resource "aws_instance" k3s_master_instance { - count = var.mastercount + count = 1 ami = data.aws_ami.amazonlinux.id instance_type = var.instance_type @@ -141,6 +171,30 @@ resource "aws_instance" k3s_master_instance { } +} + +resource "aws_instance" k3s_master_add_instance { + + count = var.mastercount-1 + + ami = data.aws_ami.amazonlinux.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = element(module.vpc.private_subnets, 0) + + user_data = data.template_cloudinit_config.add_master.rendered + associate_public_ip_address = true + + metadata_options { + http_tokens = "required" + } + + tags = { + Name = "k3s-server" + } + + } #Initializing k3s worker instances diff --git a/k3s/scripts/server_install.sh b/k3s/scripts/server_install.sh index 858fe51..e0e8486 100644 --- a/k3s/scripts/server_install.sh +++ b/k3s/scripts/server_install.sh @@ -1,4 +1,4 @@ -export k3s_token = "SECRET" +#export k3s_token = "SECRET" export s3_config_file_path = "/usr/bin/s3cfg" export bucket_name = "intelops_k3s" echo " Installing K3s Master " diff --git a/k3s/scripts/worker_install.sh b/k3s/scripts/worker_install.sh index babe86d..183d64f 100644 --- a/k3s/scripts/worker_install.sh +++ b/k3s/scripts/worker_install.sh @@ -8,6 +8,6 @@ then echo " K3s Installed " else echo " Installing k3s Worker " - curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh - + curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${K3S_TOKEN} sh - echo " K3s Installed " fi diff --git a/k3s/vars.tf b/k3s/vars.tf index e69de29..2ffbfb8 100644 --- a/k3s/vars.tf +++ b/k3s/vars.tf @@ -0,0 +1,50 @@ +variable "AWS_ACCESS_KEY" { + description = "AWS Access key" +} + +variable "AWS_SECRET_KEY" { + description = "AWS Secret key" +} + +variable "region" { + description = "AWS Region to deploy the resources" +} + +variable "privatesubnet" { + description = "vpc private subnet cidr" +} + +variable "vpcname" { + description = "Name of the VPC to be created" +} + +variable "vpccidr" { + description = "VPC cidr to be used while creating VPC" +} + +variable "securitygroupname" { + description = "Security group name to be created " + +} + +variable "albname" { + description = "AWS loadbalancer name" + +} + +variable "instance_type" { + description = "aws instance type to be used" +} + +variable "nodemonitoringenabled" { + description = "aws monitoring enabled/disabled mark true/false" +} + +variable "mastercount" { + description = "talos master node count" +} + +variable "workercount" { + description = "talos worker node count" +} + From 74ae12ab352cc4f7fd1ae517ee4386d24ea8181a Mon Sep 17 00:00:00 2001 From: Chandu Paladugu <59978378+devopstoday11@users.noreply.github.com> Date: Thu, 29 Sep 2022 12:45:16 -0500 Subject: [PATCH 015/107] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3686bc2..61cf514 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # controlplane-dataplane -TalOS cluster setup for control-plane & data-plane on different cloud providers and on-premise +TalOS or K3s cluster setup for control-plane & data-plane on different cloud providers and on-premise From c6f646dafb9dbfacc9114ab92bed444ec0b0a5bd Mon Sep 17 00:00:00 2001 From: Pramod V Date: Sat, 1 Oct 2022 10:00:33 -0400 Subject: [PATCH 016/107] Changing folder structure --- {k3s => aws/k3s}/main.tf | 0 {k3s => aws/k3s}/output.tf | 0 {k3s => aws/k3s}/scripts/server_install.sh | 0 {k3s => aws/k3s}/scripts/worker_install.sh | 0 {k3s => aws/k3s}/vars.tf | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {k3s => aws/k3s}/main.tf (100%) rename {k3s => aws/k3s}/output.tf (100%) rename {k3s => aws/k3s}/scripts/server_install.sh (100%) rename {k3s => aws/k3s}/scripts/worker_install.sh (100%) rename {k3s => aws/k3s}/vars.tf (100%) diff --git a/k3s/main.tf b/aws/k3s/main.tf similarity index 100% rename from k3s/main.tf rename to aws/k3s/main.tf diff --git a/k3s/output.tf b/aws/k3s/output.tf similarity index 100% rename from k3s/output.tf rename to aws/k3s/output.tf diff --git a/k3s/scripts/server_install.sh b/aws/k3s/scripts/server_install.sh similarity index 100% rename from k3s/scripts/server_install.sh rename to aws/k3s/scripts/server_install.sh diff --git a/k3s/scripts/worker_install.sh b/aws/k3s/scripts/worker_install.sh similarity index 100% rename from k3s/scripts/worker_install.sh rename to aws/k3s/scripts/worker_install.sh diff --git a/k3s/vars.tf b/aws/k3s/vars.tf similarity index 100% rename from k3s/vars.tf rename to aws/k3s/vars.tf From ca0bf327ebbd54615e694ee2aad64d5d161829ab Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 17 Oct 2022 23:46:33 +0530 Subject: [PATCH 017/107] Add arch dig --- aws-talos-arch.PNG | Bin 0 -> 39363 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aws-talos-arch.PNG diff --git a/aws-talos-arch.PNG b/aws-talos-arch.PNG new file mode 100644 index 0000000000000000000000000000000000000000..20d9812b5484b8d08fa6010ae5462ad3c0f5c3d9 GIT binary patch literal 39363 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 H+JpZCr)Lqs literal 0 HcmV?d00001 From 86022c011dac07ef03431097f226098de506003a Mon Sep 17 00:00:00 2001 From: Pramod V Date: Mon, 17 Oct 2022 14:40:23 -0400 Subject: [PATCH 018/107] Add aws talos doc --- Docs/aws-talos-arch.PNG | Bin 0 -> 39363 bytes Docs/aws-talos.md | 70 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 Docs/aws-talos-arch.PNG create mode 100644 Docs/aws-talos.md diff --git a/Docs/aws-talos-arch.PNG b/Docs/aws-talos-arch.PNG new file mode 100644 index 0000000000000000000000000000000000000000..20d9812b5484b8d08fa6010ae5462ad3c0f5c3d9 GIT binary patch literal 39363 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 H+JpZCr)Lqs literal 0 HcmV?d00001 diff --git a/Docs/aws-talos.md b/Docs/aws-talos.md new file mode 100644 index 0000000..aa3309a --- /dev/null +++ b/Docs/aws-talos.md @@ -0,0 +1,70 @@ +# TalOS on AWS + +## Introduction +This is a SaaS Solution which installs talos based on inputs on top of aws. + +## Architecture + +![alt text](aws-talos-arch.PNG "architecture") + +## Description + +This terraform module creates secure talos based kubernetes cluster on top of AWS. It Creates the following resources on top of AWS. + +### Created Resources +1. VPC +2. Subnets +3. Security Groups +4. Elastic LoadBalancer +5. Internet Gateway +6. Target Groups +7. TalOS Based EC2 Instances as specified + +### Outputs + +The module will output the respective resource id's of the created resources and kubeconfig & talosconfig of the cluster will be stored locally which can be used to access the cluster and nodes in later point of time. + +## Installing + +### Prerequisites + +1. Windows/Linux system with internet connectivity +2. Active AWS account with secret and access key +3. Terraform cli installed + +### Installation + +Fill the values.tfvars file inside aws/talos folder accordingly. + +|Values |Description | +--- | --- | +|AWS_ACCESS_KEY | Access key of the AWS account thats used for installation | +|AWS_SECRET_KEY | Secret key of the AWS account thats used for installation | +|albname | Name of the Application LoadBalancer to be Created | +|privatesubnet | Private Subnet cidr to be used for VPC | +|region | AWS account region where all the resources needs to be created | +|securitygroupname | Name of the Security group to be Created | +|vpccidr | cidr range of vpc should be one from privatesubnet range | +|vpcname | VPC Name to be created | +|instance_type | Type of EC2 instance to be used for creation. Define this based on the number of resources you run on the cluster| +|nodemonitoringenabled | Define if the nodemonitoring to be enabled for EC2 this could incur significant charges| +|mastercount | Number of master nodes to be created| +|workercount | Number of worker nodes to be created| + +### Run the following commands after filling the values.tfvars + +``` terraform init ``` + +This initializes all the modules + +``` terraform plan -var-file values.tfvars ``` + +This will output all the changes that will be done to the AWS resources and also what will be added/removed/modified. + +Finally if everything is fine + +``` terraform apply -var-files values.tfvars ``` + +Type yes when prompted. + +Once the installation is completed the terraform will print success message with number of resources added/modified/destroyed. And all output of the resource id's will be printed. \ No newline at end of file From 53833b801924ec01af725f8db106cd4725a9a92d Mon Sep 17 00:00:00 2001 From: Pramod V Date: Mon, 17 Oct 2022 14:40:35 -0400 Subject: [PATCH 019/107] Add awstalos doc --- aws-talos-arch.PNG | Bin 39363 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 aws-talos-arch.PNG diff --git a/aws-talos-arch.PNG b/aws-talos-arch.PNG deleted file mode 100644 index 20d9812b5484b8d08fa6010ae5462ad3c0f5c3d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39363 zcmeFZc|6o#|35sfDxXM1l2Mi{S<0GS!dNo0?_^K5tYfTgD(l!4hOC2%kUg{#6S7YB z!WayL8T<8xhCuJ3hy?|<%p?)!1y9*-W)aNg&<&g;C^=j(Oe;kV$hlPAudfIuK8 zHPlt~Adtf-2;^Y#v7_KOe7$n7z<&q4^)O{LkWv)wmdz3H{rEj~ zQ*Q`_?lbk@fo6{adkEx(iH6E`1AnWzVVZQqW%O=n=%&BDRHMCA+C+-$kUeE|R>X}l z)KvE1XNcHsqv+Jv3`v~zh@LN+d;$^C0)KJUYm~@bs84yOclbczA-?)!;~%cYckG6= z%Ok2++gIWB_`vpH`PIdd5As#%f!D+cfg>4SXg~|~=jtu!fxQnGF12#)eSmyXK_1@w zbpJUY*c|oe6eFJD?@zYbatHT5Dcwwj{r#(F;pAg~f4Zvs|GvpCpE+};<@e{O4&zPH zq6m@&>s8ywOQd1*feIJi)sesw#_e*2{O%>`4U6FD24)E43(X!YUYFW6)3IK;eZQy3 zP^-9(RC||4Oicgi$#dL+E3=-X>=1~-k-dR>cU$6l$X^(BzIlXD*zArop@#eh-MXqg ztWC=uqc;m7keAt1Hmk>vl@zy5vcv32WoS{G9cETZhx#S9(wnu7?{1|kirokqb&D6j zLrLy&CFc*VeYjA#`0YyJASZ06?z0K-5`tIvP6xJv1Z4z$I6r=!hv$H*0q;^kXr8Z6E&S@4|XFlSjC?TsI{%d_`2 zpS<}BC#^H%7X+K}P3Ju++mS3QtBn}Z88sel)c)nYL|O7)rW|0ieDAM&lz2pT%2dt8blK zF(Wc5AJ_V|jqaGfrhTrGZ9XWZ{zK5z)>P2+)`7xYmbXwj|F_;fsKRfB?q%iW_zIj= zg1JY1MbEo5_u9f9yWgG2F621pAO!N9DzUdzRjosK#tCk5PobG(=eH?!?%jDdxFdRv z#K6giye*yU)#XHGrv{%L9|hkK--ZYFtt~BaY##4BO@<7l<_4=$9I(kXncSjC@`PST zf0;w1pk=LrS(Uqx_3j2vOPgMmpi4Ldfv8Y*=ViR4tGpolW``&IOkMeBmBLZy2Jxwi zCX-)3PoovlI%sRO2Rd{cs+8?JKQe66W57GQIkGy@YiylV?$lA6dD@xS_omDXugNQm zAo*~dlnGcW@P4dk3gdEa0cu;EMP1|JlbdF|Rf=+g{+edZ{q4))H&vtOI@kNwar0TD zutt_s9+{y#HF8@EpPRh$Yx}D_GB^1RF*xafnLBof)~wtl0= z3m+kyCoV5D-7Y&X9@36z+_dbk_RQJ534wI6P<7+#l-t6xXzYUqt{oMuP)v+eJ2ntCU~HV_Nh330wMU z4Ua*ORQFbo&`onf0IYNfF&f;2n_f-_BuW7i@4u5;9)8n4Mp(?WAOw9N7+_%^PlQ3#5={o9gxzSCWKJrs_RH5-Hg1Ty^qXlZPv z*=h!lL>gYx4|S&L(_@uOb(<$@a-56hHkNK8j&lxIxDVGFl*T6|;cup0wNoo}u2e%^ z63|Mxq^((>AGk^)89*RgDC$hfq?s#5?jDluCh@UlIoP?Xx#nuE)6)XHycmNl@*|Ed zC3yO^-wIqvg!L;|vr1Qfl;Tcx(B|N%-%c^YkoR~m{;{|PKiPw7ucyDtt-Z= z5#xw0Y_ff9AXvNQBh4uf>^$qd`pU|nM_tFUvQoK?lHCmv1W9FQ;i=*^)b!U@2P}mcSdT# z%9p?8{IKlHhofh{=j3w&CtxsB?_&yq{6g&U`fBLcX1yGZn9^ex4Yh`i>>M`6*h#0= zWUBoav$x18jZu8JY}sq<0+9x1vT~A?I~}sHK$8`z#yK|(MW3FSwsXy-Ebz5>@`c>H zEulbk$i*@=Kc#BR5IpNvZMAlQN z7bZD*hFp-1$uTrqns%wZ>C+GPw5K7XMDm!d-m6}5yT$8c31)9FT7wGS!#s42Gq@6K z73XYzBGX%gWLQ9=Zg$W*K7~xQ-jx}n{CVCwt-}7P`0O`yZ+zVA$^`q#K#SdP9oZ$m zJ=v;%?aVt{_IQ@YwJ=$la7ve!h-%PeN9c|>0)$>WH>g{wQ1r-S1ArWO-EXfOL5-xozi9D&=X_7VicAIk^q2@Eb;olXvyA=(I4}YFn2AbKr+PJ&@ zti!6zK3o3+El;hd|b7fl2#NHL!x_^&RLCOFqwiwdIZ!3>qAezbOJy zteLAE;4^kPp^WJB=S{X}l$EPFCEq>&TF2;0d2x`2CsG6M+N{fzxWVKsV=v^{qOfA6`pSx~pi;uuNu5 zD7@0#y@touYFYgZ%K|Eq=BpONLX$c6@x(K8T~Qn;c%gRry}lsX+R+M44?EAlPxmqFYoWz&WQE@$TD^cXuj?ACCY*Yp}c z@>B3^IK4<+NzDamn+~CtnTNl8V5P2TJAe33hMSv4Y5C2HwL`w^#KuEg7sbTHvM)@J zHa5!Ud9`QAU*6rB-zB|o9!DvX#bb@=7$C!TRu+-dU&E)T`{pxiS~)1xr53W9>}Q;#xO02gW-s5xYcpr=`-H(5^>$gZ&HGnmq+*k7(P>^NaLs(&MrT*M%mX zm-nf-MfUoXVVyOb)W-5iM8xv1uzbtpwz}btV?lmP4BBm4@Rd=S|Dx@x$Cw3-f6H5$e?Ap< z(Y(stSF=!Y>o+|an1w+NY_gEU$a^G7>@)$yC{fRyEFFO&AEzoZBH*v@2~m~h{~#%* zMPb$U=Q`Wx4D%O)HD}-JoB3Rwu$t#H(F}t}*9p`mKb9wy=9Cd5D1zh89^p~Kq1y;P z>{#1ST-&9=mAWcYB*-m>p4qDC&}%&gse@V&++X=f7tpJTK64LWC~YQ+Lg+{d(DqkW zjn5EGIR>m(^qSm0dY}QesXcQ`F{M4~CQGWFK_mOLpllQEc81bO`1b3r4=1o`YGdTewEU4w zni#1{jc)ihXGEOTXi#^ss_oQ~GN4ofARI${A*9+yPU(|CrbwWgX^uTJZPyV8!;zAW zd=~Eg9DkCi3$?6s2wm{o%#tloP0wcb^CWGxnI8;A=pgFME>IHuBX@53tUDnxT+*2% zl3^&+ntH}P3MTI37IFfecjzZ5Z->hzQXI?B`)eBI#z*g5qM^h)wpt-g#g-XarzVrC z9w80I<`|J~0}8w)I*rLvj)%qWG=;E=dpG{&CuVPS<%W|B-M1@k>9?P_OhRL&2v8qU zTdONv5)^vPn1mamcduWmp)J9`L5M$fcsDuxS+uF`=lk1Dcs#aRbzO9%?eSNf?FOQ2 zXyx0nbyDN#Boh}9Zu;Uo8gD&D8%~_j2(P8nSFNYC%Q8^B=j&H%^+B{n1EQ__^M^~2 zOU0hN*KDpP!-x~h!|nKDtcYi;0P2$_pL_)0MgT19ubDX-q6QeCrR+D=dbcm)QwBzcouMynuy54vHYAhT98du^e{b#%98@mtOlJiq|I zW19qfAjkN863WP}$|9^e@(IO>I(qJ%PX2kHOokjeff|QU8_%~FP5^z=P_CN9McyOs zUfKo6)#G|q^@;Xyt{B60R9UBf)sl1~%@)+ng;|qeVyFa!{FEA*?;HeMv>Ji-vSaL%H7%6z%XwZ97;A0TnJhwp_* zJt=NP*9|xle8w1a1hl2+m9Yq6K(n{A#+&eL6>qc+fi(W@TpPB;;ydMVCU?07*@oFk zQ;Cwt3Py38f2`u)BQLWC=SKUgv^#>*>bCLyUQy*kzeOG$JsH8L z4nU(}{uO^}@H=@Gy51bR1#=#%E)_H_`?8(bRaREUX(e|117t55xxSZ-Y}Uf#1JEq2 zk#wg=d*%`ef*xxikPhTLak>qY88QQ}xB;>T%{Du^?g|%UX|IWAo6grUI+@9#8<@}t z|B)DW*&zT0u2I3o4>-q$svGD0((ek&ss|}Rf`A?i14f{0)zHSX>_ zTh~${Rgcs03kv!u>ZZ%S57YS{83V4e!=kV^ptf}3!lK3-qwZX6GkS+oTZG< zRkCx1r8N4aT-&l#Gb)2 z2dyvfc?3Kfw<{?~k%l$fFXM{4>mBIk1CRwSYLY(iyz)+6kGn#X$-~&9Jfm{mvU|Pm zh~uBX(O)3dW`iU1EzorB_4E{FlyG|FA4mr@_F{@tIo_ybO8aBdsIM%_xqP`5*%DVJsa} zzL^HQJKJ1PoI^GilmZ&5fKM)(jpHo0gt-?@<%~*7rZ6lw^T8n+H74FvU>j=n_2)m+ zD+)@4E`Iy<@ez6z=fVzDXEfq@{-5MOuTCZ^X)rBXjF~HUcFJqhZSyKAUZu7M1h$1P z9KElMJJ5G&y1%}Dl^VKP6`Byv$Xh!v*j46$eKuVy=<@>PK~8%BL~re?U}3+Yaamo- zm1J&i(SCWOZ|vIMc%VnMTBoKpQJ;>B+!Ei*od&Mc=CZk0XY~XbiSMqVcKJ#gHj2^} zf(L?OanjzCi2+tq&$vOh7exhb`ZCyS4cvq8Jntc|q3u7iopXpT@RaWk;6m~GJdv9rC2rgeO(sFU(Qm=;VLL!ERb zzoD+TCPYWAPP%D~dsrVcY~i#%<#kZm%gc*1f~jqEcY72|)fcCqS#Y#W-emdv*A_Kh z!OIf)tDO!IfVRB^%>PfcO$DHB*o$xFd}^l12eS9jsjO@Sw7f;AYDn)c6dU2Z15zie z8RT#s0)aUQ`4vjdA@`s_0Qx1HbDR@kb<1a^P4Wp3*&RHHy`J(^nB_t;i2hOpj6_96 zhYAZn%VS?k_0;(NapRe+t(qF&;^hJ%@^=CKvb! z>zvWmm`hyg^Cj2=d>sI*pQsz%b}xLWs>Q-K6{pfkF*5q3W9l;S&be?pV6_7Hx1nGl zV0#eU{j-wu*En~FZC>}drjBpY-X*TS>i0>c1TP03N-FgnZ_?w5oTO@bW}J-T+DG~* zile6g@7@Aku5oXL^$EsRRtO}Qo?7;4y&Bj8^XfkIC>M@hY`1K_iH|haZzP^31P(7X zUvFPMTy(c9SEH#6Kbhu{%mvdkRu2KPD%x)B^W-GkWCN$4=R4c4C-&xJq0T38=Uc9? z*XHNX=`NfOh;$*-;S@Gn*1?3~;4tx7Q618ZxQ2VE{qw&vs{6K|C@nuPrq5k(l4`g} zMX}1`i7wWgsh%01#C&HA2sHriPI&!VaNOHf`XoK%z5(@g|A6T3)}c;M!}S`wgZ6Nd zf>IutP*XHZYyB{$1t1y;@NGit#)nnNm^P~YYLZB*u@&-bu#s1~w0F}rjx33Oho^ZW9_9MSaLJ(;H)QpvuGRf7krq zDj+U`{$nW>dLl(!rFn)6b?NpQ)0_-&8xaUUD z1J|F)B8-I43vU8Dyx^YQISDgWtRe`%RN<3#N9ITJaU5N;=-zp9hIj5QKU7lJOTt|z zvqu@P(uo4o?`qLx?()wEsW_PEU|ZsAI&owN4pq_kGb9a!43UZD>$*-U#%^D-5)6icly=rPP@QPN+1Jb)ZN;9zYvwI|*}dCkzkn*qx+JfU0T9C!eHr*LfjqG`eg^A2kV#DumbfDe|7Y!#{Au# zxJ>}xK`ty)vqSX@LSc05G6r5>bgQYEXCXF526oQ5CNUvlTn?t=(v1T{A(DIU@%j=U zm%M|}R_JGTkivexBNO2C{a@ zE*KJ`j7(I{iVokwJ(Uk!QTOyLrS>o|4-^2Z=O584@b%l6RJy)Mmk;biTI?F{LR0fQ z4nh1m{_!YhK*8NRcG+xkcQ#D!=!M#UBy$1Z-!d2z+&A!XA-N9VHE)RIJS!*uYmi;w-eWI{@&OsrRFAs_s} zQhG1Q1v;4xR-hzGyFfU2U~TL)iXT;IFyfF9C;QqdRe9qBX^K`RQ#W^UPEFP zuDP9rbkY8k0t*#-@QvmB(fdmuO*p6+LEfpV`NQDbn~eh(>aT!Zf%+)F53nNf(GmPI z+L?zS3r|5s>1^oe)9mg8kev_UF_4CuD$yJE?ryw9IQ)ntPG?F7oq=reD=Jz$c4Sz3 zolDy(*|FpR=Rr?hSP5y*Q2z!qf(CWTucSx34t??LT~1#_*MnCzyv7ebQa?g@3QfrM zxLq?%?#3U3yk!GVS*d}iB>5m+EenOjJm9+U2zi2*5l#L9XnDw|$V)UUgNt zpqiY;doL>Qq}ACUfJoZDrvHHDLkWI5dPJ#qEtAAJu>c568-Fdzl&?dzUTT*pOw3RFJ z?ezoHOsR!xIR2fS|2so-y&jRj4mdgV`r?jw)w`PA8wnQw-pOAE$5`(^oJDX5;J50^ zrUQaeX5`;6lHJku8!pnB6*lmn1SXCYohN>Az7o5i(Wu>6i8s&`x63hFahr)IE2}ty zH7~IV>cbH}*Il}*BEM?4{?>6}nPEM&zpS|XUVr)gd#1V$ap}f+%k{V2hsq|MNW>5$ zEy*qCcR^l5!3Xc3{?|^)$L^=-LQT1S*%Gm31Ra~N8ae!4U1+biqy1w{H>9vn&4-_6 zGo>)y!nLFhnW(m3@Atzf@S0c7d2`e<`On{a;Jsa9--hllyF@hRnXj->>(~Cyq6MW_ zSS59m3pby?_+7pnD4j{+_}JlF-nw4=v03W-wL5&V?bwWw2ZS0*L0%kXAfEgx+12cJ z0DEi$A1a;=7}K}ZQYuv<)LSL_0=~pDL(x{TLI{^dPaTt*(_W?u$c+HZSyQQAi^+*b z&vNth!{jMf={W`HMW4gn+9etdn?F7p58>oxR25FTm`A`v`D6neQp}+(cs$t{GkdiS z@jN)kAvy%E(!wNw%0?B)h^*IW56yS0`KblHz?L@D+5$%b!M(AAnU13)Tnh?U zbu4MoWz4}odZu{YpPdHVQq?Gn%SCzyk;Zkt0|GLkcC{shqk@YY4-jE{te_18) zHx;^M>Amh*PHz=PtSiz039&`@=&ONVN1s}o{=H{kc`%l#> zEid<%InN%IHVwNGpp1iyqP>j0TFnZH5=n;8;8|v89M;;n+6{McweIURA$lcOLt&I8 zOYQur)0j`Hqg4wJC!Xggy|_^(vCy^EmhY@fWqkENnGxT3U7Bw&oz`CQg6t>rj9V>s zwL+m&0g4Q;1!^HqrdP;kNpE5^BZJ{Rq+3Hkaru4{r`sJX{j5e2FbTSK^`_Reczg+ z7ZycXbtz7g>BN7p=;Ad|3X?{1uBAWANxzwgYH+Ilu}L#3n`;kMrkq=80HwzhfhBL( zBiEq4B1wQ(AA~{Z^gfFGjk9Is<>M33?l`5a?)OIW^%f2HIA~8KDdAf3c|O|mZw0_E ze$9%<>tx~T@)D+%hmH~yQ#sS_9#!NW`?kkymBVSnV65 zNjf>!dR~|cCp_coMaUUO92ZJC6mcSD>foiN)t~sd>0qsT1?(0lJZfjd%iqHVd*Ida0%>O27UQ&EnIX=Y+zG$lip%Rrm{RK1ie3#9{p|a8X z;gAKoySkVLODpL6O|z*UsVbks9`;sv(vPj3jW4rchtm^lrx4XeiLe7H2TQPCwA^hScaIS29jD-) z753c^A3YdWhFtW#jLO!$=oAoMK;|_VDM;W=&j~3$BmQw!cXIW_GhgvrEtH2mx&_a@ z(ghQ@7RY=HP^3+_mcr#CpNQwiun7jOq`$+Uf7%vPw#4o2ilJ(Srr~BzbO-UY;0?_) z+8nJ=1giv?AzDX);b3$}=s zLl9SL&O;3pAD=t{QA`7w#t_b>p>+1bV%vN`J0e*M@&OvPd|)p+`1umDP(Dnf)5;$G zRLiI;uj$jHFTAxuE|MYo)a*bQ3AulAf7p!(5Wne&?QH4-!%hywB!#_F@Jj*tF7v(# z)oJE7zsC=}aoVdsO?ma=X(4Z^nbp5?q%h|5tE>LzWwoHbaUs{Mg;c6Xn!RGWgONp; z9Dv`x1s}HIZz2 zmlnEdG20hg4V&CGiw~~nK3uo_I@P?J6EohyG&2>B3K+XPi+}OoW>EGS{^6^FJ7ejT(P8@g^^IEL1E8MJ z^sgg{V2^<|UUV|7Ej6K z5ZgUu;qkMQIS$_@mfLFqJlDnehna=Gzq=fe?mtf#cFV!a26R$hyJMq{9JrViU943L zpRVl<{He#!C+LL(>3*#6pIvI8*)z|l%u3qj+N9KUy~LffJD{ZQn?p2u1TRPX&iyJa zCk@bmrS>Ihg^Q$_;r8Xb;J!d}^=BRR_X+(r4dv}_0~zzhVStD8`(|&5>z0&}T};nb zi$`x*rpOR8iXVX?yZeR|zo}F7^&8QaU3tuX`8-Hpl>+``jXcPh^NRDc?}(PAH)WT= zfGn=q>Z1Uf+xf#uO|Kx&b*&l|nK+j(S-RPN^&MjyH=WIKs$(9bw|c5A!@C zd&y1N#mBhbU= zYgBPgZ85kj6#Bf;Moy@y_F3<_Vo%*c)6E`HFOY3Td%ZQ?*&dXT_Im+ox)C zh_UcPKo&mzORF?(r|D`6mkQmNNG1RjxuqXAh?+qlb=-rm!R}VQm`*Qt44}K%8(nOE zQl>2#Xx#)=!BPPh{Qi&SO8f!>l|-OZ6f0lZ2D@~)`g=w*f}~pq0_Oo#2xrot{M*1L-{Q3PST%^A> z#a_C!9AGTi?V}u@^n*d&;t&|*@o$67pwp_69xkG0q66)ca9-~IPL~VQs_$xO0kA$o zMdto?H=4GF0B#;!Bv!=S>^`PpxFqZvz!nN6?Cq@$uWnX`+YvxJ{7KBltXkh zB39)tkW)xzpyuTIbw7oba;>1iMZLdpE&7zXms4|#sNJF;LI_y9%0B=aPpN=8wAWSI z5bRhK&PCOo0go@D|9#jUNh?uV!7Kk5R%yHQFXO*6p=Ymj0aL@ zw4XT+ST3NA?@w96h!x*`ab6I}?aP1SrPHrK+opEtc|oe7g1>SHSGwjbV(T0u`P)@% zJc8{LhlcJv7ehTxOi5!qnPSdHkii&@Fqk|AHxS-3F)`P;059;C;g9zS&yyX_=j1gK z*xZWXel;jcZ9nlg(2sT;Pmg3LO1RAUnhJvMgLBq5)O~y`_b!snR$qBb*X9Q=eLW~@ zyn!;~c^ZTE#`yy}8TZk7xfibsT3FI^UXbo6=+5}Iizz&fEmFf3f=-PVA$q#F2Cn2f z7kNO$fj;5(RsR7%Bdel(gChqoo7E;{disUiZ^=oSBx9CVW*4pv`qEJ z_92oEK>5|r>>v07uM5JVcA_s~SR5T|uZq>OWYNi}nb-lhimb z-Qvpe=m7RfjkLz^exbluDGBU1d@TYf0Ky1VNwC_btEm?O!Q&V8A2VCUfVH{zLCE1r zQDi=F76iYoA;ajO%$B?!zzWl`%Mx}}z}oivWi(zF+Iv^t67ab5T6C-d#t*AO-YPI8 z>44&l`lbE*>BQ@TGA};)shWCyJF;o|ajs0Qd!Jj}X zD}j%7XdS$>)PEmoIle8OPi{@WmJE9^wHkp7?583%ka*Oekn9W4TKiV{jY}qdiA;*_ z?|hC!RehAnTvjEaQYku3@lE{kCwN3Q7N3WEAenUUt_xC&dEC^Z*FQy16=~1{ik*hF zL!KzTh-({sCVZ?qrdqzpiE(`#NJ$~;3i~8Fl3WnakCEfIJe-uNSHe#ei^A)^broRn zw2v*6iwFo=a+1#ExHPtTc(h~#XIm!nUzby1xm=X{y6}^(0%=n<@u~y6rNQ0Q5J&%Y z#^7@nOL9pH+QLrOp1MpZ@RLmLnIGebro8?}P~)!KQ;g@;pXleQp6# zv_WA@nk1LxX_-@W-Vz^1MGa$v_PGaUye^Oa18~RdYlQx%vk@;fQ(*0OaiFocJ&-Np zqW*6tg8&8U)|KAx*MUS>(oJB`q`&Hz*q(vGTV-nb0#bj!lhS7}Ag_9%0HD~MMAI?@+tvHa)<+rcvcbYHLU^$F|u+VPF`yrXs3z5e{6|1%c7z}My zQw$YOQ0ulW&HFsJF0}u}H~kL5h-Bj@E|=D+AkF`j2zzHiA?MdZ6=SFV3**ZqK6bZ7 zVT$tv6cik^|Jz>wpK1@P#Lsc=r6xDil#wc1=l)}JML1F8vRV--(*HJK1Jo`-_YvoK z`#b(bnANuf{bnzBYrmHH#yHDd4f_x6He1f%dcn?o7Ll)=B}Z1KYw1(o#tH4g`{CgE z|H1d(&QL^3nxxvVHoz4yuT_cCO?tQ=7 zA5`{py)I{=%+<2=^4j|YH1_Lpocy)tB;A&+oSC;nP;N;$Tt>nct4$67C2e zIK4cibo9vRs@_!ap@?E8Y(sS5p>Dr*R~er7R8Wtv#SOce8}JU@Aq$z zDxwaa5T?ms^WSOVtYLbNDmQaHl952Mx&9^4LgvkUA%85M2X@gdF1=p$BdZ8F(5+F`=#AwLm*4X;qeh154aDDC%F{x>eYNjZuJw+jk#ZXlWNh8>I$ z!4629KSDiak&UtKKO=Kuy3{fr(dFh1&y45Q9GSoGTJLWdGcSAT(9y?GT9r}k_VaSt zE ze4+^DI^ePAH?)O zC4XW{-qkrQMj>0yD>5;`CJ)X>8G2X%ia;tlfwPY%WJLrM-|Kb%bu}11wT&-Ik5(|_ z=X6Md!5mTo0|qMe2R`XD$q8r(W63`@pHAYJ_^sKUnb`kh5k5Xa0KnLRTry}p#+NS< zcAO7&G>E%IME0V~>hyBN&}qWMz*O@u1lPE9bjq+7?^M^Km}p*4SOr!9rA*O{dG%mD zN*Hx>v>!%IeJ`xtCHMh&i{#dRPmLOTU@S(=cq4MRG7slG1^Uf+@`g3#2B)8!1 zUWP!Zi%W6~)sgn8%v@BiU%0++mSXKe3RW-(JZ=Kjmgf2>OC&nq$!sBVeTunIq;4a2 zyX3pvtko}>F*8lD{bu`2eHqInORa3o*S-E2^;3UbWxU74yXf|qchkqXTXTR1&svoU zyfjPas@vTv17+HaBQn4pjlOv+v8Xps#8lBpobKHNx? zNrcujc}{dzJe&g22uZcLN)xtPxux^C;Zd?yWMys1afisiOuW=8L;R-(>=I%3&jhV* zCUOgHg**~cP`IaOw6lEwyJe-mm(z~n2H|xgZ)QglOs0`Dbn2?tNnxw z-%G|34_R6jhzhqXHXil^g+f^hC6AN5Z{Xx>-$}imJ#POY<}LOv&4^ZJN~5%RaEiW4 z7}FUGx{wvB-AK)}Yc8(mz%$%FGPwdixAu0OA=_P#v=D$9H* zJ+1jq`BjT0e?yNLxfAR{K0~*1zk6bH9@2`62c#CtoyhIawJTens5q@2nN<#hxBLhr z1*!(M3$p@?Z}yS#mccDPa~#K&A?47N?}}&rbmzu6`_FrB=e!a10hgpjs*N~XdSAig z-nlgEvYzteHh2M)$cAtN+(hLxJPEk)my6;xZs~3*4PxW>I2qKWdNgb#@w*XYt{;(A zugcr1CG=SooQUC-xvKq2eJOYuyoJPB{`y^Ux*+%4Lj#o^=bb`)8X##mQ^hqx79*|C z(q>0YG%N0uMzM-D1xw|g+uP{uJz&*X<(%d542y0*YaY(61#1?a3u(Nl3t&nSE{sR~ zQ8zWMH;y^E@U%ib%NdXyfMzk$N*mlEps##i|Z@2+h>@izyzUVMJWsF~N=g6Hf(_dxOT=7uhbSWs^ z8`}?N%t~#;N+&ezm&D>MK#NosxKmo6Tod0LT;rMJaza-2%jNwC6R|NfGYWcXFETPlx}`^Q#yccnslO-D8wHxR)V7$Rk9eM2U= zz5zA8-7VkfE_3VBc~ky2#j}En7DHymX{$86qgWT=Bi5FlxR49JdlsaXOC@luLe-1N zm2;5TJfKI^DjQEC^F6O<_ag3)>qzm3HO;H<*{H-NL`=zDkp7#ynK{iO>W&oMu9wE^ zhv@wLilFi;wSH-)@x5N^ZBeNPgp{d7+816!=iR3PhOwj+_fhxabOD( zyQcQNzU{j+qsyM?;*RcrxxHnxzkEj&lb#k0#_q~aoLOJ_BFy8U>*H?G-)%{G&@)E0 zNPMVM#W!}5UgqOfQAACFu{UJCvz8&~jLdmq-3wj7W=4g$|EHo|ymdnq_Gs5Y<1nOsIe zZq#h77b*nFpDFBgO5PfNt#}Tb6DX-5QZk#y6$uadR)LDu`-d@kF z-iK$Zmd#dAj`fV{WD0XUWiJVyNDR9bsk zKyJ6b=tjkpGP{9BHmyt*RYe^|V?}Gi4Fc7UcZiRMd_Spe6$ev1Yf&VZO6gZa5*JQS z*K!%p6bGv{P~5ve>?&NgtRiTVey`e(*VL1bU@9&i|Hp|JoE)T+B|dZ;^eaiG7Ck(Z z2~XVCNvDrKq;>`i`oy!MX}DpxJx){t9^yXQIiaH+!R60rHp7#$vZV=~?lC>?qUxzW zA$rVF?=53Qwkm-p`}rvN06#|c3EGtTs>goCR)bO^*>W;VUo{Ae_nJ%6Q&!>bNyaN} zNsi`6TRe=GVs}ltu9HT^l`=N{BfhWspl2I=z6VR5;-Kw$seD}7sV2ngL#WCp32^08jQMXR<$6nV#QYYt->rLPOB8X(-CaDLRve~E zbIv!7J}%H~HDR60LyGxYrOKWcG$sr#1#bb2+eL!?cX2Ogx#A$7RPod_04hp1yL4ap zxxSI3EZVORH?d4K&sQX+87o{8QaC%7sHX*Y^N!$sDZqzPHv}1c{Rawr8!sykWzdYp z$K?YYyvy!(MqTcMm(-ge3=TjRfuTG;D?vT>6*g(1w>j)*pQpws)mC^G_so;63Y)vH z?!`q$pYz}e4@6g%k2aMx_5Gjr&NHg1z?tWh2%_ws0C%95yct8;^uL`SJj=fT`)#IwMW6u=dl zo;kEj?wOb^DA@?3+pywLzh=7!O#8xP5Qb^RpMTkERhf&{%TNTieRP&+%5eJY1r(7C zuP4h7oMSv!jQDv_r_WB-f+LshV`2;;=OaFDEC2O|*7|sD$)cJEo1nLl;Za+Zv5j8; zWv}wWl=YU8=(LuZ60;7>v757L>V4)rA`qz)Nz%$D?)&4zq>k2D5WVXcFQHOha@rGx zjr;F`F(&*tFz(B6c0O3Bms&ci=tgHB^^qTIifmE|<#@6=KWLtO7RtCE0F92A<-o zJEu+9uGoHx8D|RE)6BRd*LMz z6Qay)nRR{F_^wyNHjt|uOYYCAYof#YZ1S64t=wIFkegFqUcict-L;tdt~gZFff&9Z z7+|3Ij_4hVWDSb6BV*05?V)dblqr3G`_ z(jm8)84ojIC9w~^S-3ZrRin!itp`7gu_i$mXo7~@v(mXs4K`cFcJaQJqD=k_$dEV` z({LDrGV;A6f7Eug1n%P71bWx$#lq$4T`a>JnHIDRcdG5s}?&guec*cytK zcT|lkejMrF5>!5{1O+Inodp#!NR~je08na4xkusb^CXH4)xt&*+4gun@0GE|cS7U! zyr>(auH@;*)%F|7QJSX2#MJ2yF|)DzE;nn(S->=0_%RI!WS5Hph$RQSp7~Nl(X|+d zdY-#)1LCit7@iX}I~P@guh0mh0}0`$R$!c%_Yy4?SNHqSU@S3BkqKzu7S(G@l8Gdz z__3w~&-cTmxd*m3NkL}n(kY2ai9W-$Q~Myz((f|XDN&ZzdN5<4eZa*SJ5j89M|$a* zG|7tI^vxh?jFdC~DYM!B3_t6!l*!bb*z(}jzO+GX{z#Jmv)dPAj9i=0xCv8#k?VCtaeon`QAL&B9e2!E-0gZ&uRaQn8I3Vnitxro252kvhYEfceJNT z!YTeq^<-b(#6xigml2X!*4_Gmm6bQ=XTBsHa`e8;324KzBAF|c^ScAZY;JBG+z@n^ z6i+<&qB>7c2`nQ#AtZ3CjTznBW#ph3vp*k z`#(K!i5yY?*+RHafAf4PDCYu4D=;aJWzcuhKH%p@uMchJ(5GI-@_?ltox((ozfWGa zfS+aL9cP5@(vD?MqoP3o^?E`f8EfS-Emt_5$Qm_|xLR)tHsH?5t&;;SmI6f`(mX81 zK_OpvEs7KQslS~Q5l9H8ur)%g;0J=7SD9Nn6K;tK)ENXIILFH?8j6Gncpb=N{M4%S z6~V*F4xBMgQ8k-VR9`!CO$4{diCY$Y_g;pXtPe8f+w@72`a*f{%dkN*g)g&83|Xm8 zI_X>WcDkL7VF5R8!sA1neJNP^XtYIHnk1;Dm0EOJP+cL2X(R;H`s7bEsWE$8ODbHw z`?R-w!j9ZJC~8lt+gupV+0*P41qN;B7%!6D@+gAIT*{}=?#q~dMwer%ow2WF+#&9l zM`$=)Q?HD5%fHd8%ZY^Be7#vd61ui}?X5Cq?j+Bk#GCiL=m%+9^F{0-$r!FPBC&yv zn=JQk>*g4R0>B?L_IYEf=i0L7l`CJWPiykL8r=a-Z8A2_j8)>HULQ)#+NvsI)wtiG z8v7MBAQr_n4l@R@Lr002D3h1TgtTV-1nEGjCFjf2HFFUT<|VQf15sOD>-p;gX)J`t zgub--C_Eue{g%UoVceLTr2%FSk6`%>n`hR>m*+PNk60Qp4aRgbCGD@N3o+b2jjO9a z?8N{U$#8@QUhX(QgR`We;tN%OeOM%KPFQsJ#}ATQ`_J=%y0Y+M>z+pV`aAd$Y?2;? zcChMv^~RH_lkNKppl1pv&x@w?84c~k(^`CTi0thcbJCZY!PgBw`X>cD+VR@HjbLUF z+@J=qRdG)0Dykg)#k5au8g1H-=b0AX%yw6+j>W4^WT6b8^IS}VnBDec>C`oEoCg8c zhEjp|QrWw_*vMQoSXVwhm}jN*@}dD;rd4Si|ExcE70t$Q>osoCE74Vgv+yHS}|qK8_~_SaV!}Q($jG9sAF+8+1r{x8Z!A z$%<$R8C+f(Htx)it>Fvb*)Gg@ibDt-w#LYG!qcoV$*Y-Uy|T<9*U=@V)aKDzlln#+ zYs0a%QI&uLkLxd=c5m1sA*IS(hG-X-K7@-Cv-f`2hJxO(Lb*F7O6yL$ik^m|;f&<= zTxFVPZ6JHUW%zU`eO{v2R(#rte!8ac%>x=TYW>LpOp21dVOd2{H9!l4+AsIi{WnJ{P=X=hz$* zmszuUY$|Cc!+tA$+d??!G@<6|QUth<+D*g;Ecj}RL?Fh~$OQ$QP)1WZFpT|U)@L^> z3T-56d2Sz1|1f;IY~5;VG}~kDf_bIMS5ju3DfyVJkXNEBA{yGQb2YE~_d_R(H^@l{ z-%Pox)W=u`9pL~jO0aSycAtZC8N?bh8jV>Ll(9B4fz*3=r1&eA??xqBl+{7$cEm^_ zDS^FNmkQFZKWWe`G0OpN7s;Kr-ELo>2R4|TGIkkO?kj4kcj>o2x-wv%Ho4qeC`AnV zK6b*4+7P{0)dl{Wg-`cvRT#M#N5UrC9iC=onZRvkbvsOBH*KfGJ{)2;h5&G{x3;@W zg414O6>={Fi&zmv1sS%usKT@nX`PIII!*B7WJ|tv;sTXwh9)Tzr@ns)D=8k zw^^qjTrPdzRcfVHDP{v$Ix|B&3l%|v_2>c1(_*J@p7bRV6zxv7eXb+*m9@IUiC}))XR4vA*FUl z8GnFM)56wK1Hw@!Qtev_FR)tCr$cy0t1CIc#Wh-&^fB_3VSmW6D3|a=foblo0y3wi zy62(;>YSqs3iFh)VT9*;%YfmOw4253eP0q!B+;jNQMt@bM<8CBOPGsuv{@xXO`i}7 z3&L9?a*V`g52$rp5pMf6@^1F%YOd&n8m%nQN*FJdc{r2fhM5w=HmE9s{AfU;oE$t8 z0PDh{qeq)|gt5PR0-Zl6+9gTx-0w`PTl5}=?+!LO;pb&|6!-OrS zG3DWXr;Q9_dKKlAD}}y_k87wmXB*oE37Yd}n5K4?3DfA7`XoWMMy~sbdGSnWai*rN zNwR1D=9G=TlN*LlqUdtJOrHFRXR-b*uX1Giabx}=bXG{oenC*gaU2}tTDxmXfzbMd zFDE$BMDJ1inv8%wW)cY6Tz$EIeNhE$loo9Ku~kW_1vk0mC_%UGOf}0Tyl$L*nf#a0 zn(2~H(#x%SD4|zVOAK9J_gk1>xkN1j_lG2F*^_~A$hKH$)e+k0l#Bts z1`M}>SnQqEH$0L;?hQoYDxS{B|kCha)gtphGT zv&}4rIA6I?W+;*|yN}(a*h5}`Z}V~9KPPko1k{al%00IAjH~6qM4n5%h%W{g`F8cj z8ooOx_H}G=W?-t*E}^t-n1|Eb2(1nDbZD_-cG|^^|8O;oYc0rio`avNl$HdxirZ|$ zMAo~nX&T%lYd4LAPKo}mhUw#a13fmLI3D$9Rw!fG`sC?_waYt(6M|Y)-Vr@h`^(MK z`n%2J;g(%)-d~Em*C)@TRyOddUArEpwm*57x=~E0W|u-843kJfERTntYnhEd0c>Cd zasY1f80LylfEi51Atk@o)5N$r25Ig8xM3Au>2M>U(#1Y=QMh=y=|lc_FOvLaeOuQ& z`FfY<_zMR|G>njfSR2!TyDgz%XIBV1B_XPpOh>)gT+SulG-9$+1r;T!+WU1~FW5V- zg4CG?Pi_uxhv7*rpzTdZJiatV=b*j&MUp0MOk_u>h z_H$n@xa82O->*6b&f47>pQrqcVk9|m0J}6HADt;+@;bAb(KsRvQ;a>mHqyvGTO+Vl zmKCsmLx1#9{Hg-Vk-wcEeePq&L%tQ3dc1Z-2Tb3QAy|*QA)5EYLytg9KbD;tcKO&cOy!g9hEtm6CHk5O+Sev-o;;??zRUPhS5v9rP5AeHr*L`WnDHk1#YImC4sYui{cx3j;gy^%q}{ zMDOTP`>4{a;axKz{hH@xQAo!{!`u()7_$kD`vyqM!dKOn57QIZUD(_{KObo(dd6L> z__|snz7@*l?rGbA#P>+#pXvAMdv*QY@akl)7^7%$I^ahvbeSiX4N%P=>@2tsOq38_ zt${w?%jH$qpsMO*tZuaM7cMuB_krqosU2P{pOG~$(t4{W)Z1mjrC`ip5a1-G>`zoR zrrdQq*O#3MLw6>%vxvC%+)pu217x^5rxRroC&)9>5^uft6U~L^NR{Dl@;2QIMjuxR zJXMZFpjpDQ??2&PmEvg4=(?G@IQtx*wc7mvuCN~HlPv!@Avgnbc0$8xvU$c?t+m(H z2JP^uZ^R+7er=Q_u|+rdj&@fZPMmlSAu}b-|`=#Bnb-a+brR1Q=%~Mj?TB)kuxWIHEv4Iu6Gn=%LS+$mD&3 zDS$TZ`AYsGtL%~i(rw~qYx@oIf~`q|u6M;moPvHCJmD}LBZ6!1Rj1^s3s+sH0 zTWwj$4KUQ1_$=0#V(F)XD(se77;BVgJ|^?g+)oGQGe&e>s_A^9c+El4h#?HL&j$eLy*b@+jAiV@{X8UKl(Ejq$!?>Q=k1;CAV` zaEay<8*bgP37fYhiTogYV3E22WMRCL%JzZRGy+8M>)`YrmiWFhLHlP1w2&xK#PF}5Q2_pcUI*Lj9#qS#BYVo^i?=8Xo~!^e4BDfxmeL3ezV{A zXkGrp_hRL7PN*HF3hFYSD$b3I2rT)A%#Mmg+Xi}RZ#sQ0SSYw)TOTACEH+cgd!}}l;j?#dka)rn3X#etbPoHg2kbP)EliSkpaN}cvne2Yzaf$Mk{ z)XAmg%n;Q(v9?ldOo!WG1U}t!c3+=_wR^p^i&yk`fEV{C3s2w{ULa$Yn(d#E##tKL zGQ>fAaS>3$deiRt@1FYj?QNqSMjAeCtD!K*TM5}%mh)B-2)rh^x~wYxD96<;bVaVun*aH*c`*Q<6n<)X=|j)}D1UpzkXSrn|18e1JGL>> zQ4ye1etX!OCrsA5@xvg% zGShY*wcTBqB1?;{P~kA*SZ3V=_G*+-?zHPiJDkIz2*K@%q}s7Bi6p@T>x7}U7NraM zFwa{3O{%8vV=4Hw1ZdH?Gkt>J{m}Nok240G{OtM^wF^1I&^v|#0In^S&!5=Y7$a=v z6@Ha2mt+8{ELzACIKsZ!W0H<9^0bvOfh*M3gb@uEz zdj#*so#c_H4wfghCMMX7@_AF;0bLFpPM8>huiM$>>RS) zyPwsSZ>ftek^XtEUqUWNluCK86zOY?Jyl-nB@~Blu5#;PEdgvd&tdP)F3%?qTlgjN zxhEuMuq-~*Lf%b9q-9fX^d}Gp0o>NwQm^+?2Kz0P7&b|-`)@aWxM93lf4VG%%rQ=h zFFt0KUZ`iMlUJ5Z2dORJrcsD8jY_*ZnHarsdN%Jx3?^QTZExVQ>bwfxE(;>r8oX*PCrOAQR`D%3;YFG~6#p>}% z4@eY%&xQr|MR2|1qTEIG)#6WwxP1(>t6~@Xir9SA7_Vt|`AbXETkfl&kb2#CmJf=} zTWF1=dHnFEZ4fk-N*Rnv?hwe;0nxXGc&DTbxgvE$4xRZssLv1r4HVEhcN)K)1D0K5 z3eZcnZ0(Te4=_N(KyL=6L|M;x_@wFiLOZLm1%<|g0=jfGH09fKyz3d)^ul#flT7-dv z4{6d-$-zxA-_KiobMag(-M=x~U>!6dlykbFzDk|X$^Rry+$06GL`uhZANmoiT>(YI z1P!x)mT!dcCJid0&jIohnt_Q)sujE^gwc85lT}&NHd=-NM0F2g$vKPbK0#Vv;ts%! z8305Le@8ba}h^kemaE@PNn?Ke@&MxGv9r(j2NnMpJ-~G zLF8=Ra~NS3L?nX2q{~{y6Y8k*H-P(O;f2t4_p^%BGW`67XIq05&w26{YJ6o7ecw|* zZ;PFao)wKcYNtM?T@*4GcFN7*#qPG-%nXM%OBpZj=a1Nq)-9B#*)aBjx1jjSwUs>_ zA>#kN?+(0w!fW=LoDz99tO!AMh^OdUac#Vk9VOEY#UM9ec)3nuVfYK@Oz+!VZZt@0 zXMe@?PVdlvm$E8pKR%10m>L@1AHs!|~`iv%e_jmmZRT^`+?>f<8 z{s@ZB13|mhR_)XZQ~&c3zvN%=w3KeX7xr9T&YjaUNwjoB-^AEpT;d5S*gb$T`Qs_n zz(JuolyC_O_#XqqR@TQGE8qQ1ERPnT^f;(4=w@N8snL_c!?}?N$jLsoaAEbiG|0{m ze2v_zc^}siqP)*=f0)+nCRl%L4Sp17;Ey$ag-)fz`=pE0k<QB)kgJd6_N5&_m?iAp>b~a5##`@VwMNao~MMW_vLJ+Uu@ghH8FToA3RhhD4I);BY(j7O0 zX8_{$O<}y*l6;eKN0GyFrg+&$>e30GQZuiYZ~Hp#b$;_JKblxsZ#&E^eygYeW>%8O z2W4C13mO&FRdC5K)CXSc!4GaY2&wDfex^>{Oa3t}R(YVI6si=bGBa@R{W#n;u<1zD zbv}_WdJ-eK)hskhiKo=si#Hi-vc*Cb@%???zXL`Gr+M8e;5QZr#lpIGik_WNCOB*kecAg&`P68~>UCxRQzSBHNv{hw1zl-5us_w( z;82wK=#DMRxSUoYZnny6_Wmia9&iuN9_B{B#Y7t-Ic0y>jLF9(ypT|)$iD8tD1(m* zO7WsvX`r!=W{qWSu6~5?f+9%qU>80Emo$;|mQ0kap*jfc@FS2N-jENf#M;Pt&7jxD zydSS~Ac9^#`ojI&Uri-He&k8wy#n)z)@e3RUmjzp_;w-kqh>qsY%xQyO#5`(unzAS zb|=`!(4*)|o|x=Yiqjp!sWzk15Czq4Bg+PrI-5B=>!CKeM>ECli$my)U1{b=X#FtIRAj7$T z&kd!ojP&~QJ*lZWv3i!({c_|s+iZJTbvP4M80RadU(aKtNYqg!zxl#E-UtLtc0rNi zlIQ;J8-G>%VV7ECV-4)CjbEbFVlF72Pm?Bl z($W-WBUm*gZDNAS#gke|JML-Ie3!#1mMkN^^~dijp2E z2An#Kg!$B5-GUj*ai0BlANiIlYIt23N^<6dZV|68To7`akwP+#^xE)=h0&MH?a{SA z7nUU5cHCvQdc^k`%xjv1|8XIkzxV>Tm770WvW?JR)}rTvq>}r7vRP4T5UH1MUZWM| zR!q;BwTXnw^!4l6tO&GXveU%9-OA$&*0=qb4N*$*)OL4pxjM$cf!ky^=a_6|K$5s) z^0K5G-IflUlXsl?>rWT|dxgKd!pjJhbmi>i8F66Jy!QPTcX-7NRYfs&#@^@ee9qQ| zY>wf&v}?Wj+l{|Oz=bOB`-=E625?UYW9SJZCMpIbcv7(Jj;KldT?dbSySZHZE+{dI zpz`BoO}^|cL^p52>yp3Qk$?Fzg7RhF!busWk)RjXzp>u*qs8v!|M7HSaUEkweOqsF zENwBoh4~x1qJyyS`FBnJfKvXO{~ET>>dj8-j5%@|*52fU7@<$29$w0;xUhoqVlpN)ZV}e5w!xKJX8l#(CWUEe83^k2|8q z?9cM&YRlo@832E-G0O)m&^x^%poLoM(Qi6q#{=lcupp{0UVA|SG?|Nctx1P&l(X?O zOsyRNa}K!a77}TaB8IAVBeu=?=w1;<@aKoV{W-|n0Dt~uCS)=g^^JK^!v&R*&wsL9 z=qDOVEvrqIL64{57{*W#B1mAH4l?OG@^WuL#;SjPGCOF2>_=`72R zzoh|D|C$EGZ*X^F^(97cJJr3<6g27d z8Tb)U!kqCADl4R3_J?-jvb)(7Z^Iqo{?dmD&1B=z;~70S?`0izd6?%q@3!PV4pOWv zRyUEp$j`>JG=OQVNr6++PBFg$i*m~OTjozlVQHp;j%Lk}>gdu7OoGjcU89=;d5`7| zmfXikP||wKQdQLEGRAT-)^8E1ep|a!Ma&Gko5u708uK5@?R$$0-L!O32M2am^Ech@qpa7 z06+7hqX1N~HzF@r>H!oW6mAN1$GgqDbReo@>RqsWV-r zm(*@>fo#u=9uMDMTzO&>E2<(d3*xmyS0l-R^x2^&pc}_jRtp$L8B~gt{~Ae883u^> zL%q0yq=r)0fpx)N6uURde%cm8h0I%E=6}I*LBq$XpVFdE&~bi0ttRVXe6$5iGdPKD{Xp z-c?Gzuq3M_<@T0NUN!_oh7h18?C}869K!ca_k*O`YY%Vax>u-zESE#x(IWh3md2tX z#K-iM*gI4JLjr!TV$QZMA+6os*=%MxGw$Wk^P*J`H}$&fQfG`Z#^ieO${ zWFy>q>Lp-FJp~PvV%1K(M0_6Sv4S8P_uhX$^mU?UM(@x%p^LN z5t8VjBKy(LCuJ_m33kTSw-j-L?4!_b>sv}!u_x5tXsm_axA%@6O}*5j2AShGSFkSF z!0XKU_ETHo@i=cjO#g;C=13c*oQFd2#pA~(iJnUv6GcZRDr>xg#}{!t<+2uZFA;4L zm>bSdr;PR@XW!OYuWzGLJpQxnYbuTUkp)5;233RfE`4}ok685U{rE9R>#n0GrA6>& z#UckeG3V0oW^gXH&)Ot(iZNGlx-NI8O8V>HlgY=gRMxVW_k&zZThv|OC6>Hi<4LgP zr72sU0-wE+D;I$P$r$38bdZGE&m*Y{NDncs#8-ck9_D|tto*A6jbY=VXIB$I^Hc~M z(l{nk;GRbrz3Y zd4N%?2*~|qfBhn$lPGTp_|;&aAq|z(Lo>T>`1kf(#r3Y%bC;F1o-yy=`Qk~5 zDs6(lZUjCcdP$e-L!z5hR1rb{q6rw>buiK|n=P>_0AK>8ctlA(Qy;dm;oxi~s@V>C zV;^1u88?I(bwKa&{RtxRud+Ig2HX3t+GX4%Py6h%6|F(&mI3RyBYSmbLL3QY3T_UA zDfp$`5#r46b}n%!@K#=wC1!<&NdZ6i8B=WHSjNcY$Gbx5$2Jc0Dhsc|wKR=#jO zbd4VLYF?#W1SkOQS|q3t`|Em61~3TtFWc#~4j~lDEtN8D1=t~#5nx@XlIGH8)Io>K z@h875gtV8^PzwG{XQSJ33ck_*QcM2!U>obW)5MCq(ISHzV72MZj7z`S@B{MM_;nv? zMmyv@sxsZt` zpk62) zVe%0Lx#EMw=7AtWct$FSO#||-zguM>D2VpwE?S4c$^RLJ3P2VeZe+o5`%ACZ^F#z< zveL?>m2o!!LDC0Ign>^?Bu(18%?hkFrO{%YAkB6o+|_W3tdx( zWg6G^>#PJLA^7MYt1jhzS`#~(*Dy=G1ud(|qc@^mD($bfL<~DQ!c#Z-E^%nREO7Fu z4q=QJ4K*SDugttq+HY>u@?2MyzhZ_>`9cAlydeqb>}96KJl9;Lv=cG-^&E>p_^ANE zNel!yVMIL34;J8+$^L9%TX&Lsi9~Z8#Xxtdi(#>B69Se0cd%0nW8Jkc*lD8YE@GMn zxu14I-4FraWRdigpfP0$iy6fLdeJIz^RMs9sn;wQz^nCEZH=bf`B^lXxa~T1h}I|V zm8%7^ zkk)na#nKWq$T9XSFAL((wrekzmY}$A46ml+%I)!Sv?qsUi=>v>V#Jt5J1CBk{*OMJ z1lG#w(Rmx&^|IBDE%^jI|)PpPtT(BdcNJa_vBNzs+i)N zR9V|^?C#Mh(TZi3Kz{^Eb!iVBrnrm=R}C8L?kYv^6KCLi^f~fm102Z>YNb-SwLc$+ zpHPpe?B~biAP-}n@m5YrliJ2X(`^Buxjj-;o}e3qn@tUs1v-r#^UjOfN^oLJj6*z1 z6eTMh64&&v&*~muuS^cOkCHN+s>BzKu0XVs-;X^Snt)UrtWgGDqNP;J=qeEDkrM8< zlzR_qKNd~0P@{Pzc`KIcpU-LaTx7!SKOLd$ANShyjs1s@PwB&ERm*uR7=2(a*pz$8 z;h3A}U)G&*O&6+k+1+QjCTlK+AKb9UeqDBs|NE4^KTQB1iYAUtuQujn6 zn9RxymE-%|xd*iiliZ2(nfbOuNaiz~LZ}agR=j}QlRO|OlbZzbV}3iG0o26-s+tEO z5W-Bk0!n*c4p~#r@4Odr(x)-;S`331-L!pU%&UrWYF66QS;>i$?>*t92(dCZ{V24b zhuWOMWwRt{8VDftn;IWDZK|tuHFmy^Wk@ec`lVbHusLZJXX6;Xs!~2JeX_WtmNd)= zr;}Hu#-T!pyrPmQl*FqCdrIX`bY^N-gm)ItpS0XQ`n zkcnQZ_8KlTAwzgT3#k;~w@0!Ws;k5@@kRUZhwYD@K{D~wS=>&-bu`cPPRd@LU#Kq| z(HOhYwU!fK&RAa8HqUREjI^YHrpEn$Ui)l2y@vw}=#2n-ZfL)~BUlsRpZM1ThD#lY zQy`f?={&`y)WO0b{9G=>3?qp)qs|2t)8iYgT zW;H`oF|T?iD)#i{o5=SzG+k~mZr^^fWCDK7jcxS-9!TySuD9atcu^qZM5_WmSh3A; zW47Bg8*Db`WOh&$P2`J8{^XOh!=Hx6Y;mGWqXqs2rlhR~;A~Xc;pRZ~ zp+$L79+`XlG}+AKPd4fp@qIXu5SmBF)G1nHQvRn-pHBb=wh|6=OIab)@9gYb5TsN* z^XKk#sd`$W3>q!_fF0N@J4TAiby zdRQ^IxGLmynNf`fK=(n+pO@LqE1+8{FnXgwNvbliRU529fR0%4RNdk8gt#Uw~*`5VPpFTV3K3L-AvlQ^#D=!C6E%ul485 zc(+-y0o1JFgn-py&{^!iU)XA+6tZ5H`fLWG>;IL7_jk|B=UIcYiX3o<|L-76z#vt! zM@)mH+VlQ8$SufZ1#X5Ly?LU4eaO}{+`g{seh%I&&u&yw@^7+gdk58(Nwq@lBwb#; z15W+_2!qoTN^U7&k8iaBeZ-}Jto}Pi}`fj z3TiokGSB_o?7T9tXWsq~*+wim0dsU5a<>BXW!Lm6h_DQqbs#o+24KkBO4-$Xqmw7? zK-yie2<$hrj0T()HzDq~`--N;W)ol8bf{RG7tfE;j zI4&UQWvMXqyNEW66Esxk%YPy~sascr^-clz=P{SMJ@cAN+Nv_i`@zco=}w|a2HwPd zQmUdef%L#)EUI(_KHFb4$AjB$`%=sK9aQ>!f({DG<4vlLROSGuZ0axE*lWoy*Ks{7 zvCfTq<}W&Kv=fi~wtHw)mqa(AlCB9CLXPEocVM{VO^ngN_WZ?^V~hHC&5S{@&<>#ZdA3;%w zGT@u*w&UW61kO39jnB#SR8&SkEo&NHWp(N{%Z9O9Uw|&oJ5dgsknbaQ8@c&&0$N_y95I9&on&VkB$V0+(It)(aiY68Rj+g$6mZ z0js{*$(*8i=IAve$5yp#u+$K7^;Zm>TgiJ+||)fe@j!UO-L z+Wh6c{`bEDf(P_G_@7w5b%*%hYWcsr9H{@2MM_1r)zH!s-Bnjp?kV~$k!;E+d=3$#6C=zcop?b-QD z=4Mh54b|&4*_AI3!&n}hVWS$rQ{q1my@|6)7Em8Z5_I8&{xtc?%g3Up%IW;l(LSQQ z$2(}K`k5pzTVtd6XV^oRATAJSF$pOqN+ZamAfL_XCwh(sw^KlW#hkth7pa<-4}r`> zvNzIkMAWJW)jb#Jm!S@m3+sz5Qpad<-hR7VK^NDm(uDr_`v))jiV0tT`_Cw;EFs}) z)TeRFRS(?S!Hc`+6&%-*t$EcmOjP%#0Z=Ygh!ENzdBJuP>N6QTzVM#5d3F&1a)1B2 zEb!w1NR%?&elu#&3(~@pDg+4`3CBRg&95ijz`shbiGp6)AiA{<%xIrdPcHB;oAv`# z;}Db@4id~E5l32St3qQ0BF)k-s9RZ+Wr*KTH3xViRO^7nw%zT;%T4^QD!l}St){P; zK(Ug^WFhzEsW4pU5)kR?&pw|3ZVY|iLk1S~x%U*hctD?n^kA%%&kd+IDfBt73NEjd zkFOsvoG72Okfj5C*iJ$8N$B&xAEToBpUkMJ{(o5-zUy0rr`kxF(e3A;<*y{KCYN*Z H+JpZCr)Lqs From 110b25943fca58b7e8524ebb837ea981f5f59a73 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 26 Oct 2022 22:37:41 +0530 Subject: [PATCH 020/107] Create aws-k3s.md --- Docs/aws-k3s.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Docs/aws-k3s.md diff --git a/Docs/aws-k3s.md b/Docs/aws-k3s.md new file mode 100644 index 0000000..3ad508a --- /dev/null +++ b/Docs/aws-k3s.md @@ -0,0 +1,72 @@ +# K3s on AWS + +## Introduction +This is a SaaS Solution which installs k3s based on inputs on top of aws. + +## Architecture + +![alt text](aws-k3s-arch.PNG "architecture") + +## Description + +This terraform module creates secure k3s based kubernetes cluster on top of AWS. It Creates the following resources on top of AWS. + +### Created Resources +1. VPC +2. Subnets +3. Security Groups +4. Elastic LoadBalancer +5. Internet Gateway +6. Target Groups +7. k3s Based EC2 Instances as specified + +### Outputs + +The module will output the respective resource id's of the created resources of the cluster. + +## Installing + +### Prerequisites + +1. Windows/Linux system with internet connectivity +2. Active AWS account with secret and access key +3. Terraform cli installed + +### Installation + +Fill the values.tfvars file inside aws/k3s folder accordingly. + +|Values |Description | +--- | --- | +|AWS_ACCESS_KEY | Access key of the AWS account thats used for installation | +|AWS_SECRET_KEY | Secret key of the AWS account thats used for installation | +|albname | Name of the Application LoadBalancer to be Created | +|privatesubnet | Private Subnet cidr to be used for VPC | +|region | AWS account region where all the resources needs to be created | +|securitygroupname | Name of the Security group to be Created | +|vpccidr | cidr range of vpc should be one from privatesubnet range | +|vpcname | VPC Name to be created | +|instance_type | Type of EC2 instance to be used for creation. Define this based on the number of resources you run on the cluster| +|nodemonitoringenabled | Define if the nodemonitoring to be enabled for EC2 this could incur significant charges| +|mastercount | Number of master nodes to be created| +|workercount | Number of worker nodes to be created| + +### Run the following commands after filling the values.tfvars + +``` terraform init ``` + +This initializes all the modules + +``` terraform plan -var-file values.tfvars ``` + +This will output all the changes that will be done to the AWS resources and also what will be added/removed/modified. + +Finally if everything is fine + +``` terraform apply -var-files values.tfvars ``` + +Type yes when prompted. + +where main.tf calls the scripts server_install.sh and worker_install.sh inorder to install the k3s on control-plane and worker nodes respectively. + +Once the installation is completed the terraform will print success message with number of resources added/modified/destroyed. And all output of the resource id's will be printed. From e673f1c1b85b5398f8f747dd67a719f7eb3ba973 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 26 Oct 2022 22:40:54 +0530 Subject: [PATCH 021/107] Create values.tfvars --- aws/k3s/values.tfvars | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 aws/k3s/values.tfvars diff --git a/aws/k3s/values.tfvars b/aws/k3s/values.tfvars new file mode 100644 index 0000000..c028207 --- /dev/null +++ b/aws/k3s/values.tfvars @@ -0,0 +1,12 @@ +AWS_ACCESS_KEY = +AWS_SECRET_KEY = +albname = +privatesubnet = +region = +securitygroupname = +vpccidr = +vpcname = +instance_type = +nodemonitoringenabled = +mastercount = +workercount = From 4a1a57e4736f5be7f856c7295ce9c8a4c5568fce Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 27 Oct 2022 00:17:37 +0530 Subject: [PATCH 022/107] Add files via upload --- Docs/aws-k3s | 1 + 1 file changed, 1 insertion(+) create mode 100644 Docs/aws-k3s diff --git a/Docs/aws-k3s b/Docs/aws-k3s new file mode 100644 index 0000000..bafb925 --- /dev/null +++ b/Docs/aws-k3s @@ -0,0 +1 @@ +7Zpdc6M2FIZ/jWfai/UAAmwuEzu7zUw6m2mm248bjwwK1gQjKuTYzq+vBBIGBDH2gpNtM7mIdSRAnPeRdI7ECMzWuy8UJqtfSYCikWUEuxGYjyzLNGzA/wnLPrfYtpcbQooD2ehgeMAvSF0prRscoDS3SRMjJGI4SStX+ySOkc8qDSGlZFu99pFE1acmMESa4cGHkW79AwdslVunjnGw/4JwuJJPNk1D1qyhaiwN6QoGZFsygZsRmFFCWP5rvZuhSDhP+SW/7nNLbdEximLW5QLj7vPccp6+btLb+c76ffb1b4w/SXWeYbSRLyw7y/bKA2TDIhyjWeFgYwSuA5iuUCALz4gyzF12B5couicpZpjEvG5JGCPrUoOrCIeigpGEW6Es+fwFEOWGFVtHvGzyn9xZiXj+ehcKrsZwm4IxjlMGY1/gcP2Io2hGIkKzTgLLnBlXjriQUfKESjWG4brOVFxBYlayOzPxx+2UbOIgexfxYOkP3mG0a3W0WcjHuUdkjRjd8ybqAqW4RN6cyvL2AFCByaoEj2oHJbNhceuDrPyHVPYEldVgKsn8G5cVicEEl1zoTpq3OfAVl7eINDQ9oqdyKjGBKsu3E/UwTfLXesQ70Y8m3OwxRSnZUB/d+qI/17yY/6q1Eo5c5G4cACbbAFWYTB0mMNFZUrb+WTI1lm7iICE4ZukHR+dzhAonDkCRW5uSLOBqFLmeTpGy9U+RpVF0K/wfIzayeN+AKSQNIUNbuP/A6nyssPTqQvlyALqA52k02Y5Ok7L1T9N/Low5Heb+wxhQnTOApa883kWjGOdHUtmPYJpifxERGCyWMBKK0/cduNpmbZWwdcUdb9wwst3BNJ8c17zqB0h9NbdWtDc7LwUxiZG88h4yMX1y45Q/0y5uoVJB6xV5ehBkUkskJg2JhNcoiOUMpsj0uCLpE2L+Sg64kxbrbqOjpNCl1mmltFqnjaZ1OgvgEL15Rlkc1zY52ONNmj2r9xE8mdRHcEFHeW02G9ZmcyhevOO8HNWuJEpHGRuBaaWrrtHLhqLxFi0XlDSkdQOOeKceqDfI5zQsuvZQw12pVZLvAfkbipno9RfumESTk78+q4qmyVNXsVCah7H4JU+mszGmcqL5yLkeOXNxrw3jhLyoYPmo0MrUNuPUgu/yoLd7yr6MseVUZ/KGlbXYNqqk8YPpamu63sysn55A+jNPwCKh35JWZHX/2YitysxBn3IBrngD00h2mZtUPf8Viv9rmAqte4AjH+KDklEOGbqR0kOA7dbGekOAPbnoWNcD7J6Z2BL69MHECUwA962ZcBuW75yFNIFxJxrsFhrueGrE64vkSN6X9zO/dd6qD1rWOAjyhfwSwNgXBAZMvPGkurgA480Xlw5ZG4qDK3E+J2TLU+WqpoeQyziaHdeD9FMyi7xjKNCOAWsK8M5n222vhbpSBwZpiNhr/rGbNT0S5CkbRRFk+Lna4SYR5RPuBeQlZOoxZn3HJn9ReZVVOlGs36iebdSByh2h3Shjqnjt78CsQyr6XjBLuS+Y6omcM3pETzU8il7O6Fuh59g1YiZnoud4LbHThdBTpJ+MXoWDNyWSM0b3f8rHZIW/RGFc1M135cr5vly6RxRzH4rFNjP2OYtaXVH23hTl2va46Z2L8rR2o3osNzTK+oHuu51F+8RMfU10FDPrA7M+MNM3kv4XmE27YtYS518oJqwf9pnnxoQ1zLSjoaFjQn02+3Y/00g7fkIRUhhgdOBGxmwlGrcrzNBDAjP9txQmVfKsYjextLvYeBoQZruo4pFNJ/hZ7eI58ZuQn04803ObU9LXd8oj9CiTeB/H4V1WmoOGvY7iEZXjltH3p65OlZSGr+Tcpq/kwGAHzKBpr6N9itKJ+BHnp66JQ5uYl5mfChKKnNUce8AEIvCfeDwbcM+brmy3OCArUhJrbJmOYXqW49iOM+1p+uLFw7e+efPDF9Pg5l8= \ No newline at end of file From b9d64424f6d2538931cfba7e4a8807f2ac08d166 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 27 Oct 2022 00:18:28 +0530 Subject: [PATCH 023/107] Delete aws-k3s --- Docs/aws-k3s | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Docs/aws-k3s diff --git a/Docs/aws-k3s b/Docs/aws-k3s deleted file mode 100644 index bafb925..0000000 --- a/Docs/aws-k3s +++ /dev/null @@ -1 +0,0 @@ -7Zpdc6M2FIZ/jWfai/UAAmwuEzu7zUw6m2mm248bjwwK1gQjKuTYzq+vBBIGBDH2gpNtM7mIdSRAnPeRdI7ECMzWuy8UJqtfSYCikWUEuxGYjyzLNGzA/wnLPrfYtpcbQooD2ehgeMAvSF0prRscoDS3SRMjJGI4SStX+ySOkc8qDSGlZFu99pFE1acmMESa4cGHkW79AwdslVunjnGw/4JwuJJPNk1D1qyhaiwN6QoGZFsygZsRmFFCWP5rvZuhSDhP+SW/7nNLbdEximLW5QLj7vPccp6+btLb+c76ffb1b4w/SXWeYbSRLyw7y/bKA2TDIhyjWeFgYwSuA5iuUCALz4gyzF12B5couicpZpjEvG5JGCPrUoOrCIeigpGEW6Es+fwFEOWGFVtHvGzyn9xZiXj+ehcKrsZwm4IxjlMGY1/gcP2Io2hGIkKzTgLLnBlXjriQUfKESjWG4brOVFxBYlayOzPxx+2UbOIgexfxYOkP3mG0a3W0WcjHuUdkjRjd8ybqAqW4RN6cyvL2AFCByaoEj2oHJbNhceuDrPyHVPYEldVgKsn8G5cVicEEl1zoTpq3OfAVl7eINDQ9oqdyKjGBKsu3E/UwTfLXesQ70Y8m3OwxRSnZUB/d+qI/17yY/6q1Eo5c5G4cACbbAFWYTB0mMNFZUrb+WTI1lm7iICE4ZukHR+dzhAonDkCRW5uSLOBqFLmeTpGy9U+RpVF0K/wfIzayeN+AKSQNIUNbuP/A6nyssPTqQvlyALqA52k02Y5Ok7L1T9N/Low5Heb+wxhQnTOApa883kWjGOdHUtmPYJpifxERGCyWMBKK0/cduNpmbZWwdcUdb9wwst3BNJ8c17zqB0h9NbdWtDc7LwUxiZG88h4yMX1y45Q/0y5uoVJB6xV5ehBkUkskJg2JhNcoiOUMpsj0uCLpE2L+Sg64kxbrbqOjpNCl1mmltFqnjaZ1OgvgEL15Rlkc1zY52ONNmj2r9xE8mdRHcEFHeW02G9ZmcyhevOO8HNWuJEpHGRuBaaWrrtHLhqLxFi0XlDSkdQOOeKceqDfI5zQsuvZQw12pVZLvAfkbipno9RfumESTk78+q4qmyVNXsVCah7H4JU+mszGmcqL5yLkeOXNxrw3jhLyoYPmo0MrUNuPUgu/yoLd7yr6MseVUZ/KGlbXYNqqk8YPpamu63sysn55A+jNPwCKh35JWZHX/2YitysxBn3IBrngD00h2mZtUPf8Viv9rmAqte4AjH+KDklEOGbqR0kOA7dbGekOAPbnoWNcD7J6Z2BL69MHECUwA962ZcBuW75yFNIFxJxrsFhrueGrE64vkSN6X9zO/dd6qD1rWOAjyhfwSwNgXBAZMvPGkurgA480Xlw5ZG4qDK3E+J2TLU+WqpoeQyziaHdeD9FMyi7xjKNCOAWsK8M5n222vhbpSBwZpiNhr/rGbNT0S5CkbRRFk+Lna4SYR5RPuBeQlZOoxZn3HJn9ReZVVOlGs36iebdSByh2h3Shjqnjt78CsQyr6XjBLuS+Y6omcM3pETzU8il7O6Fuh59g1YiZnoud4LbHThdBTpJ+MXoWDNyWSM0b3f8rHZIW/RGFc1M135cr5vly6RxRzH4rFNjP2OYtaXVH23hTl2va46Z2L8rR2o3osNzTK+oHuu51F+8RMfU10FDPrA7M+MNM3kv4XmE27YtYS518oJqwf9pnnxoQ1zLSjoaFjQn02+3Y/00g7fkIRUhhgdOBGxmwlGrcrzNBDAjP9txQmVfKsYjextLvYeBoQZruo4pFNJ/hZ7eI58ZuQn04803ObU9LXd8oj9CiTeB/H4V1WmoOGvY7iEZXjltH3p65OlZSGr+Tcpq/kwGAHzKBpr6N9itKJ+BHnp66JQ5uYl5mfChKKnNUce8AEIvCfeDwbcM+brmy3OCArUhJrbJmOYXqW49iOM+1p+uLFw7e+efPDF9Pg5l8= \ No newline at end of file From 674693102401bdbb39499de4ad2e1ef34248066a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 27 Oct 2022 00:22:06 +0530 Subject: [PATCH 024/107] Add files via upload --- Docs/aws-k3s-arch.png | Bin 0 -> 41319 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Docs/aws-k3s-arch.png diff --git a/Docs/aws-k3s-arch.png b/Docs/aws-k3s-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..8f81fedfe807e8676d1dc09b605476f7c1046de2 GIT binary patch literal 41319 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 literal 0 HcmV?d00001 From 80f95eba130da084652dd953f0703f6e792b4516 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 27 Oct 2022 00:29:55 +0530 Subject: [PATCH 025/107] Update aws-k3s.md --- Docs/aws-k3s.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Docs/aws-k3s.md b/Docs/aws-k3s.md index 3ad508a..29816e7 100644 --- a/Docs/aws-k3s.md +++ b/Docs/aws-k3s.md @@ -4,8 +4,7 @@ This is a SaaS Solution which installs k3s based on inputs on top of aws. ## Architecture - -![alt text](aws-k3s-arch.PNG "architecture") +![image](https://user-images.githubusercontent.com/110480433/198113277-1cd24a3f-b55f-48ad-bad9-b8e7358c0bcf.png) ## Description From 52d2fd011061ac1d4e6ffbd750d1caa45364d831 Mon Sep 17 00:00:00 2001 From: Pramod V Date: Mon, 5 Dec 2022 13:14:55 -0500 Subject: [PATCH 026/107] Add Azure on Talos --- aws/talos/values.tfvars | 4 +- azure/talos/main.tf | 258 +++++++++++++++++++++++++ azure/talos/scripts/bootstrapetcd.sh | 0 azure/talos/scripts/talos-image-gen.sh | 30 +++ azure/talos/vars.tf | 17 ++ 5 files changed, 307 insertions(+), 2 deletions(-) create mode 100644 azure/talos/main.tf create mode 100644 azure/talos/scripts/bootstrapetcd.sh create mode 100644 azure/talos/scripts/talos-image-gen.sh create mode 100644 azure/talos/vars.tf diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars index c028207..23f9c06 100755 --- a/aws/talos/values.tfvars +++ b/aws/talos/values.tfvars @@ -8,5 +8,5 @@ vpccidr = vpcname = instance_type = nodemonitoringenabled = -mastercount = -workercount = +mastercount = 3 +workercount = diff --git a/azure/talos/main.tf b/azure/talos/main.tf new file mode 100644 index 0000000..81fb4ca --- /dev/null +++ b/azure/talos/main.tf @@ -0,0 +1,258 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=3.0.0" + } + } +} + +provider "azurerm" { + features {} + +} + +resource "azurerm_resource_group" "storagerg" { + name = "StorageRG" + location = var.region +} + +resource "azurerm_storage_account" "talosimagesa" { + name = "talosimagesa" + resource_group_name = "${azurerm_resource_group.testrg.name}" + location = var.region + account_tier = "Standard" + account_replication_type = "GRS" + + tags { + environment = "talosaz" + } +} + +resource "azurerm_storage_container" "talosimagecont" { + name = "talosimagecont" + storage_account_name = azurerm_storage_account.talosimagesa.name + container_access_type = "private" +} + +resource "null_resource" "talosimagecreate" { + + provisioner "local-exec" { + command = "/bin/bash scripts/talos-image-gen.sh" + } + depends_on = [ + azurerm_storage_container.talosimagecont + ] +} + +resource "azurerm_resource_group" "talosrg" { + name = "talosrg" + location = var.region +} + +resource "azurerm_virtual_network" "talosnet" { + name = "talosnet" + address_space = [ "10.0.0.0/16" ] + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + +} + +resource "azurerm_subnet" "talossubnet" { + name = "talossubnet" + resource_group_name = azurerm_resource_group.talosrg.name + virtual_network_name = azurerm_virtual_network.talosnet.name + address_prefixes = "10.0.1.0/24" + +} + +resource "azurerm_network_security_group" "talossg" { + name = "talossg" + resource_group_name = azurerm_resource_group.talosrg.name + +} + +resource "azurerm_network_security_rule" "apid" { + name = "apid" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1001" + destination_port_ranges = [ "50000" ] + direction = "inbound" + +} + +resource "azurerm_network_security_rule" "trustd" { + name = "trustd" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1002" + destination_port_ranges = [ "50001" ] + direction = "inbound" + +} + +resource "azurerm_network_security_rule" "etcd" { + name = "etcd" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1003" + destination_port_ranges = [ "2379-2380" ] + direction = "inbound" + +} + +resource "azurerm_network_security_rule" "kube" { + name = "kube" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1004" + destination_port_ranges = [ "6443" ] + direction = "inbound" + +} + +resource "azurerm_public_ip" "talos-public-ip" { + name = "talos-public-ip" + resource_group_name = azurerm_network_security_group.talossg.name + allocation_method = "static" + +} + +resource "azurerm_lb" "taloslb" { + name = "taloslb" + resource_group_name = azurerm_network_security_group.talossg.name + location = var.region + + frontend_ip_configuration { + name = "talosfe" + public_ip_address_id = azurerm_public_ip.talos-public-ip.id + } + +} + +data "azurerm_lb_backend_address_pool" "talosbe" { + name = "talosbe" + loadbalancer_id = azurerm_lb.taloslb.id +} + +resource "azurerm_lb_probe" "talos-lb-health" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "talos-lb-health" + port = 6443 + protocol = "Tcp" +} + +resource "azurerm_lb_rule" "talos-6443" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "talos-6443" + protocol = "Tcp" + frontend_port = 6443 + backend_port = 6443 + frontend_ip_configuration_name = "talosfe" + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.ID ] + probe_id = azurerm_lb_probe.talos-lb-health.id + resource_group_name = azurerm_resource_group.talosrg.name + +} + +resource "azurerm_network_interface" "nics" { + count = length(var.nics) + name = "nic-${count.index}" + location = azurerm_resource_group.group.location + resource_group_name = azurerm_resource_group.group.name + network_security_group_name = azurerm_network_security_group.talossg.name + loadbalancer_id = azurerm_lb.taloslb.ID + virtual_network_name = azurerm_virtual_network.talosnet.name + + ip_configuration { + name = "config-${count.index}" + subnet_id = element(azurerm_subnet.subnets[*].id, count.index % 4) + private_ip_address = element(var.nics, count.index) + public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % 4) + + } +} + +resource "azurerm_availability_set" "talosas" { + name = "talosas" + location = azurerm_resource_group.talosrg.location + resource_group_name = azurerm_resource_group.talosrg.name + +} + +resource "null_resource" "createtalosconfig" { + provisioner "local-exec" { + + command = "/bin/bash talosctl gen config talos-k8s-azure-tutorial https://${azurerm_lb.taloslb.public_ip}:6443 " + + } + + depends_on = [ azurerm_lb.taloslb ] + +} + +data "local_file" "controllerfile" { + filename = "./controlplane.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +data "local_file" "workerfile" { + filename = "./worker.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +resource "azurerm_virtual_machine" "talosmaster" { + count = var.mastercount + name = "talosmaster" + image = "talos" + resource_group_name = azurerm_resource_group.talosrg.name + boot_diagnostics { + storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint + } + + os_profile { + admin_username = "talos" + custom_data = data.local_file.controllerfile + } + + storage_data_disk { + disk_size_gb = "20" + } + + network_interface_ids = [ element( azurerm_network_interface.nics[*].ID, count.index ) ] + availability_set_id = azurerm_availability_set.talosas.id + + + +} + +resource "azurerm_virtual_machine" "talosworker" { + count = var.workercount + name = "talosworker" + image = "talos" + resource_group_name = azurerm_resource_group.talosrg.name + boot_diagnostics { + storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint + } + + os_profile { + admin_username = "talos" + custom_data = data.local_file.workerfile + } + + storage_data_disk { + disk_size_gb = "20" + } + + availability_set_id = azurerm_availability_set.talosas.id + + + +} + +resource "null_resource" "bootstrap_etcd" { + provisioner "local-exec" { + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_virtual_machine.talosmaster.0.public_ip}" + + } + depends_on = [ azurerm_virtual_machine.talosmaster ] + +} + diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh new file mode 100644 index 0000000..e69de29 diff --git a/azure/talos/scripts/talos-image-gen.sh b/azure/talos/scripts/talos-image-gen.sh new file mode 100644 index 0000000..4dde2c9 --- /dev/null +++ b/azure/talos/scripts/talos-image-gen.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +#create directory to store images + +mkdir -p manifests/image/talos + +curl -o manifests/image/talos https://github.com/siderolabs/talos/releases/download/v1.2.7/azure-amd64.tar.gz + +tar -xvzf manifests/image/talos/azure-amd64.tar.gz + +#Install azure cli + +curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + +export CONNECTION = $(az storage account show-connection-string \ + -n talosimagesa \ + -g StorageRG \ + -o tsv) + +az storage blob upload \ + --connection-string $CONNECTION \ + --container-name talosimagecont \ + -f manifests/image/talos/disk.vhd \ + -n talos-azure.vhd + +az image create \ + --name talos \ + --source https://talosimagesa.blob.core.windows.net/talosimagecont/disk.vhd \ + --os-type linux \ + -g StorageRG diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf new file mode 100644 index 0000000..d93f040 --- /dev/null +++ b/azure/talos/vars.tf @@ -0,0 +1,17 @@ +variable "region" { + description = "Azure Region to deploy the resources" +} + +variable "mastercount" { + description = "talos master node count" + default = 3 +} + +variable "workercount" { + description = "talos worker node count" + default = 3 +} + +variable "nics" { + description = "nics name" +} From 5249104bd5f8a96905e05c7c1db8a622307c815f Mon Sep 17 00:00:00 2001 From: pramv Date: Sun, 11 Dec 2022 23:05:44 +0530 Subject: [PATCH 027/107] fix older version --- aws/main.tf | 192 ++++++++++++++++++++++++++++++++++ aws/scripts/talosconfiggen.sh | 44 ++++++++ aws/values.tfvars | 12 +++ aws/vars.tf | 50 +++++++++ 4 files changed, 298 insertions(+) create mode 100644 aws/main.tf create mode 100644 aws/scripts/talosconfiggen.sh create mode 100644 aws/values.tfvars create mode 100644 aws/vars.tf diff --git a/aws/main.tf b/aws/main.tf new file mode 100644 index 0000000..62a622c --- /dev/null +++ b/aws/main.tf @@ -0,0 +1,192 @@ +provider "aws" { + region = var.region + access_key = var.AWS_ACCESS_KEY + secret_key = var.AWS_SECRET_KEY +} + +data "aws_ami" "talos"{ + most_recent = true + name_regex = "^talos-v1.1.1*" + owners = ["540036508848"] + + filter { + name = "architecture" + values = ["x86_64"] + } + +} + + +module "vpc" { + source = "terraform-aws-modules/vpc/aws" + + name = var.vpcname + cidr = var.vpccidr + + azs = ["${var.region}a", "${var.region}b", "${var.region}c"] + private_subnets = [ var.privatesubnet ] + create_igw = true +} + +resource "aws_internet_gateway" "ig" { + vpc_id = "${module.vpc.vpc_id}" + tags = { + Name = "${var.vpcname}-igw" + } +} + +resource "aws_route" "igwroute" { + route_table_id = module.vpc.vpc_main_route_table_id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +resource "aws_route" "privateigwroute" { + route_table_id = module.vpc.private_route_table_ids[0] + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +module "security_group" { + source = "terraform-aws-modules/security-group/aws" + + name = var.securitygroupname + description = "Security group for VPC" + vpc_id = module.vpc.vpc_id + + + ingress_cidr_blocks = ["0.0.0.0/0"] + ingress_rules = ["http-80-tcp", "all-all"] + + egress_rules = ["all-all"] + +} + +module "alb" { + source = "terraform-aws-modules/alb/aws" + + name = var.albname + + load_balancer_type = "network" + + vpc_id = module.vpc.vpc_id + + subnets = [ "${element(module.vpc.private_subnets, 0)}","${element(module.vpc.private_subnets, 1)}" ] + +} + + +resource "null_resource" "createtalosconfig" { + provisioner "local-exec" { + + command = "/bin/bash scripts/talosconfiggen.sh -h ${module.alb.lb_dns_name} -p 443" + + } + + depends_on = [ module.alb ] + +} + +data "local_file" "controllerfile" { + filename = "scripts/controlplane.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +data "local_file" "workerfile" { + filename = "scripts/worker.yaml" + depends_on = [ null_resource.createtalosconfig ] +} + +resource "aws_instance" talos_master_instance { + + count = var.mastercount + + ami = data.aws_ami.talos.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = "${element(module.vpc.private_subnets, 0)}" + + user_data = data.local_file.controllerfile.content + associate_public_ip_address = true + + depends_on = [ data.local_file.controllerfile ] + + tags = { + Name = "talosmaster" + } + + +} +resource "aws_instance" talos_worker_instance { + + count = var.workercount + + ami = data.aws_ami.talos.id + instance_type = var.instance_type + monitoring = var.nodemonitoringenabled + vpc_security_group_ids = [ module.security_group.security_group_id ] + subnet_id = "${element(module.vpc.private_subnets, 0)}" + + user_data = data.local_file.workerfile.content + associate_public_ip_address = true + + depends_on = [ data.local_file.workerfile ] + + tags = { + Name = "talosworker" + } + + +} + + +resource "aws_lb_target_group" "talos-tg" { + name = "talos-tg" + port = 6443 + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + +resource "aws_lb_target_group_attachment" "registertarget" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.talos-tg.arn + target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_master_instance ] + +} + + +resource "aws_alb_listener" "talos-listener" { + load_balancer_arn = module.alb.lb_arn + port = 443 + protocol = "TCP" + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.talos-tg.arn + } + +} + +resource "null_resource" "bootstrap_etcd" { + provisioner "local-exec" { + command = "talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" + + } + provisioner "local-exec" { + command = "talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" + + } + provisioner "local-exec" { + command = "sleep 60; talosctl --talosconfig scripts/talosconfig bootstrap" + } + + provisioner "local-exec" { + command = "talosctl --talosconfig scripts/talosconfig kubeconfig ." + } + depends_on = [ aws_instance.talos_master_instance ] + +} diff --git a/aws/scripts/talosconfiggen.sh b/aws/scripts/talosconfiggen.sh new file mode 100644 index 0000000..b8e6c9a --- /dev/null +++ b/aws/scripts/talosconfiggen.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +if [ $# -ne 2 ] +then + echo "Usage: $0 dnsname port" +fi + +while getopts "h:p" OPTION; +do + case "${OPTION}" in + h) + dnsname="$OPTARG" + ;; + p) + port="$OPTARG" + ;; + esac +done +if ! command -v talosctl &> /dev/null +then + echo "Installing talos cli" + curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-amd64 + chmod +x /usr/local/bin/talosctl +else + echo "talosctl is already installed skipping.." +fi + +echo ${dnsname} +echo ${4} +talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ +talosctl validate --config scripts/controlplane.yaml --mode cloud +if [ $? -eq 1 ] +then + echo "scripts/controlplane.yaml is invalid" + exit +fi + +talosctl validate --config scripts/worker.yaml --mode cloud + +if [ $? -eq 1 ] +then + echo "scripts/worker.yaml is invalid" + exit +fi diff --git a/aws/values.tfvars b/aws/values.tfvars new file mode 100644 index 0000000..5b09d71 --- /dev/null +++ b/aws/values.tfvars @@ -0,0 +1,12 @@ +AWS_ACCESS_KEY = "" +AWS_SECRET_KEY = "" +albname = "talosalb" +privatesubnet = "10.0.1.0/24" +region = "us-west-1" +securitygroupname = "talossg" +vpccidr = "10.0.0.0/16" +vpcname = "talosvpc" +instance_type = "t3.small" +nodemonitoringenabled = "false" +mastercount = 3 +workercount = 3 diff --git a/aws/vars.tf b/aws/vars.tf new file mode 100644 index 0000000..2ffbfb8 --- /dev/null +++ b/aws/vars.tf @@ -0,0 +1,50 @@ +variable "AWS_ACCESS_KEY" { + description = "AWS Access key" +} + +variable "AWS_SECRET_KEY" { + description = "AWS Secret key" +} + +variable "region" { + description = "AWS Region to deploy the resources" +} + +variable "privatesubnet" { + description = "vpc private subnet cidr" +} + +variable "vpcname" { + description = "Name of the VPC to be created" +} + +variable "vpccidr" { + description = "VPC cidr to be used while creating VPC" +} + +variable "securitygroupname" { + description = "Security group name to be created " + +} + +variable "albname" { + description = "AWS loadbalancer name" + +} + +variable "instance_type" { + description = "aws instance type to be used" +} + +variable "nodemonitoringenabled" { + description = "aws monitoring enabled/disabled mark true/false" +} + +variable "mastercount" { + description = "talos master node count" +} + +variable "workercount" { + description = "talos worker node count" +} + From 0c6f0d029de9f96410713baaca9af8415b4ed358 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sun, 5 Feb 2023 14:00:07 +0530 Subject: [PATCH 028/107] Adding openebs --- aws/talos/main.tf | 68 ++++++++++++++++++----------- aws/talos/scripts/patch.yaml | 17 ++++++++ aws/talos/scripts/talosconfiggen.sh | 25 +++++------ 3 files changed, 72 insertions(+), 38 deletions(-) create mode 100644 aws/talos/scripts/patch.yaml diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 3ccc2fd..df37d94 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -6,8 +6,8 @@ provider "aws" { data "aws_ami" "talos"{ most_recent = true - name_regex = "^talos-v1.1.1-ap-south-1*" - owners = ["540036508848"] + name_regex = "^talos-aws-v1.3.3*" + owners = ["754618858321"] filter { name = "architecture" @@ -16,6 +16,7 @@ data "aws_ami" "talos"{ } + module "vpc" { source = "terraform-aws-modules/vpc/aws" @@ -28,13 +29,12 @@ module "vpc" { } resource "aws_internet_gateway" "ig" { - vpc_id = module.vpc.vpc_id + vpc_id = "${module.vpc.vpc_id}" tags = { Name = "${var.vpcname}-igw" } } - resource "aws_route" "igwroute" { route_table_id = module.vpc.vpc_main_route_table_id destination_cidr_block = "0.0.0.0/0" @@ -56,15 +56,12 @@ module "security_group" { ingress_cidr_blocks = ["0.0.0.0/0"] - ingress_rules = [ "k8s-apiserver" ] - - rules = { "k8s-apiserver" : [ 6443 , 6443 , "tcp" , "Apiserver" ] , "all-all": [ -1, -1, "icmp", "All protocols" ]} - + ingress_rules = ["http-80-tcp", "all-all"] + egress_rules = ["all-all"] } - module "alb" { source = "terraform-aws-modules/alb/aws" @@ -74,10 +71,11 @@ module "alb" { vpc_id = module.vpc.vpc_id - subnets = [ element(module.vpc.private_subnets, 0),element(module.vpc.private_subnets, 1) ] + subnets = [ "${element(module.vpc.private_subnets, 0)}","${element(module.vpc.private_subnets, 1)}" ] } + resource "null_resource" "createtalosconfig" { provisioner "local-exec" { @@ -107,24 +105,23 @@ resource "aws_instance" talos_master_instance { instance_type = var.instance_type monitoring = var.nodemonitoringenabled vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = element(module.vpc.private_subnets, 0) + subnet_id = "${element(module.vpc.private_subnets, 0)}" user_data = data.local_file.controllerfile.content associate_public_ip_address = true - depends_on = [ data.local_file.controllerfile ] - - metadata_options { - http_tokens = "required" + root_block_device { + volume_size = 200 } + depends_on = [ data.local_file.controllerfile ] + tags = { Name = "talosmaster" } } - resource "aws_instance" talos_worker_instance { count = var.workercount @@ -133,17 +130,16 @@ resource "aws_instance" talos_worker_instance { instance_type = var.instance_type monitoring = var.nodemonitoringenabled vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = element(module.vpc.private_subnets, 0) + subnet_id = "${element(module.vpc.private_subnets, 0)}" user_data = data.local_file.workerfile.content - associate_public_ip_address = false + associate_public_ip_address = true depends_on = [ data.local_file.workerfile ] - metadata_options { - http_tokens = "required" + root_block_device { + volume_size = 200 } - tags = { Name = "talosworker" } @@ -151,6 +147,18 @@ resource "aws_instance" talos_worker_instance { } +resource "aws_ebs_volume" "ebs_volume" { + count = "${var.workercount}" + availability_zone = "${element(aws_instance.talos_master_instance.*.availability_zone, count.index)}" + size = "200" +} + +resource "aws_volume_attachment" "volume_attachement" { + count = "${var.workercount}" + volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}" + device_name = "/dev/sdd" + instance_id = "${element(aws_instance.talos_worker_instance.*.id, count.index)}" +} resource "aws_lb_target_group" "talos-tg" { name = "talos-tg" @@ -161,12 +169,11 @@ resource "aws_lb_target_group" "talos-tg" { } - resource "aws_lb_target_group_attachment" "registertarget" { count = var.mastercount target_group_arn = aws_lb_target_group.talos-tg.arn - target_id = element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index) + target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" depends_on = [ aws_instance.talos_master_instance ] } @@ -175,7 +182,7 @@ resource "aws_lb_target_group_attachment" "registertarget" { resource "aws_alb_listener" "talos-listener" { load_balancer_arn = module.alb.lb_arn port = 443 - protocol = "HTTPS" + protocol = "TCP" default_action { type = "forward" target_group_arn = aws_lb_target_group.talos-tg.arn @@ -185,9 +192,20 @@ resource "aws_alb_listener" "talos-listener" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${aws_instance.talos_master_instance.0.public_ip}" + command = "./talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" } + provisioner "local-exec" { + command = "./talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" + + } + provisioner "local-exec" { + command = "sleep 60; ./talosctl --talosconfig scripts/talosconfig bootstrap" + } + + provisioner "local-exec" { + command = "./talosctl --talosconfig scripts/talosconfig kubeconfig ." + } depends_on = [ aws_instance.talos_master_instance ] } diff --git a/aws/talos/scripts/patch.yaml b/aws/talos/scripts/patch.yaml new file mode 100644 index 0000000..d24506b --- /dev/null +++ b/aws/talos/scripts/patch.yaml @@ -0,0 +1,17 @@ +- op: add + path: /machine/install/extensions + value: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 +- op: add + path: /machine/install/image + value: ghcr.io/siderolabs/installer:v1.3.3 +- op: add + path: /machine/kubelet/extraMounts + value: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index 1ee02fb..0e69ca5 100755 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ "$#" -ne 2 ] +if [ $# -ne 2 ] then echo "Usage: $0 dnsname port" fi @@ -8,7 +8,7 @@ fi while getopts "h:p" OPTION; do case "${OPTION}" in - h) + h) dnsname="$OPTARG" ;; p) @@ -16,29 +16,28 @@ do ;; esac done -if ! command -v talosctl &> /dev/null +if ! command -v ./talosctl &> /dev/null then echo "Installing talos cli" - curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-"$(uname -s | tr "[:upper:]" "[:lower:]")"-amd64 - chmod +x /usr/local/bin/talosctl + curl -Lo talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-arm64 + chmod +x ./talosctl else echo "talosctl is already installed skipping.." fi -echo "${dnsname}" -echo "${4}" -echo "${port}" -talosctl gen config talosconfig-userdata https://"${dnsname}":"${4}" --with-examples=false --with-docs=false --output-dir scripts/ -talosctl validate --config scripts/controlplane.yaml --mode cloud -if [ "$?" -eq 1 ] +echo ${dnsname} +echo ${4} +./talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml +./talosctl validate --config scripts/controlplane.yaml --mode cloud +if [ $? -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit fi -talosctl validate --config scripts/worker.yaml --mode cloud +./talosctl validate --config scripts/worker.yaml --mode cloud -if [ "$?" -eq 1 ] +if [ $? -eq 1 ] then echo "scripts/worker.yaml is invalid" exit From 048f7a12f012a930052a0b1a4594b5daaa944d21 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 25 Feb 2023 15:46:34 +0530 Subject: [PATCH 029/107] Add traefik LB --- aws/talos/main.tf | 76 +++++++++++++++++++++++++++++++++++++++++++++++ aws/talos/vars.tf | 7 +++++ 2 files changed, 83 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index df37d94..2b918e5 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -169,6 +169,24 @@ resource "aws_lb_target_group" "talos-tg" { } +resource "aws_lb_target_group" "traefik-tg-80" { + name = "traefik-tg-80" + port = var.traefikhttpport + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + +resource "aws_lb_target_group" "traefik-tg-443" { + name = "traefik-tg-443" + port = var.traefikhttpsport + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + resource "aws_lb_target_group_attachment" "registertarget" { count = var.mastercount @@ -178,6 +196,42 @@ resource "aws_lb_target_group_attachment" "registertarget" { } +resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { + + count = var.workercount + target_group_arn = aws_lb_target_group.traefik-tg-80.arn + target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_worker_instance ] + +} + +resource "aws_lb_target_group_attachment" "registertarget-traefik-443" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.traefik-tg-443.arn + target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_worker_instance ] + +} + +resource "aws_eip" "traefik" { + vpc = true +} + +resource "aws_lb" "traefik" { + name = "traefik" + load_balancer_type = "network" + + subnet_mapping { + subnet_id = "${element(module.vpc.private_subnets, 0)}" + allocation_id = aws_eip.traefik.id + } + + subnet_mapping { + subnet_id = "${element(module.vpc.private_subnets, 1)}" + allocation_id = aws_eip.traefik.id + } +} resource "aws_alb_listener" "talos-listener" { load_balancer_arn = module.alb.lb_arn @@ -190,6 +244,28 @@ resource "aws_alb_listener" "talos-listener" { } +resource "aws_alb_listener" "traefik-listener-443" { + load_balancer_arn = aws_lb.traefik.arn + port = 443 + protocol = "TCP" + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.traefik-tg-443.arn + } + +} + +resource "aws_alb_listener" "traefik-listener-80" { + load_balancer_arn = aws_lb.traefik.arn + port = 80 + protocol = "TCP" + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.traefik-tg-80.arn + } + +} + resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { command = "./talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf index 2ffbfb8..6db6e59 100755 --- a/aws/talos/vars.tf +++ b/aws/talos/vars.tf @@ -48,3 +48,10 @@ variable "workercount" { description = "talos worker node count" } +variable "traefikhttpport" { + description = "NodePort value for Port 80" +} + +variable "traefikhttpsport" { + description = "NodePort Value for port 443" +} \ No newline at end of file From 63cfdc808bbab19805f165a0c8ea39c7ee63ad99 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 22 Apr 2023 12:21:55 +0530 Subject: [PATCH 030/107] add vault --- aws/talos/main.tf | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 2b918e5..ef84c71 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -1,7 +1,23 @@ + +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + } + } +} + +provider "vault" { + address = "https://vault-0.default.svc:8200" + skip_tls_verify = true +} +data "vault_generic_secret" "aws_creds" { + path = "aws/aws" +} provider "aws" { region = var.region - access_key = var.AWS_ACCESS_KEY - secret_key = var.AWS_SECRET_KEY + access_key = data.vault_generic_secret.aws_creds.data["aws_access_key_id"] + secret_key = data.vault_generic_secret.aws_creds.data["aws_secret_access_key"] } data "aws_ami" "talos"{ From 1a81614dbe389bda73aa45177988baebc1150361 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 29 Apr 2023 00:14:53 +0530 Subject: [PATCH 031/107] Remove Vault --- aws/talos/main.tf | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index ef84c71..752a7f6 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -7,17 +7,19 @@ terraform { } } -provider "vault" { - address = "https://vault-0.default.svc:8200" - skip_tls_verify = true -} -data "vault_generic_secret" "aws_creds" { - path = "aws/aws" -} +#provider "vault" { +# address = "https://vault-0.default.svc:8200" +# skip_tls_verify = true +#} +#data "vault_generic_secret" "aws_creds" { +# path = "aws/aws" +#} provider "aws" { region = var.region - access_key = data.vault_generic_secret.aws_creds.data["aws_access_key_id"] - secret_key = data.vault_generic_secret.aws_creds.data["aws_secret_access_key"] + access_key = var.AWS_ACCESS_KEY + secret_key = var.AWS_SECRET_KEY +# access_key = data.vault_generic_secret.aws_creds.data["aws_access_key_id"] +# secret_key = data.vault_generic_secret.aws_creds.data["aws_secret_access_key"] } data "aws_ami" "talos"{ From 813f7fc1059fdaaa6a357cdfc4e87fef4afc836c Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 29 Apr 2023 11:12:31 +0530 Subject: [PATCH 032/107] Remove Vault --- aws/talos/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 752a7f6..b442aca 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -24,8 +24,8 @@ provider "aws" { data "aws_ami" "talos"{ most_recent = true - name_regex = "^talos-aws-v1.3.3*" - owners = ["754618858321"] + name_regex = "^talos-1.3.3*" + owners = ["894352288813"] filter { name = "architecture" From 228533973a836ff35c221ecd7dd36e2ef1eeaa54 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 13 May 2023 15:53:55 +0530 Subject: [PATCH 033/107] Add remote state --- aws/talos/main.tf | 10 +++++++++- aws/talos/outputs.tf | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index b442aca..e6663f6 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -5,6 +5,13 @@ terraform { source = "hashicorp/aws" } } + backend "s3" { +# bucket = "${var.tfstatebucket}" + key = "state/terraform.tfstate" +# region = "${var.tfstatebucketregion}" + encrypt = true +# dynamodb_table = "${var.dynamotableid}" + } } #provider "vault" { @@ -14,6 +21,7 @@ terraform { #data "vault_generic_secret" "aws_creds" { # path = "aws/aws" #} + provider "aws" { region = var.region access_key = var.AWS_ACCESS_KEY @@ -24,7 +32,7 @@ provider "aws" { data "aws_ami" "talos"{ most_recent = true - name_regex = "^talos-1.3.3*" + name_regex = "^talos-aws-1.3.3*" owners = ["894352288813"] filter { diff --git a/aws/talos/outputs.tf b/aws/talos/outputs.tf index 235fc2a..5ff914b 100755 --- a/aws/talos/outputs.tf +++ b/aws/talos/outputs.tf @@ -70,3 +70,8 @@ output "worker_tags" { description = "All tags that are tagged for worker" } +output "traefik_lb_endpoint" { + value = aws_lb.traefik.dns_name + description = "DNS Name for the CNAME creation" + +} \ No newline at end of file From 657284de20b5650be61faf6d3b604a4590cfa946 Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 8 Jun 2023 23:29:18 +0530 Subject: [PATCH 034/107] Adding canal as cni --- aws/talos/scripts/patch.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aws/talos/scripts/patch.yaml b/aws/talos/scripts/patch.yaml index d24506b..a20153e 100644 --- a/aws/talos/scripts/patch.yaml +++ b/aws/talos/scripts/patch.yaml @@ -15,3 +15,9 @@ - bind - rshared - rw +- op: add + path: /cluster/network/cni + value: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.20/manifests/canal.yaml From 022280549eb11b19f4693a3dc1263e3ef4e8b991 Mon Sep 17 00:00:00 2001 From: Pramod Date: Fri, 9 Jun 2023 00:21:56 +0530 Subject: [PATCH 035/107] add support for multi cluster creation on same region --- aws/talos/main.tf | 8 ++++---- aws/talos/vars.tf | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index e6663f6..1c7b717 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -187,7 +187,7 @@ resource "aws_volume_attachment" "volume_attachement" { } resource "aws_lb_target_group" "talos-tg" { - name = "talos-tg" + name = var.talostg port = 6443 protocol = "TCP" target_type = "ip" @@ -196,7 +196,7 @@ resource "aws_lb_target_group" "talos-tg" { } resource "aws_lb_target_group" "traefik-tg-80" { - name = "traefik-tg-80" + name = var.traefik_tg_80_name port = var.traefikhttpport protocol = "TCP" target_type = "ip" @@ -205,7 +205,7 @@ resource "aws_lb_target_group" "traefik-tg-80" { } resource "aws_lb_target_group" "traefik-tg-443" { - name = "traefik-tg-443" + name = var.traefik_tg_443_name port = var.traefikhttpsport protocol = "TCP" target_type = "ip" @@ -245,7 +245,7 @@ resource "aws_eip" "traefik" { } resource "aws_lb" "traefik" { - name = "traefik" + name = var.traefiklbname load_balancer_type = "network" subnet_mapping { diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf index 6db6e59..e5533cf 100755 --- a/aws/talos/vars.tf +++ b/aws/talos/vars.tf @@ -54,4 +54,20 @@ variable "traefikhttpport" { variable "traefikhttpsport" { description = "NodePort Value for port 443" +} + +variable "talostg" { + description = "Name of the talosg target group" +} + +variable "traefik_tg_80_name" { + description = "Name of the traefik 80 port target group" +} + +variable "traefik_tg_443_name" { + description = "Name of the traefik 443 port target group" +} + +variable "traefiklbname" { + description = "Name of the traefik lb" } \ No newline at end of file From c0d9f5d731cad5802d73a49013aa7d2be75ad23c Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 9 Jun 2023 00:24:01 +0530 Subject: [PATCH 036/107] Add support for multi cluster creation on same region --- aws/talos/values.tfvars | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars index 23f9c06..29bebf5 100755 --- a/aws/talos/values.tfvars +++ b/aws/talos/values.tfvars @@ -10,3 +10,9 @@ instance_type = nodemonitoringenabled = mastercount = 3 workercount = +traefikhttpport = 32080 +traefikhttpsport = 32443 +talostg = +traefik_tg_80_name = +traefik_tg_443_name = +traefiklbname = From 61c71a2b8ec3623e8a7c875e75153e458293dfd3 Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 20 Jul 2023 22:16:51 +0530 Subject: [PATCH 037/107] Fix amd talosctl issue --- aws/talos/scripts/bootstrapetcd.sh | 1 - aws/talos/scripts/talosconfiggen.sh | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) mode change 100755 => 100644 aws/talos/scripts/bootstrapetcd.sh mode change 100755 => 100644 aws/talos/scripts/talosconfiggen.sh diff --git a/aws/talos/scripts/bootstrapetcd.sh b/aws/talos/scripts/bootstrapetcd.sh old mode 100755 new mode 100644 index c9a7c7a..eefda4a --- a/aws/talos/scripts/bootstrapetcd.sh +++ b/aws/talos/scripts/bootstrapetcd.sh @@ -36,4 +36,3 @@ then fi echo "ETCD bootstrap Finished" - diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh old mode 100755 new mode 100644 index 0e69ca5..01dd5ba --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -16,26 +16,25 @@ do ;; esac done -if ! command -v ./talosctl &> /dev/null +if ! command -v talosctl &> /dev/null then echo "Installing talos cli" - curl -Lo talosctl https://github.com/siderolabs/talos/releases/download/v1.1.1/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-arm64 - chmod +x ./talosctl + curl -sL https://talos.dev/install | sh else echo "talosctl is already installed skipping.." fi echo ${dnsname} echo ${4} -./talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml -./talosctl validate --config scripts/controlplane.yaml --mode cloud +talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit fi -./talosctl validate --config scripts/worker.yaml --mode cloud +talosctl validate --config scripts/worker.yaml --mode cloud if [ $? -eq 1 ] then From 0fbb390072d8a410ba07e03a4d782488f3264aec Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 20 Jul 2023 23:48:11 +0530 Subject: [PATCH 038/107] migrate configs to config folder --- aws/talos/main.tf | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 1c7b717..0e074fd 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -294,19 +294,23 @@ resource "aws_alb_listener" "traefik-listener-80" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "./talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" + command = "talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" } provisioner "local-exec" { - command = "./talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" + command = "talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" } provisioner "local-exec" { - command = "sleep 60; ./talosctl --talosconfig scripts/talosconfig bootstrap" + command = "sleep 60; talosctl --talosconfig scripts/talosconfig bootstrap" } provisioner "local-exec" { - command = "./talosctl --talosconfig scripts/talosconfig kubeconfig ." + command = "talosctl --talosconfig scripts/talosconfig kubeconfig ../../../../config/" + } + + provisioner "local-exec" { + command = "yq -e '.LoadBalancerHost |= \"test.com\"' -i ../../../../config/capten.yaml" } depends_on = [ aws_instance.talos_master_instance ] From f696c27db9c004cf5164eca88556b2697ed29606 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:02:28 +0530 Subject: [PATCH 039/107] Delete main.tf --- aws/main.tf | 192 ---------------------------------------------------- 1 file changed, 192 deletions(-) delete mode 100644 aws/main.tf diff --git a/aws/main.tf b/aws/main.tf deleted file mode 100644 index 62a622c..0000000 --- a/aws/main.tf +++ /dev/null @@ -1,192 +0,0 @@ -provider "aws" { - region = var.region - access_key = var.AWS_ACCESS_KEY - secret_key = var.AWS_SECRET_KEY -} - -data "aws_ami" "talos"{ - most_recent = true - name_regex = "^talos-v1.1.1*" - owners = ["540036508848"] - - filter { - name = "architecture" - values = ["x86_64"] - } - -} - - -module "vpc" { - source = "terraform-aws-modules/vpc/aws" - - name = var.vpcname - cidr = var.vpccidr - - azs = ["${var.region}a", "${var.region}b", "${var.region}c"] - private_subnets = [ var.privatesubnet ] - create_igw = true -} - -resource "aws_internet_gateway" "ig" { - vpc_id = "${module.vpc.vpc_id}" - tags = { - Name = "${var.vpcname}-igw" - } -} - -resource "aws_route" "igwroute" { - route_table_id = module.vpc.vpc_main_route_table_id - destination_cidr_block = "0.0.0.0/0" - gateway_id = aws_internet_gateway.ig.id -} - -resource "aws_route" "privateigwroute" { - route_table_id = module.vpc.private_route_table_ids[0] - destination_cidr_block = "0.0.0.0/0" - gateway_id = aws_internet_gateway.ig.id -} - -module "security_group" { - source = "terraform-aws-modules/security-group/aws" - - name = var.securitygroupname - description = "Security group for VPC" - vpc_id = module.vpc.vpc_id - - - ingress_cidr_blocks = ["0.0.0.0/0"] - ingress_rules = ["http-80-tcp", "all-all"] - - egress_rules = ["all-all"] - -} - -module "alb" { - source = "terraform-aws-modules/alb/aws" - - name = var.albname - - load_balancer_type = "network" - - vpc_id = module.vpc.vpc_id - - subnets = [ "${element(module.vpc.private_subnets, 0)}","${element(module.vpc.private_subnets, 1)}" ] - -} - - -resource "null_resource" "createtalosconfig" { - provisioner "local-exec" { - - command = "/bin/bash scripts/talosconfiggen.sh -h ${module.alb.lb_dns_name} -p 443" - - } - - depends_on = [ module.alb ] - -} - -data "local_file" "controllerfile" { - filename = "scripts/controlplane.yaml" - depends_on = [ null_resource.createtalosconfig ] -} - -data "local_file" "workerfile" { - filename = "scripts/worker.yaml" - depends_on = [ null_resource.createtalosconfig ] -} - -resource "aws_instance" talos_master_instance { - - count = var.mastercount - - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" - - user_data = data.local_file.controllerfile.content - associate_public_ip_address = true - - depends_on = [ data.local_file.controllerfile ] - - tags = { - Name = "talosmaster" - } - - -} -resource "aws_instance" talos_worker_instance { - - count = var.workercount - - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" - - user_data = data.local_file.workerfile.content - associate_public_ip_address = true - - depends_on = [ data.local_file.workerfile ] - - tags = { - Name = "talosworker" - } - - -} - - -resource "aws_lb_target_group" "talos-tg" { - name = "talos-tg" - port = 6443 - protocol = "TCP" - target_type = "ip" - vpc_id = module.vpc.vpc_id - -} - -resource "aws_lb_target_group_attachment" "registertarget" { - - count = var.mastercount - target_group_arn = aws_lb_target_group.talos-tg.arn - target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" - depends_on = [ aws_instance.talos_master_instance ] - -} - - -resource "aws_alb_listener" "talos-listener" { - load_balancer_arn = module.alb.lb_arn - port = 443 - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.talos-tg.arn - } - -} - -resource "null_resource" "bootstrap_etcd" { - provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" - - } - provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" - - } - provisioner "local-exec" { - command = "sleep 60; talosctl --talosconfig scripts/talosconfig bootstrap" - } - - provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig kubeconfig ." - } - depends_on = [ aws_instance.talos_master_instance ] - -} From 62e627b369a25ab6c091608dd77baa5c83f7b195 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:02:40 +0530 Subject: [PATCH 040/107] Delete values.tfvars --- aws/values.tfvars | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 aws/values.tfvars diff --git a/aws/values.tfvars b/aws/values.tfvars deleted file mode 100644 index 5b09d71..0000000 --- a/aws/values.tfvars +++ /dev/null @@ -1,12 +0,0 @@ -AWS_ACCESS_KEY = "" -AWS_SECRET_KEY = "" -albname = "talosalb" -privatesubnet = "10.0.1.0/24" -region = "us-west-1" -securitygroupname = "talossg" -vpccidr = "10.0.0.0/16" -vpcname = "talosvpc" -instance_type = "t3.small" -nodemonitoringenabled = "false" -mastercount = 3 -workercount = 3 From 24831425a3134d719b6650314fe53d34e1da6e70 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 31 Jul 2023 23:02:57 +0530 Subject: [PATCH 041/107] Delete stale files --- aws/vars.tf | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 aws/vars.tf diff --git a/aws/vars.tf b/aws/vars.tf deleted file mode 100644 index 2ffbfb8..0000000 --- a/aws/vars.tf +++ /dev/null @@ -1,50 +0,0 @@ -variable "AWS_ACCESS_KEY" { - description = "AWS Access key" -} - -variable "AWS_SECRET_KEY" { - description = "AWS Secret key" -} - -variable "region" { - description = "AWS Region to deploy the resources" -} - -variable "privatesubnet" { - description = "vpc private subnet cidr" -} - -variable "vpcname" { - description = "Name of the VPC to be created" -} - -variable "vpccidr" { - description = "VPC cidr to be used while creating VPC" -} - -variable "securitygroupname" { - description = "Security group name to be created " - -} - -variable "albname" { - description = "AWS loadbalancer name" - -} - -variable "instance_type" { - description = "aws instance type to be used" -} - -variable "nodemonitoringenabled" { - description = "aws monitoring enabled/disabled mark true/false" -} - -variable "mastercount" { - description = "talos master node count" -} - -variable "workercount" { - description = "talos worker node count" -} - From 7a70078a977473a2f66060d459c644e731ebf232 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:09:00 +0530 Subject: [PATCH 042/107] Fix lb endpoint --- aws/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 0e074fd..2bbd935 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -310,7 +310,7 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "yq -e '.LoadBalancerHost |= \"test.com\"' -i ../../../../config/capten.yaml" + command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ../../../../config/capten.yaml" } depends_on = [ aws_instance.talos_master_instance ] From 5672f8b18e715c7e115d64c7c8ac5087e231e028 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:09:56 +0530 Subject: [PATCH 043/107] Fix path --- aws/talos/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 2bbd935..f3fe8af 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -306,11 +306,11 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig kubeconfig ../../../../config/" + command = "talosctl --talosconfig scripts/talosconfig kubeconfig ./config/" } provisioner "local-exec" { - command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ../../../../config/capten.yaml" + command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ./config/capten.yaml" } depends_on = [ aws_instance.talos_master_instance ] From 025685d3683d4abead838cc6fa2fb678296d5b4a Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 3 Aug 2023 23:41:41 +0530 Subject: [PATCH 044/107] Add configpath as var --- aws/talos/main.tf | 4 ++-- aws/talos/values.tfvars | 1 + aws/talos/vars.tf | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index f3fe8af..efc5fa3 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -306,11 +306,11 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig kubeconfig ./config/" + command = "talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" } provisioner "local-exec" { - command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ./config/capten.yaml" + command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ${var.configfolderpath}/capten.yaml" } depends_on = [ aws_instance.talos_master_instance ] diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars index 29bebf5..a5cc1e1 100755 --- a/aws/talos/values.tfvars +++ b/aws/talos/values.tfvars @@ -16,3 +16,4 @@ talostg = traefik_tg_80_name = traefik_tg_443_name = traefiklbname = +configfolderpath = diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf index e5533cf..5afab1b 100755 --- a/aws/talos/vars.tf +++ b/aws/talos/vars.tf @@ -70,4 +70,7 @@ variable "traefik_tg_443_name" { variable "traefiklbname" { description = "Name of the traefik lb" +} +variable "configfolderpath" { + description = "CLI config folder path" } \ No newline at end of file From 823974483b8fc93224a50b7c262f9e2f70ea3d8a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sun, 6 Aug 2023 16:01:52 +0530 Subject: [PATCH 045/107] Update canal for k8s 1.27 --- aws/talos/scripts/patch.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/scripts/patch.yaml b/aws/talos/scripts/patch.yaml index a20153e..fceb8e1 100644 --- a/aws/talos/scripts/patch.yaml +++ b/aws/talos/scripts/patch.yaml @@ -20,4 +20,4 @@ value: name: custom urls: - - https://docs.projectcalico.org/archive/v3.20/manifests/canal.yaml + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml From e7f3ff0a8309276f766846cce4fe57bf13eaf184 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:52:56 +0530 Subject: [PATCH 046/107] Create controlplane.yaml --- aws/talos/scripts/controlplane.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 aws/talos/scripts/controlplane.yaml diff --git a/aws/talos/scripts/controlplane.yaml b/aws/talos/scripts/controlplane.yaml new file mode 100644 index 0000000..a82d1b4 --- /dev/null +++ b/aws/talos/scripts/controlplane.yaml @@ -0,0 +1 @@ +#placeholder From f0d086ef5df683cbd261aa4e22b85f557153400d Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:53:12 +0530 Subject: [PATCH 047/107] Create worker.yaml --- aws/talos/scripts/worker.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 aws/talos/scripts/worker.yaml diff --git a/aws/talos/scripts/worker.yaml b/aws/talos/scripts/worker.yaml new file mode 100644 index 0000000..a82d1b4 --- /dev/null +++ b/aws/talos/scripts/worker.yaml @@ -0,0 +1 @@ +#placeholder From 3f95d12c01cd4310b3836f3b63e96d056ff7e234 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:53:37 +0530 Subject: [PATCH 048/107] Create talosconfig --- aws/talos/scripts/talosconfig | 1 + 1 file changed, 1 insertion(+) create mode 100644 aws/talos/scripts/talosconfig diff --git a/aws/talos/scripts/talosconfig b/aws/talos/scripts/talosconfig new file mode 100644 index 0000000..a82d1b4 --- /dev/null +++ b/aws/talos/scripts/talosconfig @@ -0,0 +1 @@ +#placeholder From ee6c845363de709b9fc56efb1f3f1fb1482563a9 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 18 Aug 2023 22:02:51 +0530 Subject: [PATCH 049/107] Update talosconfiggen.sh Fix destruction --- aws/talos/scripts/talosconfiggen.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index 01dd5ba..fe7c57b 100644 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -24,6 +24,21 @@ else echo "talosctl is already installed skipping.." fi +if [ -f scripts/controlplane.yaml ] +then + rm -f scripts/controlplane.yaml +fi + +if [ -f scripts/wokrer.yaml ] +then + rm -f scripts/worker.yaml +fi + +if [ -f scripts/talosconfig ] +then + rm -f scripts/talosconfig +fi + echo ${dnsname} echo ${4} talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force From dbd20b40847c8c3dd0d4c1c7a9392b790cc5bb74 Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 23 Aug 2023 17:40:17 +0530 Subject: [PATCH 050/107] Add azure V1 --- azure/talos/main.tf | 149 +++++++++++++++++++------ azure/talos/manifests/.DS_Store | Bin 0 -> 6148 bytes azure/talos/scripts/talos-image-gen.sh | 27 ++--- azure/talos/values.tfvars | 6 + azure/talos/vars.tf | 8 ++ 5 files changed, 143 insertions(+), 47 deletions(-) create mode 100644 azure/talos/manifests/.DS_Store create mode 100644 azure/talos/values.tfvars diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 81fb4ca..2e16d78 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -19,16 +19,17 @@ resource "azurerm_resource_group" "storagerg" { resource "azurerm_storage_account" "talosimagesa" { name = "talosimagesa" - resource_group_name = "${azurerm_resource_group.testrg.name}" + resource_group_name = "${azurerm_resource_group.storagerg.name}" location = var.region account_tier = "Standard" account_replication_type = "GRS" - tags { + tags = { environment = "talosaz" } } + resource "azurerm_storage_container" "talosimagecont" { name = "talosimagecont" storage_account_name = azurerm_storage_account.talosimagesa.name @@ -45,6 +46,27 @@ resource "null_resource" "talosimagecreate" { ] } +#resource "azurerm_storage_blob" "talosimageblob" { +# name = "talosimageblob" +# storage_account_name = azurerm_storage_account.talosimagesa.name +# storage_container_name = azurerm_storage_container.talosimagecont.name +# source = "manifests/image/talos/azure-amd64.vhd" +# type = "Block" + +#} + +resource "azurerm_image" "talosimage" { + name = "talos-azure" + location = var.region + resource_group_name = azurerm_resource_group.storagerg.name + + os_disk { + os_type = "Linux" + os_state = "Generalized" + blob_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net/${azurerm_storage_container.talosimagecont.name}/talos-azure.vhd" + } +} + resource "azurerm_resource_group" "talosrg" { name = "talosrg" location = var.region @@ -62,22 +84,28 @@ resource "azurerm_subnet" "talossubnet" { name = "talossubnet" resource_group_name = azurerm_resource_group.talosrg.name virtual_network_name = azurerm_virtual_network.talosnet.name - address_prefixes = "10.0.1.0/24" + address_prefixes = [ "10.0.1.0/24" ] } resource "azurerm_network_security_group" "talossg" { name = "talossg" resource_group_name = azurerm_resource_group.talosrg.name - + location = var.region } resource "azurerm_network_security_rule" "apid" { name = "apid" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1001" + source_port_range = "*" destination_port_ranges = [ "50000" ] - direction = "inbound" + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" } @@ -85,8 +113,14 @@ resource "azurerm_network_security_rule" "trustd" { name = "trustd" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1002" + source_port_range = "*" destination_port_ranges = [ "50001" ] - direction = "inbound" + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" } @@ -94,8 +128,14 @@ resource "azurerm_network_security_rule" "etcd" { name = "etcd" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1003" + source_port_range = "*" destination_port_ranges = [ "2379-2380" ] - direction = "inbound" + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" } @@ -103,34 +143,50 @@ resource "azurerm_network_security_rule" "kube" { name = "kube" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1004" + source_port_range = "*" destination_port_ranges = [ "6443" ] - direction = "inbound" + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" } resource "azurerm_public_ip" "talos-public-ip" { - name = "talos-public-ip" - resource_group_name = azurerm_network_security_group.talossg.name - allocation_method = "static" + count = var.mastercount + name = element(concat(var.publicipname, [""]), count.index) + resource_group_name = azurerm_resource_group.talosrg.name + allocation_method = "Static" + location = var.region + +} + +resource "azurerm_public_ip" "talos-public-ip-lb" { + name = "talos-public-ip-lb" + resource_group_name = azurerm_resource_group.talosrg.name + allocation_method = "Static" + location = var.region } resource "azurerm_lb" "taloslb" { name = "taloslb" - resource_group_name = azurerm_network_security_group.talossg.name + resource_group_name = azurerm_resource_group.talosrg.name location = var.region frontend_ip_configuration { name = "talosfe" - public_ip_address_id = azurerm_public_ip.talos-public-ip.id + public_ip_address_id = azurerm_public_ip.talos-public-ip-lb.id } } -data "azurerm_lb_backend_address_pool" "talosbe" { - name = "talosbe" - loadbalancer_id = azurerm_lb.taloslb.id -} +#data "azurerm_lb_backend_address_pool" "talosbe" { +# name = "talosbe" +# loadbalancer_id = azurerm_lb.taloslb.id +#} resource "azurerm_lb_probe" "talos-lb-health" { loadbalancer_id = azurerm_lb.taloslb.id @@ -146,24 +202,22 @@ resource "azurerm_lb_rule" "talos-6443" { frontend_port = 6443 backend_port = 6443 frontend_ip_configuration_name = "talosfe" - backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.ID ] +# backend_address_pool_ids = [ data.azurerm_lb_backend_address_pool.talosbe.id ] + probe_id = azurerm_lb_probe.talos-lb-health.id - resource_group_name = azurerm_resource_group.talosrg.name - } resource "azurerm_network_interface" "nics" { count = length(var.nics) name = "nic-${count.index}" - location = azurerm_resource_group.group.location - resource_group_name = azurerm_resource_group.group.name - network_security_group_name = azurerm_network_security_group.talossg.name - loadbalancer_id = azurerm_lb.taloslb.ID - virtual_network_name = azurerm_virtual_network.talosnet.name + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + ip_configuration { + private_ip_address_allocation = "Dynamic" name = "config-${count.index}" - subnet_id = element(azurerm_subnet.subnets[*].id, count.index % 4) + subnet_id = azurerm_subnet.talossubnet.id private_ip_address = element(var.nics, count.index) public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % 4) @@ -175,12 +229,13 @@ resource "azurerm_availability_set" "talosas" { location = azurerm_resource_group.talosrg.location resource_group_name = azurerm_resource_group.talosrg.name + } resource "null_resource" "createtalosconfig" { provisioner "local-exec" { - command = "/bin/bash talosctl gen config talos-k8s-azure-tutorial https://${azurerm_lb.taloslb.public_ip}:6443 " + command = "talosctl gen config talos-k8s https://${azurerm_public_ip.talos-public-ip-lb.ip_address}:6443 " } @@ -201,22 +256,35 @@ data "local_file" "workerfile" { resource "azurerm_virtual_machine" "talosmaster" { count = var.mastercount name = "talosmaster" - image = "talos" resource_group_name = azurerm_resource_group.talosrg.name + location = var.region + vm_size = var.instancetype boot_diagnostics { + enabled = true storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint } os_profile { + computer_name = "talos" admin_username = "talos" - custom_data = data.local_file.controllerfile + custom_data = data.local_file.controllerfile.content } storage_data_disk { + name = "talosstoragedata" disk_size_gb = "20" + lun = "1" + create_option = "Attach" + } + + storage_os_disk { + name = "talososdisk1" + caching = "ReadWrite" + create_option = "FromImage" + managed_disk_type = "Standard_LRS" } - network_interface_ids = [ element( azurerm_network_interface.nics[*].ID, count.index ) ] + network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] availability_set_id = azurerm_availability_set.talosas.id @@ -226,22 +294,35 @@ resource "azurerm_virtual_machine" "talosmaster" { resource "azurerm_virtual_machine" "talosworker" { count = var.workercount name = "talosworker" - image = "talos" resource_group_name = azurerm_resource_group.talosrg.name + location = var.region + vm_size = var.instancetype boot_diagnostics { + enabled = true storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint } os_profile { + computer_name = "talos" admin_username = "talos" - custom_data = data.local_file.workerfile + custom_data = data.local_file.workerfile.content } storage_data_disk { + name = "talosstoragedata" disk_size_gb = "20" + lun = "1" + create_option = "Attach" + } + + storage_os_disk { + name = "talososdisk1" + caching = "ReadWrite" + create_option = "FromImage" + managed_disk_type = "Standard_LRS" } - availability_set_id = azurerm_availability_set.talosas.id + network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] @@ -249,7 +330,7 @@ resource "azurerm_virtual_machine" "talosworker" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_virtual_machine.talosmaster.0.public_ip}" + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_lb.taloslb.frontend_ip_configuration[0].public_ip_address_id}" } depends_on = [ azurerm_virtual_machine.talosmaster ] diff --git a/azure/talos/manifests/.DS_Store b/azure/talos/manifests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cbf9ce2f5606f2ec8e9da4a923b1306d7d64d602 GIT binary patch literal 6148 zcmeH~O>P1)427Qyl`3_^l4Uj=pf`vRJpmWsSEv#d3&cK0=h^Xwq3dddo+anSPCP%~ zVloC`%iG}#m;v~pyJF$Pz>M)be(;MePB Date: Sun, 27 Aug 2023 01:15:20 +0530 Subject: [PATCH 051/107] Azure fixes --- azure/talos/main.tf | 105 +++++++++++++++++--------- azure/talos/scripts/bootstrapetcd.sh | 38 ++++++++++ azure/talos/scripts/controlplane.yaml | 0 azure/talos/scripts/patch.yaml | 23 ++++++ azure/talos/scripts/talosconfiggen.sh | 58 ++++++++++++++ azure/talos/scripts/worker.yaml | 0 azure/talos/values.tfvars | 9 ++- azure/talos/vars.tf | 5 ++ 8 files changed, 200 insertions(+), 38 deletions(-) create mode 100644 azure/talos/scripts/controlplane.yaml create mode 100644 azure/talos/scripts/patch.yaml create mode 100644 azure/talos/scripts/talosconfiggen.sh create mode 100644 azure/talos/scripts/worker.yaml diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 2e16d78..5f1abc4 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -155,8 +155,8 @@ resource "azurerm_network_security_rule" "kube" { } resource "azurerm_public_ip" "talos-public-ip" { - count = var.mastercount - name = element(concat(var.publicipname, [""]), count.index) + count = length(var.publicipname) + name = "publicip-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region @@ -224,10 +224,27 @@ resource "azurerm_network_interface" "nics" { } } +resource "azurerm_network_interface" "workernics" { + count = length(var.workernics) + name = "workernic-${count.index}" + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + + + ip_configuration { + private_ip_address_allocation = "Dynamic" + name = "config-${count.index}" + subnet_id = azurerm_subnet.talossubnet.id + private_ip_address = element(var.nics, count.index) + + } +} + resource "azurerm_availability_set" "talosas" { name = "talosas" location = azurerm_resource_group.talosrg.location resource_group_name = azurerm_resource_group.talosrg.name + managed = true } @@ -235,7 +252,7 @@ resource "azurerm_availability_set" "talosas" { resource "null_resource" "createtalosconfig" { provisioner "local-exec" { - command = "talosctl gen config talos-k8s https://${azurerm_public_ip.talos-public-ip-lb.ip_address}:6443 " + command = "/bin/bash scripts/talosconfiggen.sh -h ${azurerm_public_ip.talos-public-ip-lb.ip_address} -p 443" } @@ -244,87 +261,107 @@ resource "null_resource" "createtalosconfig" { } data "local_file" "controllerfile" { - filename = "./controlplane.yaml" + filename = "scripts/controlplane.yaml" depends_on = [ null_resource.createtalosconfig ] } data "local_file" "workerfile" { - filename = "./worker.yaml" + filename = "scripts/worker.yaml" depends_on = [ null_resource.createtalosconfig ] } resource "azurerm_virtual_machine" "talosmaster" { - count = var.mastercount - name = "talosmaster" + count = length(var.mastercount) + name = "talosmaster-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype - boot_diagnostics { - enabled = true - storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint - } +# boot_diagnostics { +# enabled = true +# storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint +# } os_profile { computer_name = "talos" admin_username = "talos" + admin_password = "Talos@1234" custom_data = data.local_file.controllerfile.content } - storage_data_disk { - name = "talosstoragedata" - disk_size_gb = "20" - lun = "1" - create_option = "Attach" - } +# storage_data_disk { +# name = "talosstoragedata" +# disk_size_gb = "20" +# lun = "1" +# create_option = "Empty" +# } + storage_image_reference { + id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/StorageRG/providers/Microsoft.Compute/images/talos-azure" + } storage_os_disk { - name = "talososdisk1" + name = "talosmaster-${count.index}" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" + disk_size_gb = "20" + } + + os_profile_linux_config { + disable_password_authentication = false } network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] availability_set_id = azurerm_availability_set.talosas.id + depends_on = [ azurerm_availability_set.talosas ] + } resource "azurerm_virtual_machine" "talosworker" { - count = var.workercount - name = "talosworker" + count = length(var.workercount) + name = "talosworker-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype - boot_diagnostics { - enabled = true - storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint - } - +# boot_diagnostics { +# enabled = true +# storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint +# } + os_profile { computer_name = "talos" admin_username = "talos" + admin_password = "Talos@1234" custom_data = data.local_file.workerfile.content } - storage_data_disk { - name = "talosstoragedata" - disk_size_gb = "20" - lun = "1" - create_option = "Attach" +# storage_data_disk { +# name = "talosstoragedata" +# disk_size_gb = "20" +# lun = "1" +# create_option = "Empty" +# } + storage_image_reference { + id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/StorageRG/providers/Microsoft.Compute/images/talos-azure" } - + storage_os_disk { - name = "talososdisk1" + name = "talosworker-${count.index}" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" + disk_size_gb = "20" } availability_set_id = azurerm_availability_set.talosas.id - network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] - + network_interface_ids = [ element(azurerm_network_interface.workernics[*].id, count.index ) ] + os_profile_linux_config { + disable_password_authentication = false + } + + depends_on = [ azurerm_availability_set.talosas ] } diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh index e69de29..eefda4a 100644 --- a/azure/talos/scripts/bootstrapetcd.sh +++ b/azure/talos/scripts/bootstrapetcd.sh @@ -0,0 +1,38 @@ +#!/bin/bash + + +TALOS_API_IP = 50000 + +if [ "$#" -ne 1 ] +then + echo "Usage: $0 nodeipaddress" +fi + +echo "node ip address is:" +echo "$1" + +remoteip="$1" +count=0 + +while [ "$count" -ge 20 ] +do + echo "Waiting for Talos API to be up...." + nc -zv "$remoteip" "$TALOS_API_IP" + if [ "$?" -eq 0 ] + then + echo "Talos API is up bootstrapping etcd" + talosctl --talosconfig out/talosconfig config endpoint "$remoteip" + talosctl --talosconfig out/talosconfig config node "$remoteip" + talosctl --talosconfig out/talosconfig bootstrap "$remoteip" + break + fi + sleep 30 + count += 1 +done + +if [ "$count" -ge 20 ] +then + echo "ERROR: Talos API is not up " +fi + +echo "ETCD bootstrap Finished" diff --git a/azure/talos/scripts/controlplane.yaml b/azure/talos/scripts/controlplane.yaml new file mode 100644 index 0000000..e69de29 diff --git a/azure/talos/scripts/patch.yaml b/azure/talos/scripts/patch.yaml new file mode 100644 index 0000000..fceb8e1 --- /dev/null +++ b/azure/talos/scripts/patch.yaml @@ -0,0 +1,23 @@ +- op: add + path: /machine/install/extensions + value: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 +- op: add + path: /machine/install/image + value: ghcr.io/siderolabs/installer:v1.3.3 +- op: add + path: /machine/kubelet/extraMounts + value: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw +- op: add + path: /cluster/network/cni + value: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml diff --git a/azure/talos/scripts/talosconfiggen.sh b/azure/talos/scripts/talosconfiggen.sh new file mode 100644 index 0000000..fe7c57b --- /dev/null +++ b/azure/talos/scripts/talosconfiggen.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +if [ $# -ne 2 ] +then + echo "Usage: $0 dnsname port" +fi + +while getopts "h:p" OPTION; +do + case "${OPTION}" in + h) + dnsname="$OPTARG" + ;; + p) + port="$OPTARG" + ;; + esac +done +if ! command -v talosctl &> /dev/null +then + echo "Installing talos cli" + curl -sL https://talos.dev/install | sh +else + echo "talosctl is already installed skipping.." +fi + +if [ -f scripts/controlplane.yaml ] +then + rm -f scripts/controlplane.yaml +fi + +if [ -f scripts/wokrer.yaml ] +then + rm -f scripts/worker.yaml +fi + +if [ -f scripts/talosconfig ] +then + rm -f scripts/talosconfig +fi + +echo ${dnsname} +echo ${4} +talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +talosctl validate --config scripts/controlplane.yaml --mode cloud +if [ $? -eq 1 ] +then + echo "scripts/controlplane.yaml is invalid" + exit +fi + +talosctl validate --config scripts/worker.yaml --mode cloud + +if [ $? -eq 1 ] +then + echo "scripts/worker.yaml is invalid" + exit +fi diff --git a/azure/talos/scripts/worker.yaml b/azure/talos/scripts/worker.yaml new file mode 100644 index 0000000..e69de29 diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index d2872a2..de7cafd 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -1,6 +1,7 @@ region="centralindia" -mastercount= 3 -workercount= 3 -nics= [ "talos-nic-master1" , "talos-nic-master2", "talos-nic-master3", "talos-nic-worker1", "talos-nic-worker2", "talos-nic-worker3"] +mastercount= [ "talos-master1" , "talos-master2", "talos-master3" ] +workercount= [ "talos-worker1" , "talos-worker2", "talos-worker3" ] +nics= [ "talos-nic-master1" , "talos-nic-master2", "talos-nic-master3" ] +workernics= ["talos-nic-worker1", "talos-nic-worker2", "talos-nic-worker3"] instancetype = "Standard_DS1_v2" -publicipname = "talos-public-ip" +publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 51905e7..37c1bfb 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -16,10 +16,15 @@ variable "nics" { description = "nics name" } +variable "workernics" { + description = "nics name" +} + variable "instancetype" { description = "instancetype of virtual machines" } variable "publicipname" { + type = list description = "public ip name" } From ff1603898996053ce3337b25f7456297f62fd4bd Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 30 Aug 2023 00:07:45 +0530 Subject: [PATCH 052/107] azure installation optimization --- azure/talos/main.tf | 168 +++++++++++++----- azure/talos/scripts/scripts/bootstrapetcd.sh | 34 ++++ azure/talos/scripts/scripts/controlplane.yaml | 103 +++++++++++ azure/talos/scripts/scripts/patch.yaml | 23 +++ .../talos/scripts/scripts/talos-image-gen.sh | 31 ++++ azure/talos/scripts/scripts/talosconfig | 8 + azure/talos/scripts/scripts/talosconfiggen.sh | 58 ++++++ azure/talos/scripts/scripts/worker.yaml | 59 ++++++ azure/talos/values.tfvars | 2 + azure/talos/vars.tf | 8 + 10 files changed, 454 insertions(+), 40 deletions(-) create mode 100644 azure/talos/scripts/scripts/bootstrapetcd.sh create mode 100644 azure/talos/scripts/scripts/controlplane.yaml create mode 100644 azure/talos/scripts/scripts/patch.yaml create mode 100644 azure/talos/scripts/scripts/talos-image-gen.sh create mode 100644 azure/talos/scripts/scripts/talosconfig create mode 100644 azure/talos/scripts/scripts/talosconfiggen.sh create mode 100644 azure/talos/scripts/scripts/worker.yaml diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 5f1abc4..43c61fc 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -36,15 +36,15 @@ resource "azurerm_storage_container" "talosimagecont" { container_access_type = "private" } -resource "null_resource" "talosimagecreate" { +#resource "null_resource" "talosimagecreate" { - provisioner "local-exec" { - command = "/bin/bash scripts/talos-image-gen.sh" - } - depends_on = [ - azurerm_storage_container.talosimagecont - ] -} +# provisioner "local-exec" { +# command = "/bin/bash scripts/talos-image-gen.sh" +# } +# depends_on = [ +# azurerm_storage_container.talosimagecont +# ] +#} #resource "azurerm_storage_blob" "talosimageblob" { # name = "talosimageblob" @@ -55,17 +55,18 @@ resource "null_resource" "talosimagecreate" { #} -resource "azurerm_image" "talosimage" { - name = "talos-azure" - location = var.region - resource_group_name = azurerm_resource_group.storagerg.name - - os_disk { - os_type = "Linux" - os_state = "Generalized" - blob_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net/${azurerm_storage_container.talosimagecont.name}/talos-azure.vhd" - } -} +#resource "azurerm_image" "talosimage" { +# name = "talos-azure" +# location = var.region +# resource_group_name = azurerm_resource_group.storagerg.name +# +# os_disk { +# os_type = "Linux" +# os_state = "Generalized" +# blob_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net/${azurerm_storage_container.talosimagecont.name}/talos-azure.vhd" +# } +# depends_on = [ null_resource.talosimagecreate ] +#} resource "azurerm_resource_group" "talosrg" { name = "talosrg" @@ -160,6 +161,7 @@ resource "azurerm_public_ip" "talos-public-ip" { resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region + sku = "Standard" } @@ -168,6 +170,16 @@ resource "azurerm_public_ip" "talos-public-ip-lb" { resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region + sku = "Standard" + +} + +resource "azurerm_public_ip" "talos-public-ip-traefik" { + name = "talos-public-ip-traefik" + resource_group_name = azurerm_resource_group.talosrg.name + allocation_method = "Static" + location = var.region + sku = "Standard" } @@ -175,6 +187,7 @@ resource "azurerm_lb" "taloslb" { name = "taloslb" resource_group_name = azurerm_resource_group.talosrg.name location = var.region + sku = "Standard" frontend_ip_configuration { name = "talosfe" @@ -183,10 +196,46 @@ resource "azurerm_lb" "taloslb" { } -#data "azurerm_lb_backend_address_pool" "talosbe" { -# name = "talosbe" -# loadbalancer_id = azurerm_lb.taloslb.id -#} +resource "azurerm_lb" "traefiklb" { + name = "traefiklb" + resource_group_name = azurerm_resource_group.talosrg.name + location = var.region + sku = "Standard" + + frontend_ip_configuration { + name = "traefikfe" + public_ip_address_id = azurerm_public_ip.talos-public-ip-traefik.id + } + +} + +resource "azurerm_lb_backend_address_pool" "talosbe" { + name = "talosbe" + loadbalancer_id = azurerm_lb.taloslb.id + depends_on = [ azurerm_lb.taloslb ] +} + +resource "azurerm_lb_backend_address_pool" "traefikbe" { + name = "traefikbe" + loadbalancer_id = azurerm_lb.traefiklb.id + depends_on = [ azurerm_lb.traefiklb ] +} + +resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { + count = length(var.nics) + network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % 4) + ip_configuration_name = "config-${count.index}" + backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id + +} + +resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { + count = length(var.workernics) + network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % 4) + ip_configuration_name = "workerconfig-${count.index}" + backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id + +} resource "azurerm_lb_probe" "talos-lb-health" { loadbalancer_id = azurerm_lb.taloslb.id @@ -195,6 +244,20 @@ resource "azurerm_lb_probe" "talos-lb-health" { protocol = "Tcp" } +resource "azurerm_lb_probe" "traefik-443-health" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "traefik-443-health" + port = 443 + protocol = "Tcp" +} + +resource "azurerm_lb_probe" "traefik-80-health" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "traefik-80-health" + port = 80 + protocol = "Tcp" +} + resource "azurerm_lb_rule" "talos-6443" { loadbalancer_id = azurerm_lb.taloslb.id name = "talos-6443" @@ -202,11 +265,35 @@ resource "azurerm_lb_rule" "talos-6443" { frontend_port = 6443 backend_port = 6443 frontend_ip_configuration_name = "talosfe" -# backend_address_pool_ids = [ data.azurerm_lb_backend_address_pool.talosbe.id ] + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.id ] probe_id = azurerm_lb_probe.talos-lb-health.id } +resource "azurerm_lb_rule" "traefik-443" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "traefik-443" + protocol = "Tcp" + frontend_port = 443 + backend_port = var.traefikhttpsport + frontend_ip_configuration_name = "traefikfe" + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] + + probe_id = azurerm_lb_probe.traefik-443-health.id +} + +resource "azurerm_lb_rule" "traefik-80" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "traefik-80" + protocol = "Tcp" + frontend_port = 443 + backend_port = var.traefikhttpport + frontend_ip_configuration_name = "traefikfe" + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] + + probe_id = azurerm_lb_probe.traefik-80-health.id +} + resource "azurerm_network_interface" "nics" { count = length(var.nics) name = "nic-${count.index}" @@ -233,7 +320,7 @@ resource "azurerm_network_interface" "workernics" { ip_configuration { private_ip_address_allocation = "Dynamic" - name = "config-${count.index}" + name = "workerconfig-${count.index}" subnet_id = azurerm_subnet.talossubnet.id private_ip_address = element(var.nics, count.index) @@ -252,7 +339,7 @@ resource "azurerm_availability_set" "talosas" { resource "null_resource" "createtalosconfig" { provisioner "local-exec" { - command = "/bin/bash scripts/talosconfiggen.sh -h ${azurerm_public_ip.talos-public-ip-lb.ip_address} -p 443" + command = "/bin/bash scripts/talosconfiggen.sh -h ${azurerm_public_ip.talos-public-ip-lb.ip_address} -p 6443" } @@ -276,13 +363,13 @@ resource "azurerm_virtual_machine" "talosmaster" { resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype -# boot_diagnostics { -# enabled = true -# storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint -# } + boot_diagnostics { + enabled = true + storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } os_profile { - computer_name = "talos" + computer_name = "talosmaster-${count.index}" admin_username = "talos" admin_password = "Talos@1234" custom_data = data.local_file.controllerfile.content @@ -296,7 +383,7 @@ resource "azurerm_virtual_machine" "talosmaster" { # } storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/StorageRG/providers/Microsoft.Compute/images/talos-azure" + id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } storage_os_disk { name = "talosmaster-${count.index}" @@ -325,13 +412,14 @@ resource "azurerm_virtual_machine" "talosworker" { resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype -# boot_diagnostics { -# enabled = true -# storage_uri = azurerm_storage_account.talosimagesa.primary_web_endpoint -# } + + boot_diagnostics { + enabled = true + storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } os_profile { - computer_name = "talos" + computer_name = "talosworker-${count.index}" admin_username = "talos" admin_password = "Talos@1234" custom_data = data.local_file.workerfile.content @@ -344,7 +432,7 @@ resource "azurerm_virtual_machine" "talosworker" { # create_option = "Empty" # } storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/StorageRG/providers/Microsoft.Compute/images/talos-azure" + id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } storage_os_disk { @@ -367,10 +455,10 @@ resource "azurerm_virtual_machine" "talosworker" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_lb.taloslb.frontend_ip_configuration[0].public_ip_address_id}" + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address}" } - depends_on = [ azurerm_virtual_machine.talosmaster ] + depends_on = [ azurerm_virtual_machine.talosmaster ] } diff --git a/azure/talos/scripts/scripts/bootstrapetcd.sh b/azure/talos/scripts/scripts/bootstrapetcd.sh new file mode 100644 index 0000000..771503a --- /dev/null +++ b/azure/talos/scripts/scripts/bootstrapetcd.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +if [ "$#" -ne 1 ] +then + echo "Usage: $0 nodeipaddress" +fi + +echo "node ip address is:" +echo "$1" + +remoteip="$1" +count=0 + +while [ "$count" -le 20 ] +do + echo "Waiting for Talos API to be up...." + nc -zv "$remoteip" 50000 + if [ "$?" -eq 0 ] + then + echo "Talos API is up bootstrapping etcd" + talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" + talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" + break + fi + sleep 30 + count += 1 +done + +if [ "$count" -ge 20 ] +then + echo "ERROR: Talos API is not up " +fi + +echo "ETCD bootstrap Finished" diff --git a/azure/talos/scripts/scripts/controlplane.yaml b/azure/talos/scripts/scripts/controlplane.yaml new file mode 100644 index 0000000..df0d2b2 --- /dev/null +++ b/azure/talos/scripts/scripts/controlplane.yaml @@ -0,0 +1,103 @@ +version: v1alpha1 +debug: false +persist: true +machine: + type: controlplane + token: ley7ay.7ot1l4tngn1s6g3i + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJTHF0SVpmbW9vanpKK09hc2lVRjNqbDFtRThMWU1WSVBTWkZVcDNrOGJaTQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K + certSANs: [] + kubelet: + image: ghcr.io/siderolabs/kubelet:v1.27.3 + extraMounts: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw + defaultRuntimeSeccompProfileEnabled: true + disableManifestsDirectory: true + network: {} + install: + disk: /dev/sda + image: ghcr.io/siderolabs/installer:v1.3.3 + extensions: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 + bootloader: true + wipe: false + features: + rbac: true + stableHostname: true + apidCheckExtKeyUsage: true +cluster: + id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= + secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= + controlPlane: + endpoint: https://20.219.191.24:6443 + clusterName: talosconfig-userdata + network: + cni: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml + dnsDomain: cluster.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/12 + token: s6vl9q.z7evrcp0h1suvy4t + secretboxEncryptionSecret: QXekF2ih6eJ2Vs/dZxcUt5BlAGM1tmct+6mBE4M4kho= + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUYxZ3ZkQ2JJUlVrREhHWkt0OXZITytvMml2dXZoOFo2aThETEtlelJsdkZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFMWIrSVR4T2xwZEs0U3dYS25TOHFVQVV0dnJMeklnNG4rcDJqM2t5aGorbThLTzMyanA5ZgpFOEorM1grZEFwK0VCY2g3Nnlob1NZUGZvMlZDbE91QmtnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + aggregatorCA: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJYekNDQVFXZ0F3SUJBZ0lRWDkxT2xYbTE3MnVFWkIxN2R2b3ltVEFLQmdncWhrak9QUVFEQWpBQU1CNFgKRFRJek1EZ3lPVEU0TWpFek5Wb1hEVE16TURneU5qRTRNakV6TlZvd0FEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxRwpTTTQ5QXdFSEEwSUFCRnRqWlRuRmtLWXFGTHdrcmVsMjRORTRKeE9TcEdzajI2UEhNNDJHb2lxdHFhanhHeVZ2Ck5COVpGQXJJK0lOcU9NUFlOcEhyNjE0SGI4NXBHYU5sVWt5allUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWQKQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVUwdTZtazN2MzFZaldXYW1LR1Nyc2RaR2Flckl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnCkJRVDlFSVc4NUZING5QMDlYckh5VlFSekVHN0VxUjBXaWo4UkVZUmdrOHdDSVFEdTNGMUh2S3BhdXc5MXNIVWwKd2h2MDJtVUw2QXMwY3ozbXNjZVcvUXQxSFE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU9qcDVaWlB6eElJKytEZ204YmkxMTM3SzdUeDVUcFZQOTh1U3VkY3JYMDZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVzJObE9jV1FwaW9VdkNTdDZYYmcwVGduRTVLa2F5UGJvOGN6allhaUtxMnBxUEViSlc4MApIMWtVQ3NqNGcybzR3OWcya2V2clhnZHZ6bWtabzJWU1RBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + serviceAccount: + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdZV2tnL21TbmxLYXVza0JjUkhhNUVLMXBmK0YrMVJETEEvTkZ4K1Jsa1ZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFRkxwRUlyTFVsVVY5eTVCOGNqVm1OaHk3QTJjUW82QjRMTmlGaFY3Z3lrTmZYd2YwTzBwcAo5ODROMnR5cUdQTk1NdmN0akNZT1FHWU5SdE96cXMzNWJRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + apiServer: + image: registry.k8s.io/kube-apiserver:v1.27.3 + certSANs: + - 20.219.191.24 + disablePodSecurityPolicy: true + admissionControl: + - name: PodSecurity + configuration: + apiVersion: pod-security.admission.config.k8s.io/v1alpha1 + defaults: + audit: restricted + audit-version: latest + enforce: baseline + enforce-version: latest + warn: restricted + warn-version: latest + exemptions: + namespaces: + - kube-system + runtimeClasses: [] + usernames: [] + kind: PodSecurityConfiguration + auditPolicy: + apiVersion: audit.k8s.io/v1 + kind: Policy + rules: + - level: Metadata + controllerManager: + image: registry.k8s.io/kube-controller-manager:v1.27.3 + proxy: + image: registry.k8s.io/kube-proxy:v1.27.3 + scheduler: + image: registry.k8s.io/kube-scheduler:v1.27.3 + discovery: + enabled: true + registries: + kubernetes: + disabled: true + service: {} + etcd: + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmVENDQVNTZ0F3SUJBZ0lSQU5PTkpPbjVURzFBK1R2cENCaGozclF3Q2dZSUtvWkl6ajBFQXdJd0R6RU4KTUFzR0ExVUVDaE1FWlhSalpEQWVGdzB5TXpBNE1qa3hPREl4TXpWYUZ3MHpNekE0TWpZeE9ESXhNelZhTUE4eApEVEFMQmdOVkJBb1RCR1YwWTJRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTajhVS3BRcnlvCkxHcU14d0FqbGsrdC9iVGZZM2ZsTm1MaHZ4Wjllam4zREVUQmpNUmpCZU0xWnFEaE1QZEI4bDF0alJ4MWQzL0sKTVQxeWNKd3BrNlhEbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkVxNkpwelRwdkFWCjR1V1RsTWtYZGE4MTR3bzhNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQU5oR2lKdVZJSkhwOW1NRlRhY2hzZlAKSEFpQXZIQVo2UWxDc0Q3RTRlOHRBaUJaNm4xekwxU1RKeldPcE9XTUJiV2QweEdkVkRVS0tNb2VmOHhuL0Fqcgpldz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJYZERmRHA5Nmp6aDJGOHNLRHF0a3RPTHVlclBVQllZZTdSMlFqcVM1am1vQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFby9GQ3FVSzhxQ3hxak1jQUk1WlByZjIwMzJOMzVUWmk0YjhXZlhvNTl3eEV3WXpFWXdYagpOV2FnNFREM1FmSmRiWTBjZFhkL3lqRTljbkNjS1pPbHd3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/azure/talos/scripts/scripts/patch.yaml b/azure/talos/scripts/scripts/patch.yaml new file mode 100644 index 0000000..fceb8e1 --- /dev/null +++ b/azure/talos/scripts/scripts/patch.yaml @@ -0,0 +1,23 @@ +- op: add + path: /machine/install/extensions + value: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 +- op: add + path: /machine/install/image + value: ghcr.io/siderolabs/installer:v1.3.3 +- op: add + path: /machine/kubelet/extraMounts + value: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw +- op: add + path: /cluster/network/cni + value: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml diff --git a/azure/talos/scripts/scripts/talos-image-gen.sh b/azure/talos/scripts/scripts/talos-image-gen.sh new file mode 100644 index 0000000..a301c62 --- /dev/null +++ b/azure/talos/scripts/scripts/talos-image-gen.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +#create directory to store images + +mkdir -p manifests/image/talos + +wget -P manifests/image/talos/ https://github.com/siderolabs/talos/releases/download/v1.5.0/azure-amd64.vhd.xz + +xz -d manifests/image/talos/azure-amd64.vhd.xz + +#Install azure cli + +#curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + +export CONNECTION=$(az storage account show-connection-string \ + -n talosimagesa \ + -g StorageRG \ + -o tsv) +echo $CONNECTION +az storage blob upload \ + --connection-string $CONNECTION \ + --container-name talosimagecont \ + -f manifests/image/talos/azure-amd64.vhd \ + -n talos-azure.vhd \ + --overwrite + +#az image create \ +# --name talos \ +# --source https://talosimagesa.blob.core.windows.net/talosimagecont/talos-azure.vhd \ +# --os-type linux \ +# -g StorageRG diff --git a/azure/talos/scripts/scripts/talosconfig b/azure/talos/scripts/scripts/talosconfig new file mode 100644 index 0000000..4a609b4 --- /dev/null +++ b/azure/talos/scripts/scripts/talosconfig @@ -0,0 +1,8 @@ +context: talosconfig-userdata +contexts: + talosconfig-userdata: + endpoints: + - 127.0.0.1 + ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJLRENCMjZBREFnRUNBaEF0bXBFNGYra3pzK0R2clpxcGFJdjBNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CTXhFVEFQQmdOVgpCQW9UQ0c5ek9tRmtiV2x1TUNvd0JRWURLMlZ3QXlFQTR0RTEzMGI0a0d5eE9GMUxoYnJVb1VZZTREbVJSK0dUCm9wcVE0eEpzc3g2alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJSGdEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0QKQWpBZkJnTlZIU01FR0RBV2dCUTBDbGo0L0tJNllrNzNUaFFPL2J6ajhGc3NRakFGQmdNclpYQURRUUErK1dOTQo4R0ZDSkJaeDc0dlRaQjhjb01WdXNjeFYxcWJDTjRRdG9VdEhjZXlKbFRPd0k3UC80QmxQNTJJZ3R2cUVsTDVLCnk0eGg1SmYvNG9YN1FqY1AKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJUDJtWVFCUXNjamxDYmdzUlpFS2JNc01QREthamdQbS9PVy9qdFZTRUNiOQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K diff --git a/azure/talos/scripts/scripts/talosconfiggen.sh b/azure/talos/scripts/scripts/talosconfiggen.sh new file mode 100644 index 0000000..fe7c57b --- /dev/null +++ b/azure/talos/scripts/scripts/talosconfiggen.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +if [ $# -ne 2 ] +then + echo "Usage: $0 dnsname port" +fi + +while getopts "h:p" OPTION; +do + case "${OPTION}" in + h) + dnsname="$OPTARG" + ;; + p) + port="$OPTARG" + ;; + esac +done +if ! command -v talosctl &> /dev/null +then + echo "Installing talos cli" + curl -sL https://talos.dev/install | sh +else + echo "talosctl is already installed skipping.." +fi + +if [ -f scripts/controlplane.yaml ] +then + rm -f scripts/controlplane.yaml +fi + +if [ -f scripts/wokrer.yaml ] +then + rm -f scripts/worker.yaml +fi + +if [ -f scripts/talosconfig ] +then + rm -f scripts/talosconfig +fi + +echo ${dnsname} +echo ${4} +talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +talosctl validate --config scripts/controlplane.yaml --mode cloud +if [ $? -eq 1 ] +then + echo "scripts/controlplane.yaml is invalid" + exit +fi + +talosctl validate --config scripts/worker.yaml --mode cloud + +if [ $? -eq 1 ] +then + echo "scripts/worker.yaml is invalid" + exit +fi diff --git a/azure/talos/scripts/scripts/worker.yaml b/azure/talos/scripts/scripts/worker.yaml new file mode 100644 index 0000000..0028fbb --- /dev/null +++ b/azure/talos/scripts/scripts/worker.yaml @@ -0,0 +1,59 @@ +version: v1alpha1 +debug: false +persist: true +machine: + type: worker + token: ley7ay.7ot1l4tngn1s6g3i + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: "" + certSANs: [] + kubelet: + image: ghcr.io/siderolabs/kubelet:v1.27.3 + extraMounts: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw + defaultRuntimeSeccompProfileEnabled: true + disableManifestsDirectory: true + network: {} + install: + disk: /dev/sda + image: ghcr.io/siderolabs/installer:v1.3.3 + extensions: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 + bootloader: true + wipe: false + features: + rbac: true + stableHostname: true + apidCheckExtKeyUsage: true +cluster: + id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= + secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= + controlPlane: + endpoint: https://20.219.191.24:6443 + network: + cni: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml + dnsDomain: cluster.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/12 + token: s6vl9q.z7evrcp0h1suvy4t + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: "" + discovery: + enabled: true + registries: + kubernetes: + disabled: true + service: {} diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index de7cafd..54d2eea 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -5,3 +5,5 @@ nics= [ "talos-nic-master1" , "talos-nic-master2", "talos-nic-master3" ] workernics= ["talos-nic-worker1", "talos-nic-worker2", "talos-nic-worker3"] instancetype = "Standard_DS1_v2" publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] +traefikhttpport = 32080 +traefikhttpsport = 32443 diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 37c1bfb..07e165c 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -28,3 +28,11 @@ variable "publicipname" { type = list description = "public ip name" } + +variable "traefikhttpport" { + description = "Name of the traefik 80 port target group" +} + +variable "traefikhttpsport" { + description = "Name of the traefik 443 port target group" +} From 0eb0607089800dd41db4813b4e4573449abb1108 Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 30 Aug 2023 00:08:44 +0530 Subject: [PATCH 053/107] azure installation optimization --- azure/talos/scripts/scripts/controlplane.yaml | 103 ------------------ azure/talos/scripts/scripts/talosconfig | 8 -- azure/talos/scripts/scripts/worker.yaml | 59 ---------- 3 files changed, 170 deletions(-) delete mode 100644 azure/talos/scripts/scripts/controlplane.yaml delete mode 100644 azure/talos/scripts/scripts/talosconfig delete mode 100644 azure/talos/scripts/scripts/worker.yaml diff --git a/azure/talos/scripts/scripts/controlplane.yaml b/azure/talos/scripts/scripts/controlplane.yaml deleted file mode 100644 index df0d2b2..0000000 --- a/azure/talos/scripts/scripts/controlplane.yaml +++ /dev/null @@ -1,103 +0,0 @@ -version: v1alpha1 -debug: false -persist: true -machine: - type: controlplane - token: ley7ay.7ot1l4tngn1s6g3i - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJTHF0SVpmbW9vanpKK09hc2lVRjNqbDFtRThMWU1WSVBTWkZVcDNrOGJaTQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K - certSANs: [] - kubelet: - image: ghcr.io/siderolabs/kubelet:v1.27.3 - extraMounts: - - destination: /var/openebs/local - type: bind - source: /var/openebs/local - options: - - bind - - rshared - - rw - defaultRuntimeSeccompProfileEnabled: true - disableManifestsDirectory: true - network: {} - install: - disk: /dev/sda - image: ghcr.io/siderolabs/installer:v1.3.3 - extensions: - - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 - bootloader: true - wipe: false - features: - rbac: true - stableHostname: true - apidCheckExtKeyUsage: true -cluster: - id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= - secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= - controlPlane: - endpoint: https://20.219.191.24:6443 - clusterName: talosconfig-userdata - network: - cni: - name: custom - urls: - - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml - dnsDomain: cluster.local - podSubnets: - - 10.244.0.0/16 - serviceSubnets: - - 10.96.0.0/12 - token: s6vl9q.z7evrcp0h1suvy4t - secretboxEncryptionSecret: QXekF2ih6eJ2Vs/dZxcUt5BlAGM1tmct+6mBE4M4kho= - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUYxZ3ZkQ2JJUlVrREhHWkt0OXZITytvMml2dXZoOFo2aThETEtlelJsdkZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFMWIrSVR4T2xwZEs0U3dYS25TOHFVQVV0dnJMeklnNG4rcDJqM2t5aGorbThLTzMyanA5ZgpFOEorM1grZEFwK0VCY2g3Nnlob1NZUGZvMlZDbE91QmtnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - aggregatorCA: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJYekNDQVFXZ0F3SUJBZ0lRWDkxT2xYbTE3MnVFWkIxN2R2b3ltVEFLQmdncWhrak9QUVFEQWpBQU1CNFgKRFRJek1EZ3lPVEU0TWpFek5Wb1hEVE16TURneU5qRTRNakV6TlZvd0FEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxRwpTTTQ5QXdFSEEwSUFCRnRqWlRuRmtLWXFGTHdrcmVsMjRORTRKeE9TcEdzajI2UEhNNDJHb2lxdHFhanhHeVZ2Ck5COVpGQXJJK0lOcU9NUFlOcEhyNjE0SGI4NXBHYU5sVWt5allUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWQKQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVUwdTZtazN2MzFZaldXYW1LR1Nyc2RaR2Flckl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnCkJRVDlFSVc4NUZING5QMDlYckh5VlFSekVHN0VxUjBXaWo4UkVZUmdrOHdDSVFEdTNGMUh2S3BhdXc5MXNIVWwKd2h2MDJtVUw2QXMwY3ozbXNjZVcvUXQxSFE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU9qcDVaWlB6eElJKytEZ204YmkxMTM3SzdUeDVUcFZQOTh1U3VkY3JYMDZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVzJObE9jV1FwaW9VdkNTdDZYYmcwVGduRTVLa2F5UGJvOGN6allhaUtxMnBxUEViSlc4MApIMWtVQ3NqNGcybzR3OWcya2V2clhnZHZ6bWtabzJWU1RBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - serviceAccount: - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdZV2tnL21TbmxLYXVza0JjUkhhNUVLMXBmK0YrMVJETEEvTkZ4K1Jsa1ZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFRkxwRUlyTFVsVVY5eTVCOGNqVm1OaHk3QTJjUW82QjRMTmlGaFY3Z3lrTmZYd2YwTzBwcAo5ODROMnR5cUdQTk1NdmN0akNZT1FHWU5SdE96cXMzNWJRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - apiServer: - image: registry.k8s.io/kube-apiserver:v1.27.3 - certSANs: - - 20.219.191.24 - disablePodSecurityPolicy: true - admissionControl: - - name: PodSecurity - configuration: - apiVersion: pod-security.admission.config.k8s.io/v1alpha1 - defaults: - audit: restricted - audit-version: latest - enforce: baseline - enforce-version: latest - warn: restricted - warn-version: latest - exemptions: - namespaces: - - kube-system - runtimeClasses: [] - usernames: [] - kind: PodSecurityConfiguration - auditPolicy: - apiVersion: audit.k8s.io/v1 - kind: Policy - rules: - - level: Metadata - controllerManager: - image: registry.k8s.io/kube-controller-manager:v1.27.3 - proxy: - image: registry.k8s.io/kube-proxy:v1.27.3 - scheduler: - image: registry.k8s.io/kube-scheduler:v1.27.3 - discovery: - enabled: true - registries: - kubernetes: - disabled: true - service: {} - etcd: - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmVENDQVNTZ0F3SUJBZ0lSQU5PTkpPbjVURzFBK1R2cENCaGozclF3Q2dZSUtvWkl6ajBFQXdJd0R6RU4KTUFzR0ExVUVDaE1FWlhSalpEQWVGdzB5TXpBNE1qa3hPREl4TXpWYUZ3MHpNekE0TWpZeE9ESXhNelZhTUE4eApEVEFMQmdOVkJBb1RCR1YwWTJRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTajhVS3BRcnlvCkxHcU14d0FqbGsrdC9iVGZZM2ZsTm1MaHZ4Wjllam4zREVUQmpNUmpCZU0xWnFEaE1QZEI4bDF0alJ4MWQzL0sKTVQxeWNKd3BrNlhEbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkVxNkpwelRwdkFWCjR1V1RsTWtYZGE4MTR3bzhNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQU5oR2lKdVZJSkhwOW1NRlRhY2hzZlAKSEFpQXZIQVo2UWxDc0Q3RTRlOHRBaUJaNm4xekwxU1RKeldPcE9XTUJiV2QweEdkVkRVS0tNb2VmOHhuL0Fqcgpldz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJYZERmRHA5Nmp6aDJGOHNLRHF0a3RPTHVlclBVQllZZTdSMlFqcVM1am1vQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFby9GQ3FVSzhxQ3hxak1jQUk1WlByZjIwMzJOMzVUWmk0YjhXZlhvNTl3eEV3WXpFWXdYagpOV2FnNFREM1FmSmRiWTBjZFhkL3lqRTljbkNjS1pPbHd3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/azure/talos/scripts/scripts/talosconfig b/azure/talos/scripts/scripts/talosconfig deleted file mode 100644 index 4a609b4..0000000 --- a/azure/talos/scripts/scripts/talosconfig +++ /dev/null @@ -1,8 +0,0 @@ -context: talosconfig-userdata -contexts: - talosconfig-userdata: - endpoints: - - 127.0.0.1 - ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJLRENCMjZBREFnRUNBaEF0bXBFNGYra3pzK0R2clpxcGFJdjBNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CTXhFVEFQQmdOVgpCQW9UQ0c5ek9tRmtiV2x1TUNvd0JRWURLMlZ3QXlFQTR0RTEzMGI0a0d5eE9GMUxoYnJVb1VZZTREbVJSK0dUCm9wcVE0eEpzc3g2alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJSGdEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0QKQWpBZkJnTlZIU01FR0RBV2dCUTBDbGo0L0tJNllrNzNUaFFPL2J6ajhGc3NRakFGQmdNclpYQURRUUErK1dOTQo4R0ZDSkJaeDc0dlRaQjhjb01WdXNjeFYxcWJDTjRRdG9VdEhjZXlKbFRPd0k3UC80QmxQNTJJZ3R2cUVsTDVLCnk0eGg1SmYvNG9YN1FqY1AKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJUDJtWVFCUXNjamxDYmdzUlpFS2JNc01QREthamdQbS9PVy9qdFZTRUNiOQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K diff --git a/azure/talos/scripts/scripts/worker.yaml b/azure/talos/scripts/scripts/worker.yaml deleted file mode 100644 index 0028fbb..0000000 --- a/azure/talos/scripts/scripts/worker.yaml +++ /dev/null @@ -1,59 +0,0 @@ -version: v1alpha1 -debug: false -persist: true -machine: - type: worker - token: ley7ay.7ot1l4tngn1s6g3i - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: "" - certSANs: [] - kubelet: - image: ghcr.io/siderolabs/kubelet:v1.27.3 - extraMounts: - - destination: /var/openebs/local - type: bind - source: /var/openebs/local - options: - - bind - - rshared - - rw - defaultRuntimeSeccompProfileEnabled: true - disableManifestsDirectory: true - network: {} - install: - disk: /dev/sda - image: ghcr.io/siderolabs/installer:v1.3.3 - extensions: - - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 - bootloader: true - wipe: false - features: - rbac: true - stableHostname: true - apidCheckExtKeyUsage: true -cluster: - id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= - secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= - controlPlane: - endpoint: https://20.219.191.24:6443 - network: - cni: - name: custom - urls: - - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml - dnsDomain: cluster.local - podSubnets: - - 10.244.0.0/16 - serviceSubnets: - - 10.96.0.0/12 - token: s6vl9q.z7evrcp0h1suvy4t - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: "" - discovery: - enabled: true - registries: - kubernetes: - disabled: true - service: {} From 3fbf78921fdd9e916b0e5be48c20a738897154c2 Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 30 Aug 2023 00:12:00 +0530 Subject: [PATCH 054/107] azure installation optimization --- azure/talos/scripts/bootstrapetcd.sh | 12 +- azure/talos/scripts/controlplane.yaml | 103 ++++++++++++++++++ azure/talos/scripts/scripts/bootstrapetcd.sh | 34 ------ azure/talos/scripts/scripts/patch.yaml | 23 ---- .../talos/scripts/scripts/talos-image-gen.sh | 31 ------ azure/talos/scripts/scripts/talosconfiggen.sh | 58 ---------- azure/talos/scripts/talosconfig | 8 ++ azure/talos/scripts/worker.yaml | 59 ++++++++++ 8 files changed, 174 insertions(+), 154 deletions(-) delete mode 100644 azure/talos/scripts/scripts/bootstrapetcd.sh delete mode 100644 azure/talos/scripts/scripts/patch.yaml delete mode 100644 azure/talos/scripts/scripts/talos-image-gen.sh delete mode 100644 azure/talos/scripts/scripts/talosconfiggen.sh create mode 100644 azure/talos/scripts/talosconfig diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh index eefda4a..771503a 100644 --- a/azure/talos/scripts/bootstrapetcd.sh +++ b/azure/talos/scripts/bootstrapetcd.sh @@ -1,8 +1,5 @@ #!/bin/bash - -TALOS_API_IP = 50000 - if [ "$#" -ne 1 ] then echo "Usage: $0 nodeipaddress" @@ -14,16 +11,15 @@ echo "$1" remoteip="$1" count=0 -while [ "$count" -ge 20 ] +while [ "$count" -le 20 ] do echo "Waiting for Talos API to be up...." - nc -zv "$remoteip" "$TALOS_API_IP" + nc -zv "$remoteip" 50000 if [ "$?" -eq 0 ] then echo "Talos API is up bootstrapping etcd" - talosctl --talosconfig out/talosconfig config endpoint "$remoteip" - talosctl --talosconfig out/talosconfig config node "$remoteip" - talosctl --talosconfig out/talosconfig bootstrap "$remoteip" + talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" + talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" break fi sleep 30 diff --git a/azure/talos/scripts/controlplane.yaml b/azure/talos/scripts/controlplane.yaml index e69de29..df0d2b2 100644 --- a/azure/talos/scripts/controlplane.yaml +++ b/azure/talos/scripts/controlplane.yaml @@ -0,0 +1,103 @@ +version: v1alpha1 +debug: false +persist: true +machine: + type: controlplane + token: ley7ay.7ot1l4tngn1s6g3i + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJTHF0SVpmbW9vanpKK09hc2lVRjNqbDFtRThMWU1WSVBTWkZVcDNrOGJaTQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K + certSANs: [] + kubelet: + image: ghcr.io/siderolabs/kubelet:v1.27.3 + extraMounts: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw + defaultRuntimeSeccompProfileEnabled: true + disableManifestsDirectory: true + network: {} + install: + disk: /dev/sda + image: ghcr.io/siderolabs/installer:v1.3.3 + extensions: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 + bootloader: true + wipe: false + features: + rbac: true + stableHostname: true + apidCheckExtKeyUsage: true +cluster: + id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= + secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= + controlPlane: + endpoint: https://20.219.191.24:6443 + clusterName: talosconfig-userdata + network: + cni: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml + dnsDomain: cluster.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/12 + token: s6vl9q.z7evrcp0h1suvy4t + secretboxEncryptionSecret: QXekF2ih6eJ2Vs/dZxcUt5BlAGM1tmct+6mBE4M4kho= + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUYxZ3ZkQ2JJUlVrREhHWkt0OXZITytvMml2dXZoOFo2aThETEtlelJsdkZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFMWIrSVR4T2xwZEs0U3dYS25TOHFVQVV0dnJMeklnNG4rcDJqM2t5aGorbThLTzMyanA5ZgpFOEorM1grZEFwK0VCY2g3Nnlob1NZUGZvMlZDbE91QmtnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + aggregatorCA: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJYekNDQVFXZ0F3SUJBZ0lRWDkxT2xYbTE3MnVFWkIxN2R2b3ltVEFLQmdncWhrak9QUVFEQWpBQU1CNFgKRFRJek1EZ3lPVEU0TWpFek5Wb1hEVE16TURneU5qRTRNakV6TlZvd0FEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxRwpTTTQ5QXdFSEEwSUFCRnRqWlRuRmtLWXFGTHdrcmVsMjRORTRKeE9TcEdzajI2UEhNNDJHb2lxdHFhanhHeVZ2Ck5COVpGQXJJK0lOcU9NUFlOcEhyNjE0SGI4NXBHYU5sVWt5allUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWQKQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVUwdTZtazN2MzFZaldXYW1LR1Nyc2RaR2Flckl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnCkJRVDlFSVc4NUZING5QMDlYckh5VlFSekVHN0VxUjBXaWo4UkVZUmdrOHdDSVFEdTNGMUh2S3BhdXc5MXNIVWwKd2h2MDJtVUw2QXMwY3ozbXNjZVcvUXQxSFE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU9qcDVaWlB6eElJKytEZ204YmkxMTM3SzdUeDVUcFZQOTh1U3VkY3JYMDZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVzJObE9jV1FwaW9VdkNTdDZYYmcwVGduRTVLa2F5UGJvOGN6allhaUtxMnBxUEViSlc4MApIMWtVQ3NqNGcybzR3OWcya2V2clhnZHZ6bWtabzJWU1RBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + serviceAccount: + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdZV2tnL21TbmxLYXVza0JjUkhhNUVLMXBmK0YrMVJETEEvTkZ4K1Jsa1ZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFRkxwRUlyTFVsVVY5eTVCOGNqVm1OaHk3QTJjUW82QjRMTmlGaFY3Z3lrTmZYd2YwTzBwcAo5ODROMnR5cUdQTk1NdmN0akNZT1FHWU5SdE96cXMzNWJRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + apiServer: + image: registry.k8s.io/kube-apiserver:v1.27.3 + certSANs: + - 20.219.191.24 + disablePodSecurityPolicy: true + admissionControl: + - name: PodSecurity + configuration: + apiVersion: pod-security.admission.config.k8s.io/v1alpha1 + defaults: + audit: restricted + audit-version: latest + enforce: baseline + enforce-version: latest + warn: restricted + warn-version: latest + exemptions: + namespaces: + - kube-system + runtimeClasses: [] + usernames: [] + kind: PodSecurityConfiguration + auditPolicy: + apiVersion: audit.k8s.io/v1 + kind: Policy + rules: + - level: Metadata + controllerManager: + image: registry.k8s.io/kube-controller-manager:v1.27.3 + proxy: + image: registry.k8s.io/kube-proxy:v1.27.3 + scheduler: + image: registry.k8s.io/kube-scheduler:v1.27.3 + discovery: + enabled: true + registries: + kubernetes: + disabled: true + service: {} + etcd: + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmVENDQVNTZ0F3SUJBZ0lSQU5PTkpPbjVURzFBK1R2cENCaGozclF3Q2dZSUtvWkl6ajBFQXdJd0R6RU4KTUFzR0ExVUVDaE1FWlhSalpEQWVGdzB5TXpBNE1qa3hPREl4TXpWYUZ3MHpNekE0TWpZeE9ESXhNelZhTUE4eApEVEFMQmdOVkJBb1RCR1YwWTJRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTajhVS3BRcnlvCkxHcU14d0FqbGsrdC9iVGZZM2ZsTm1MaHZ4Wjllam4zREVUQmpNUmpCZU0xWnFEaE1QZEI4bDF0alJ4MWQzL0sKTVQxeWNKd3BrNlhEbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkVxNkpwelRwdkFWCjR1V1RsTWtYZGE4MTR3bzhNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQU5oR2lKdVZJSkhwOW1NRlRhY2hzZlAKSEFpQXZIQVo2UWxDc0Q3RTRlOHRBaUJaNm4xekwxU1RKeldPcE9XTUJiV2QweEdkVkRVS0tNb2VmOHhuL0Fqcgpldz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJYZERmRHA5Nmp6aDJGOHNLRHF0a3RPTHVlclBVQllZZTdSMlFqcVM1am1vQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFby9GQ3FVSzhxQ3hxak1jQUk1WlByZjIwMzJOMzVUWmk0YjhXZlhvNTl3eEV3WXpFWXdYagpOV2FnNFREM1FmSmRiWTBjZFhkL3lqRTljbkNjS1pPbHd3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/azure/talos/scripts/scripts/bootstrapetcd.sh b/azure/talos/scripts/scripts/bootstrapetcd.sh deleted file mode 100644 index 771503a..0000000 --- a/azure/talos/scripts/scripts/bootstrapetcd.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -if [ "$#" -ne 1 ] -then - echo "Usage: $0 nodeipaddress" -fi - -echo "node ip address is:" -echo "$1" - -remoteip="$1" -count=0 - -while [ "$count" -le 20 ] -do - echo "Waiting for Talos API to be up...." - nc -zv "$remoteip" 50000 - if [ "$?" -eq 0 ] - then - echo "Talos API is up bootstrapping etcd" - talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" - talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" - break - fi - sleep 30 - count += 1 -done - -if [ "$count" -ge 20 ] -then - echo "ERROR: Talos API is not up " -fi - -echo "ETCD bootstrap Finished" diff --git a/azure/talos/scripts/scripts/patch.yaml b/azure/talos/scripts/scripts/patch.yaml deleted file mode 100644 index fceb8e1..0000000 --- a/azure/talos/scripts/scripts/patch.yaml +++ /dev/null @@ -1,23 +0,0 @@ -- op: add - path: /machine/install/extensions - value: - - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 -- op: add - path: /machine/install/image - value: ghcr.io/siderolabs/installer:v1.3.3 -- op: add - path: /machine/kubelet/extraMounts - value: - - destination: /var/openebs/local - type: bind - source: /var/openebs/local - options: - - bind - - rshared - - rw -- op: add - path: /cluster/network/cni - value: - name: custom - urls: - - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml diff --git a/azure/talos/scripts/scripts/talos-image-gen.sh b/azure/talos/scripts/scripts/talos-image-gen.sh deleted file mode 100644 index a301c62..0000000 --- a/azure/talos/scripts/scripts/talos-image-gen.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -#create directory to store images - -mkdir -p manifests/image/talos - -wget -P manifests/image/talos/ https://github.com/siderolabs/talos/releases/download/v1.5.0/azure-amd64.vhd.xz - -xz -d manifests/image/talos/azure-amd64.vhd.xz - -#Install azure cli - -#curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - -export CONNECTION=$(az storage account show-connection-string \ - -n talosimagesa \ - -g StorageRG \ - -o tsv) -echo $CONNECTION -az storage blob upload \ - --connection-string $CONNECTION \ - --container-name talosimagecont \ - -f manifests/image/talos/azure-amd64.vhd \ - -n talos-azure.vhd \ - --overwrite - -#az image create \ -# --name talos \ -# --source https://talosimagesa.blob.core.windows.net/talosimagecont/talos-azure.vhd \ -# --os-type linux \ -# -g StorageRG diff --git a/azure/talos/scripts/scripts/talosconfiggen.sh b/azure/talos/scripts/scripts/talosconfiggen.sh deleted file mode 100644 index fe7c57b..0000000 --- a/azure/talos/scripts/scripts/talosconfiggen.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -if [ $# -ne 2 ] -then - echo "Usage: $0 dnsname port" -fi - -while getopts "h:p" OPTION; -do - case "${OPTION}" in - h) - dnsname="$OPTARG" - ;; - p) - port="$OPTARG" - ;; - esac -done -if ! command -v talosctl &> /dev/null -then - echo "Installing talos cli" - curl -sL https://talos.dev/install | sh -else - echo "talosctl is already installed skipping.." -fi - -if [ -f scripts/controlplane.yaml ] -then - rm -f scripts/controlplane.yaml -fi - -if [ -f scripts/wokrer.yaml ] -then - rm -f scripts/worker.yaml -fi - -if [ -f scripts/talosconfig ] -then - rm -f scripts/talosconfig -fi - -echo ${dnsname} -echo ${4} -talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force -talosctl validate --config scripts/controlplane.yaml --mode cloud -if [ $? -eq 1 ] -then - echo "scripts/controlplane.yaml is invalid" - exit -fi - -talosctl validate --config scripts/worker.yaml --mode cloud - -if [ $? -eq 1 ] -then - echo "scripts/worker.yaml is invalid" - exit -fi diff --git a/azure/talos/scripts/talosconfig b/azure/talos/scripts/talosconfig new file mode 100644 index 0000000..4a609b4 --- /dev/null +++ b/azure/talos/scripts/talosconfig @@ -0,0 +1,8 @@ +context: talosconfig-userdata +contexts: + talosconfig-userdata: + endpoints: + - 127.0.0.1 + ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJLRENCMjZBREFnRUNBaEF0bXBFNGYra3pzK0R2clpxcGFJdjBNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CTXhFVEFQQmdOVgpCQW9UQ0c5ek9tRmtiV2x1TUNvd0JRWURLMlZ3QXlFQTR0RTEzMGI0a0d5eE9GMUxoYnJVb1VZZTREbVJSK0dUCm9wcVE0eEpzc3g2alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJSGdEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0QKQWpBZkJnTlZIU01FR0RBV2dCUTBDbGo0L0tJNllrNzNUaFFPL2J6ajhGc3NRakFGQmdNclpYQURRUUErK1dOTQo4R0ZDSkJaeDc0dlRaQjhjb01WdXNjeFYxcWJDTjRRdG9VdEhjZXlKbFRPd0k3UC80QmxQNTJJZ3R2cUVsTDVLCnk0eGg1SmYvNG9YN1FqY1AKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJUDJtWVFCUXNjamxDYmdzUlpFS2JNc01QREthamdQbS9PVy9qdFZTRUNiOQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K diff --git a/azure/talos/scripts/worker.yaml b/azure/talos/scripts/worker.yaml index e69de29..0028fbb 100644 --- a/azure/talos/scripts/worker.yaml +++ b/azure/talos/scripts/worker.yaml @@ -0,0 +1,59 @@ +version: v1alpha1 +debug: false +persist: true +machine: + type: worker + token: ley7ay.7ot1l4tngn1s6g3i + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: "" + certSANs: [] + kubelet: + image: ghcr.io/siderolabs/kubelet:v1.27.3 + extraMounts: + - destination: /var/openebs/local + type: bind + source: /var/openebs/local + options: + - bind + - rshared + - rw + defaultRuntimeSeccompProfileEnabled: true + disableManifestsDirectory: true + network: {} + install: + disk: /dev/sda + image: ghcr.io/siderolabs/installer:v1.3.3 + extensions: + - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 + bootloader: true + wipe: false + features: + rbac: true + stableHostname: true + apidCheckExtKeyUsage: true +cluster: + id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= + secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= + controlPlane: + endpoint: https://20.219.191.24:6443 + network: + cni: + name: custom + urls: + - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml + dnsDomain: cluster.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/12 + token: s6vl9q.z7evrcp0h1suvy4t + ca: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: "" + discovery: + enabled: true + registries: + kubernetes: + disabled: true + service: {} From 224f00a2af2b420d4447281f2affb851e6eefe7f Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 30 Aug 2023 00:12:26 +0530 Subject: [PATCH 055/107] azure installation optimization --- azure/talos/scripts/talosconfig | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 azure/talos/scripts/talosconfig diff --git a/azure/talos/scripts/talosconfig b/azure/talos/scripts/talosconfig deleted file mode 100644 index 4a609b4..0000000 --- a/azure/talos/scripts/talosconfig +++ /dev/null @@ -1,8 +0,0 @@ -context: talosconfig-userdata -contexts: - talosconfig-userdata: - endpoints: - - 127.0.0.1 - ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJLRENCMjZBREFnRUNBaEF0bXBFNGYra3pzK0R2clpxcGFJdjBNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CTXhFVEFQQmdOVgpCQW9UQ0c5ek9tRmtiV2x1TUNvd0JRWURLMlZ3QXlFQTR0RTEzMGI0a0d5eE9GMUxoYnJVb1VZZTREbVJSK0dUCm9wcVE0eEpzc3g2alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJSGdEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0QKQWpBZkJnTlZIU01FR0RBV2dCUTBDbGo0L0tJNllrNzNUaFFPL2J6ajhGc3NRakFGQmdNclpYQURRUUErK1dOTQo4R0ZDSkJaeDc0dlRaQjhjb01WdXNjeFYxcWJDTjRRdG9VdEhjZXlKbFRPd0k3UC80QmxQNTJJZ3R2cUVsTDVLCnk0eGg1SmYvNG9YN1FqY1AKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJUDJtWVFCUXNjamxDYmdzUlpFS2JNc01QREthamdQbS9PVy9qdFZTRUNiOQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K From c2e379e49fe51c68e1459a63b07687b484876d0d Mon Sep 17 00:00:00 2001 From: Pramod Date: Wed, 30 Aug 2023 00:13:30 +0530 Subject: [PATCH 056/107] azure installation optimization --- azure/talos/scripts/controlplane.yaml | 103 -------------------------- azure/talos/scripts/worker.yaml | 59 --------------- 2 files changed, 162 deletions(-) delete mode 100644 azure/talos/scripts/controlplane.yaml delete mode 100644 azure/talos/scripts/worker.yaml diff --git a/azure/talos/scripts/controlplane.yaml b/azure/talos/scripts/controlplane.yaml deleted file mode 100644 index df0d2b2..0000000 --- a/azure/talos/scripts/controlplane.yaml +++ /dev/null @@ -1,103 +0,0 @@ -version: v1alpha1 -debug: false -persist: true -machine: - type: controlplane - token: ley7ay.7ot1l4tngn1s6g3i - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJTHF0SVpmbW9vanpKK09hc2lVRjNqbDFtRThMWU1WSVBTWkZVcDNrOGJaTQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K - certSANs: [] - kubelet: - image: ghcr.io/siderolabs/kubelet:v1.27.3 - extraMounts: - - destination: /var/openebs/local - type: bind - source: /var/openebs/local - options: - - bind - - rshared - - rw - defaultRuntimeSeccompProfileEnabled: true - disableManifestsDirectory: true - network: {} - install: - disk: /dev/sda - image: ghcr.io/siderolabs/installer:v1.3.3 - extensions: - - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 - bootloader: true - wipe: false - features: - rbac: true - stableHostname: true - apidCheckExtKeyUsage: true -cluster: - id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= - secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= - controlPlane: - endpoint: https://20.219.191.24:6443 - clusterName: talosconfig-userdata - network: - cni: - name: custom - urls: - - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml - dnsDomain: cluster.local - podSubnets: - - 10.244.0.0/16 - serviceSubnets: - - 10.96.0.0/12 - token: s6vl9q.z7evrcp0h1suvy4t - secretboxEncryptionSecret: QXekF2ih6eJ2Vs/dZxcUt5BlAGM1tmct+6mBE4M4kho= - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUYxZ3ZkQ2JJUlVrREhHWkt0OXZITytvMml2dXZoOFo2aThETEtlelJsdkZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFMWIrSVR4T2xwZEs0U3dYS25TOHFVQVV0dnJMeklnNG4rcDJqM2t5aGorbThLTzMyanA5ZgpFOEorM1grZEFwK0VCY2g3Nnlob1NZUGZvMlZDbE91QmtnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - aggregatorCA: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJYekNDQVFXZ0F3SUJBZ0lRWDkxT2xYbTE3MnVFWkIxN2R2b3ltVEFLQmdncWhrak9QUVFEQWpBQU1CNFgKRFRJek1EZ3lPVEU0TWpFek5Wb1hEVE16TURneU5qRTRNakV6TlZvd0FEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxRwpTTTQ5QXdFSEEwSUFCRnRqWlRuRmtLWXFGTHdrcmVsMjRORTRKeE9TcEdzajI2UEhNNDJHb2lxdHFhanhHeVZ2Ck5COVpGQXJJK0lOcU9NUFlOcEhyNjE0SGI4NXBHYU5sVWt5allUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWQKQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVUwdTZtazN2MzFZaldXYW1LR1Nyc2RaR2Flckl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnCkJRVDlFSVc4NUZING5QMDlYckh5VlFSekVHN0VxUjBXaWo4UkVZUmdrOHdDSVFEdTNGMUh2S3BhdXc5MXNIVWwKd2h2MDJtVUw2QXMwY3ozbXNjZVcvUXQxSFE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU9qcDVaWlB6eElJKytEZ204YmkxMTM3SzdUeDVUcFZQOTh1U3VkY3JYMDZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVzJObE9jV1FwaW9VdkNTdDZYYmcwVGduRTVLa2F5UGJvOGN6allhaUtxMnBxUEViSlc4MApIMWtVQ3NqNGcybzR3OWcya2V2clhnZHZ6bWtabzJWU1RBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - serviceAccount: - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdZV2tnL21TbmxLYXVza0JjUkhhNUVLMXBmK0YrMVJETEEvTkZ4K1Jsa1ZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFRkxwRUlyTFVsVVY5eTVCOGNqVm1OaHk3QTJjUW82QjRMTmlGaFY3Z3lrTmZYd2YwTzBwcAo5ODROMnR5cUdQTk1NdmN0akNZT1FHWU5SdE96cXMzNWJRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= - apiServer: - image: registry.k8s.io/kube-apiserver:v1.27.3 - certSANs: - - 20.219.191.24 - disablePodSecurityPolicy: true - admissionControl: - - name: PodSecurity - configuration: - apiVersion: pod-security.admission.config.k8s.io/v1alpha1 - defaults: - audit: restricted - audit-version: latest - enforce: baseline - enforce-version: latest - warn: restricted - warn-version: latest - exemptions: - namespaces: - - kube-system - runtimeClasses: [] - usernames: [] - kind: PodSecurityConfiguration - auditPolicy: - apiVersion: audit.k8s.io/v1 - kind: Policy - rules: - - level: Metadata - controllerManager: - image: registry.k8s.io/kube-controller-manager:v1.27.3 - proxy: - image: registry.k8s.io/kube-proxy:v1.27.3 - scheduler: - image: registry.k8s.io/kube-scheduler:v1.27.3 - discovery: - enabled: true - registries: - kubernetes: - disabled: true - service: {} - etcd: - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmVENDQVNTZ0F3SUJBZ0lSQU5PTkpPbjVURzFBK1R2cENCaGozclF3Q2dZSUtvWkl6ajBFQXdJd0R6RU4KTUFzR0ExVUVDaE1FWlhSalpEQWVGdzB5TXpBNE1qa3hPREl4TXpWYUZ3MHpNekE0TWpZeE9ESXhNelZhTUE4eApEVEFMQmdOVkJBb1RCR1YwWTJRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTajhVS3BRcnlvCkxHcU14d0FqbGsrdC9iVGZZM2ZsTm1MaHZ4Wjllam4zREVUQmpNUmpCZU0xWnFEaE1QZEI4bDF0alJ4MWQzL0sKTVQxeWNKd3BrNlhEbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkVxNkpwelRwdkFWCjR1V1RsTWtYZGE4MTR3bzhNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQU5oR2lKdVZJSkhwOW1NRlRhY2hzZlAKSEFpQXZIQVo2UWxDc0Q3RTRlOHRBaUJaNm4xekwxU1RKeldPcE9XTUJiV2QweEdkVkRVS0tNb2VmOHhuL0Fqcgpldz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K - key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJYZERmRHA5Nmp6aDJGOHNLRHF0a3RPTHVlclBVQllZZTdSMlFqcVM1am1vQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFby9GQ3FVSzhxQ3hxak1jQUk1WlByZjIwMzJOMzVUWmk0YjhXZlhvNTl3eEV3WXpFWXdYagpOV2FnNFREM1FmSmRiWTBjZFhkL3lqRTljbkNjS1pPbHd3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/azure/talos/scripts/worker.yaml b/azure/talos/scripts/worker.yaml deleted file mode 100644 index 0028fbb..0000000 --- a/azure/talos/scripts/worker.yaml +++ /dev/null @@ -1,59 +0,0 @@ -version: v1alpha1 -debug: false -persist: true -machine: - type: worker - token: ley7ay.7ot1l4tngn1s6g3i - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQakNCOGFBREFnRUNBaEJUUGREUktCeUdiL2xaYlM0dkp6V3FNQVVHQXl0bGNEQVFNUTR3REFZRFZRUUsKRXdWMFlXeHZjekFlRncweU16QTRNamt4T0RJeE16VmFGdzB6TXpBNE1qWXhPREl4TXpWYU1CQXhEakFNQmdOVgpCQW9UQlhSaGJHOXpNQ293QlFZREsyVndBeUVBZUZrcGlDRUw5TjY1VG1nNVFockhRMi9qSC90N3RQNDhVVkd4CnlMYmc1QzJqWVRCZk1BNEdBMVVkRHdFQi93UUVBd0lDaERBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVTkFwWStQeWlPbUpPOTA0VQpEdjI4NC9CYkxFSXdCUVlESzJWd0EwRUFKMTBlcEVjT3pZUmVVVXc3VG5DSUxUeXRaN09vTXpDaks0VHd0azdHCmZEZGVVZ1grVHlGZmxLYzkxam1ZOUtIb0dJcGpaTmg1MFpEQmZOaURCWDVYRHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: "" - certSANs: [] - kubelet: - image: ghcr.io/siderolabs/kubelet:v1.27.3 - extraMounts: - - destination: /var/openebs/local - type: bind - source: /var/openebs/local - options: - - bind - - rshared - - rw - defaultRuntimeSeccompProfileEnabled: true - disableManifestsDirectory: true - network: {} - install: - disk: /dev/sda - image: ghcr.io/siderolabs/installer:v1.3.3 - extensions: - - image: ghcr.io/siderolabs/iscsi-tools:v0.1.1 - bootloader: true - wipe: false - features: - rbac: true - stableHostname: true - apidCheckExtKeyUsage: true -cluster: - id: BZ7c-qHbUUsV8Wbom7o0PBwY66LVB81VLlBQcQBvJi0= - secret: eaQuvYBNrGOlI1F3CopGoT3bqNdIVBzvtOaAFqAf6ZM= - controlPlane: - endpoint: https://20.219.191.24:6443 - network: - cni: - name: custom - urls: - - https://docs.projectcalico.org/archive/v3.25/manifests/canal.yaml - dnsDomain: cluster.local - podSubnets: - - 10.244.0.0/16 - serviceSubnets: - - 10.96.0.0/12 - token: s6vl9q.z7evrcp0h1suvy4t - ca: - crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpakNDQVRDZ0F3SUJBZ0lSQUxRdmtSck1vbkp2dWw5SFlYWjZRWm93Q2dZSUtvWkl6ajBFQXdJd0ZURVQKTUJFR0ExVUVDaE1LYTNWaVpYSnVaWFJsY3pBZUZ3MHlNekE0TWpreE9ESXhNelZhRncwek16QTRNall4T0RJeApNelZhTUJVeEV6QVJCZ05WQkFvVENtdDFZbVZ5Ym1WMFpYTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CCkJ3TkNBQVRWdjRoUEU2V2wwcmhMQmNxZEx5cFFCUzIrc3ZNaURpZjZuYVBlVEtHUDZid283ZmFPbjE4VHduN2QKZjUwQ240UUZ5SHZyS0doSmc5K2paVUtVNjRHU28yRXdYekFPQmdOVkhROEJBZjhFQkFNQ0FvUXdIUVlEVlIwbApCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPCkJCWUVGQ2xvQkhJQ3d6cUliak1hWXJQdm1iZ3g4NHdHTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDUkhxcFoKcjVBT0FEVCs2Nk1hR0VXb0swa0syUlBBQnJGdWFGdjUxNzBzMWdJZ0hDdWRlSmxkMjdZQWJaSlF5OWN4SWlCLwpsRkg5ZUpxc2VJQkJJRHdxaVBjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - key: "" - discovery: - enabled: true - registries: - kubernetes: - disabled: true - service: {} From 11fb940b3250d02f3285e1f2f41dd0da68b6ab92 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 19 Sep 2023 23:19:54 +0530 Subject: [PATCH 057/107] Update talosconfiggen.sh --- azure/talos/scripts/talosconfiggen.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/azure/talos/scripts/talosconfiggen.sh b/azure/talos/scripts/talosconfiggen.sh index fe7c57b..0551ab0 100644 --- a/azure/talos/scripts/talosconfiggen.sh +++ b/azure/talos/scripts/talosconfiggen.sh @@ -16,13 +16,13 @@ do ;; esac done -if ! command -v talosctl &> /dev/null -then - echo "Installing talos cli" - curl -sL https://talos.dev/install | sh -else - echo "talosctl is already installed skipping.." -fi +#if ! command -v talosctl &> /dev/null +#then +# echo "Installing talos cli" +# curl -sL https://talos.dev/install | sh +#else +# echo "talosctl is already installed skipping.." +#fi if [ -f scripts/controlplane.yaml ] then @@ -41,15 +41,15 @@ fi echo ${dnsname} echo ${4} -talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force -talosctl validate --config scripts/controlplane.yaml --mode cloud +../../../capten/talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +../../../capten/talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit fi -talosctl validate --config scripts/worker.yaml --mode cloud +../../../capten/talosctl validate --config scripts/worker.yaml --mode cloud if [ $? -eq 1 ] then From 8b699636f7546afebef8169ff84ac766c6f7faa5 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 19 Sep 2023 23:20:26 +0530 Subject: [PATCH 058/107] Update bootstrapetcd.sh --- azure/talos/scripts/bootstrapetcd.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh index 771503a..674f58b 100644 --- a/azure/talos/scripts/bootstrapetcd.sh +++ b/azure/talos/scripts/bootstrapetcd.sh @@ -18,8 +18,8 @@ do if [ "$?" -eq 0 ] then echo "Talos API is up bootstrapping etcd" - talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" - talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" + ../../../capten/talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" + ../../../capten/talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" break fi sleep 30 From e0f4d6f54009a4fa430c21ca804cbf8062a7775f Mon Sep 17 00:00:00 2001 From: Pramod Date: Fri, 22 Sep 2023 22:27:28 +0530 Subject: [PATCH 059/107] remove yq --- aws/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index efc5fa3..1fe23f2 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -310,7 +310,7 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "yq -e '.LoadBalancerHost |= \"${aws_lb.traefik.dns_name}\"' -i ${var.configfolderpath}/capten.yaml" + command = "echo 'LoadBalancerHost = \"${aws_lb.traefik.dns_name}\"' > ${var.configfolderpath}/capten.yaml" } depends_on = [ aws_instance.talos_master_instance ] From 0399d89ed6feb6527f7310da1da5a6b21042c3eb Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 23 Sep 2023 23:05:42 +0530 Subject: [PATCH 060/107] Add fixes for azure --- azure/talos/main.tf | 38 +++++++++++++++++++++++++++++++++++++- azure/talos/values.tfvars | 1 + azure/talos/vars.tf | 4 ++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 43c61fc..6d0989d 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -174,6 +174,15 @@ resource "azurerm_public_ip" "talos-public-ip-lb" { } +resource "azurerm_public_ip" "talos-public-ip-nat" { + name = "talos-public-ip-nat" + resource_group_name = azurerm_resource_group.talosrg.name + allocation_method = "Static" + location = var.region + sku = "Standard" + +} + resource "azurerm_public_ip" "talos-public-ip-traefik" { name = "talos-public-ip-traefik" resource_group_name = azurerm_resource_group.talosrg.name @@ -286,7 +295,7 @@ resource "azurerm_lb_rule" "traefik-80" { loadbalancer_id = azurerm_lb.traefiklb.id name = "traefik-80" protocol = "Tcp" - frontend_port = 443 + frontend_port = 80 backend_port = var.traefikhttpport frontend_ip_configuration_name = "traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] @@ -333,7 +342,34 @@ resource "azurerm_availability_set" "talosas" { resource_group_name = azurerm_resource_group.talosrg.name managed = true +} + +resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { + count = length(var.workernics) + network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % 4) + network_security_group_id = azurerm_network_security_group.talossg.id +} + +resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { + count = length(var.workernics) + network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % 4) + network_security_group_id = azurerm_network_security_group.talossg.id +} + +resource "azurerm_nat_gateway" "talosnat" { + name = "worker-node-nat" + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name +} + +resource "azurerm_subnet_nat_gateway_association" "talosnatassocation" { + subnet_id = azurerm_subnet.talossubnet.id + nat_gateway_id = azurerm_nat_gateway.talosnat.id +} +resource "azurerm_nat_gateway_public_ip_association" "publicipnatassociation" { + nat_gateway_id = azurerm_nat_gateway.talosnat.id + public_ip_address_id = azurerm_public_ip.talos-public-ip-nat.id } resource "null_resource" "createtalosconfig" { diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index 54d2eea..313196c 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -7,3 +7,4 @@ instancetype = "Standard_DS1_v2" publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] traefikhttpport = 32080 traefikhttpsport = 32443 +configfolderpath = "./" \ No newline at end of file diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 07e165c..533b433 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -36,3 +36,7 @@ variable "traefikhttpport" { variable "traefikhttpsport" { description = "Name of the traefik 443 port target group" } + +variable "configfolderpath" { + description = "CLI config folder path" +} From 90db454731ac359edd5b46b69c576ef23474d444 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 23 Sep 2023 23:07:02 +0530 Subject: [PATCH 061/107] Fix azure --- azure/talos/scripts/bootstrapetcd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh index 674f58b..efe6ec2 100644 --- a/azure/talos/scripts/bootstrapetcd.sh +++ b/azure/talos/scripts/bootstrapetcd.sh @@ -23,7 +23,7 @@ do break fi sleep 30 - count += 1 + count=$((count+1)) done if [ "$count" -ge 20 ] From 0cfc4f20e042bbabe8820979f1a97428e8cd4abb Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 23 Sep 2023 23:09:37 +0530 Subject: [PATCH 062/107] Change filename --- aws/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 1fe23f2..db6b4ef 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -310,7 +310,7 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "echo 'LoadBalancerHost = \"${aws_lb.traefik.dns_name}\"' > ${var.configfolderpath}/capten.yaml" + command = "echo 'LoadBalancerHost = \"${aws_lb.traefik.dns_name}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } depends_on = [ aws_instance.talos_master_instance ] From 4921f7e655936feaa93d139c786830963082e2ab Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 23 Sep 2023 23:11:16 +0530 Subject: [PATCH 063/107] Add fixes for azure --- azure/talos/main.tf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 6d0989d..546e614 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -494,6 +494,13 @@ resource "null_resource" "bootstrap_etcd" { command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address}" } + provisioner "local-exec" { + command = "talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" + + } + provisioner "local-exec" { + command = "echo 'LoadBalancerHost = \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" + } depends_on = [ azurerm_virtual_machine.talosmaster ] } From e189069ff911ae9abd8829d4a229ba401acc3c8a Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 7 Oct 2023 14:34:19 +0530 Subject: [PATCH 064/107] Add talosctlpath var --- aws/talos/main.tf | 8 +++---- aws/talos/scripts/bootstrapetcd.sh | 17 ++++++-------- aws/talos/scripts/talosconfiggen.sh | 33 +++++++++++++++------------ aws/talos/values.tfvars | 1 + aws/talos/vars.tf | 6 ++++- azure/talos/main.tf | 6 ++--- azure/talos/scripts/bootstrapetcd.sh | 7 +++--- azure/talos/scripts/talosconfiggen.sh | 19 +++++++++------ azure/talos/values.tfvars | 3 ++- azure/talos/vars.tf | 4 ++++ 10 files changed, 61 insertions(+), 43 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index db6b4ef..d0e356b 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -294,19 +294,19 @@ resource "aws_alb_listener" "traefik-listener-80" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig config endpoint ${aws_instance.talos_master_instance.0.public_ip}" } provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" + command = "/${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig config node ${aws_instance.talos_master_instance.0.public_ip}" } provisioner "local-exec" { - command = "sleep 60; talosctl --talosconfig scripts/talosconfig bootstrap" + command = "sleep 60; ${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig bootstrap" } provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" } provisioner "local-exec" { diff --git a/aws/talos/scripts/bootstrapetcd.sh b/aws/talos/scripts/bootstrapetcd.sh index eefda4a..63d55b0 100644 --- a/aws/talos/scripts/bootstrapetcd.sh +++ b/aws/talos/scripts/bootstrapetcd.sh @@ -1,33 +1,30 @@ #!/bin/bash - -TALOS_API_IP = 50000 - if [ "$#" -ne 1 ] then - echo "Usage: $0 nodeipaddress" + echo "Usage: $0 nodeipaddress talosctlpath" fi echo "node ip address is:" echo "$1" remoteip="$1" +talosctlpath="$2" count=0 -while [ "$count" -ge 20 ] +while [ "$count" -le 20 ] do echo "Waiting for Talos API to be up...." - nc -zv "$remoteip" "$TALOS_API_IP" + nc -zv "$remoteip" 50000 if [ "$?" -eq 0 ] then echo "Talos API is up bootstrapping etcd" - talosctl --talosconfig out/talosconfig config endpoint "$remoteip" - talosctl --talosconfig out/talosconfig config node "$remoteip" - talosctl --talosconfig out/talosconfig bootstrap "$remoteip" + ${talosctlpath}/talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" + ${talosctlpath}/talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" break fi sleep 30 - count += 1 + count=$((count+1)) done if [ "$count" -ge 20 ] diff --git a/aws/talos/scripts/talosconfiggen.sh b/aws/talos/scripts/talosconfiggen.sh index fe7c57b..f87c01a 100644 --- a/aws/talos/scripts/talosconfiggen.sh +++ b/aws/talos/scripts/talosconfiggen.sh @@ -1,11 +1,11 @@ #!/bin/sh -if [ $# -ne 2 ] +if [ $# -ne 3 ] then - echo "Usage: $0 dnsname port" + echo "Usage: $0 dnsname port talosctlpath" fi -while getopts "h:p" OPTION; +while getopts ":h:p:t:" OPTION; do case "${OPTION}" in h) @@ -14,15 +14,18 @@ do p) port="$OPTARG" ;; + t) + talosctlpath="$OPTARG" + ;; esac done -if ! command -v talosctl &> /dev/null -then - echo "Installing talos cli" - curl -sL https://talos.dev/install | sh -else - echo "talosctl is already installed skipping.." -fi +#if ! command -v talosctl &> /dev/null +#then +# echo "Installing talos cli" +# curl -sL https://talos.dev/install | sh +#else +# echo "talosctl is already installed skipping.." +#fi if [ -f scripts/controlplane.yaml ] then @@ -40,16 +43,18 @@ then fi echo ${dnsname} -echo ${4} -talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force -talosctl validate --config scripts/controlplane.yaml --mode cloud +echo ${port} +echo ${talosctlpath} + +${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +${talosctlpath}/talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit fi -talosctl validate --config scripts/worker.yaml --mode cloud +${talosctlpath}/talosctl validate --config scripts/worker.yaml --mode cloud if [ $? -eq 1 ] then diff --git a/aws/talos/values.tfvars b/aws/talos/values.tfvars index a5cc1e1..e68bfb3 100755 --- a/aws/talos/values.tfvars +++ b/aws/talos/values.tfvars @@ -17,3 +17,4 @@ traefik_tg_80_name = traefik_tg_443_name = traefiklbname = configfolderpath = +talosctlfolderpath = diff --git a/aws/talos/vars.tf b/aws/talos/vars.tf index 5afab1b..e6f951e 100755 --- a/aws/talos/vars.tf +++ b/aws/talos/vars.tf @@ -73,4 +73,8 @@ variable "traefiklbname" { } variable "configfolderpath" { description = "CLI config folder path" -} \ No newline at end of file +} + +variable "talosctlfolderpath" { + description = "home folder path for capten cli dir" +} diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 546e614..c72422f 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -375,7 +375,7 @@ resource "azurerm_nat_gateway_public_ip_association" "publicipnatassociation" { resource "null_resource" "createtalosconfig" { provisioner "local-exec" { - command = "/bin/bash scripts/talosconfiggen.sh -h ${azurerm_public_ip.talos-public-ip-lb.ip_address} -p 6443" + command = "/bin/bash scripts/talosconfiggen.sh -h ${azurerm_public_ip.talos-public-ip-lb.ip_address} -p 6443 -t ${var.talosctlfolderpath}" } @@ -491,11 +491,11 @@ resource "azurerm_virtual_machine" "talosworker" { resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address}" + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address} ${var.talosctlfolderpath}" } provisioner "local-exec" { - command = "talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" } provisioner "local-exec" { diff --git a/azure/talos/scripts/bootstrapetcd.sh b/azure/talos/scripts/bootstrapetcd.sh index efe6ec2..63d55b0 100644 --- a/azure/talos/scripts/bootstrapetcd.sh +++ b/azure/talos/scripts/bootstrapetcd.sh @@ -2,13 +2,14 @@ if [ "$#" -ne 1 ] then - echo "Usage: $0 nodeipaddress" + echo "Usage: $0 nodeipaddress talosctlpath" fi echo "node ip address is:" echo "$1" remoteip="$1" +talosctlpath="$2" count=0 while [ "$count" -le 20 ] @@ -18,8 +19,8 @@ do if [ "$?" -eq 0 ] then echo "Talos API is up bootstrapping etcd" - ../../../capten/talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" - ../../../capten/talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" + ${talosctlpath}/talosctl --talosconfig scripts/talosconfig config endpoint "$remoteip" + ${talosctlpath}/talosctl --talosconfig scripts/talosconfig bootstrap --nodes "$remoteip" break fi sleep 30 diff --git a/azure/talos/scripts/talosconfiggen.sh b/azure/talos/scripts/talosconfiggen.sh index 0551ab0..f87c01a 100644 --- a/azure/talos/scripts/talosconfiggen.sh +++ b/azure/talos/scripts/talosconfiggen.sh @@ -1,11 +1,11 @@ #!/bin/sh -if [ $# -ne 2 ] +if [ $# -ne 3 ] then - echo "Usage: $0 dnsname port" + echo "Usage: $0 dnsname port talosctlpath" fi -while getopts "h:p" OPTION; +while getopts ":h:p:t:" OPTION; do case "${OPTION}" in h) @@ -14,6 +14,9 @@ do p) port="$OPTARG" ;; + t) + talosctlpath="$OPTARG" + ;; esac done #if ! command -v talosctl &> /dev/null @@ -40,16 +43,18 @@ then fi echo ${dnsname} -echo ${4} -../../../capten/talosctl gen config talosconfig-userdata https://${dnsname}:${4} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force -../../../capten/talosctl validate --config scripts/controlplane.yaml --mode cloud +echo ${port} +echo ${talosctlpath} + +${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +${talosctlpath}/talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then echo "scripts/controlplane.yaml is invalid" exit fi -../../../capten/talosctl validate --config scripts/worker.yaml --mode cloud +${talosctlpath}/talosctl validate --config scripts/worker.yaml --mode cloud if [ $? -eq 1 ] then diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index 313196c..86f4104 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -7,4 +7,5 @@ instancetype = "Standard_DS1_v2" publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] traefikhttpport = 32080 traefikhttpsport = 32443 -configfolderpath = "./" \ No newline at end of file +configfolderpath = "./" +captenhomefolderpath = "" diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 533b433..2321e09 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -40,3 +40,7 @@ variable "traefikhttpsport" { variable "configfolderpath" { description = "CLI config folder path" } + +variable "talosctlfolderpath" { + description = "home folder path for capten cli dir" +} From 6ea078e32a00ef6265ab6686ac1e86bd414146da Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 7 Oct 2023 14:36:13 +0530 Subject: [PATCH 065/107] Add talosctlpath var --- azure/talos/values.tfvars | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index 86f4104..448e319 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -8,4 +8,4 @@ publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] traefikhttpport = 32080 traefikhttpsport = 32443 configfolderpath = "./" -captenhomefolderpath = "" +talosctlfolderpath = "" From 481e3524533f592b7780aee02c8839cd23b44d71 Mon Sep 17 00:00:00 2001 From: Shifna12Zarnaz Date: Mon, 9 Oct 2023 16:10:50 +0530 Subject: [PATCH 066/107] Added node flag in main.tf --- azure/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index c72422f..7d45fcb 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -495,7 +495,7 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath} --nodes ${azurerm_public_ip.talos-public-ip[0].ip_address}" } provisioner "local-exec" { From 98a37e0a2f3c2d1256a6b6536bd6e0e668407f1f Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 12 Oct 2023 23:15:05 +0530 Subject: [PATCH 067/107] Fix aws failure for talosctl path --- aws/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index d0e356b..ae10022 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -105,7 +105,7 @@ module "alb" { resource "null_resource" "createtalosconfig" { provisioner "local-exec" { - command = "/bin/bash scripts/talosconfiggen.sh -h ${module.alb.lb_dns_name} -p 443" + command = "/bin/bash scripts/talosconfiggen.sh -h ${module.alb.lb_dns_name} -p 443 -t ${var.talosctlfolderpath}" } From bced11cc5b6158c777bca3d6c1751f994a60b100 Mon Sep 17 00:00:00 2001 From: Shifna12Zarnaz Date: Fri, 13 Oct 2023 23:14:15 +0530 Subject: [PATCH 068/107] LoadBalancerHost Changed --- aws/talos/main.tf | 2 +- azure/talos/main.tf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index ae10022..51dbcb6 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -310,7 +310,7 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "echo 'LoadBalancerHost = \"${aws_lb.traefik.dns_name}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" + command = "echo 'LoadBalancerHost: \"${aws_lb.traefik.dns_name}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } depends_on = [ aws_instance.talos_master_instance ] diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 7d45fcb..6884ed3 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -499,8 +499,8 @@ resource "null_resource" "bootstrap_etcd" { } provisioner "local-exec" { - command = "echo 'LoadBalancerHost = \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" - } + command = "echo 'LoadBalancerHost: \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" + } depends_on = [ azurerm_virtual_machine.talosmaster ] } From ed00c4d93f168890f993ec008800bd978342ef98 Mon Sep 17 00:00:00 2001 From: Pramod Date: Sat, 14 Oct 2023 00:57:47 +0530 Subject: [PATCH 069/107] add data disk --- azure/talos/main.tf | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index c72422f..87c0563 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -435,6 +435,7 @@ resource "azurerm_virtual_machine" "talosmaster" { network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] availability_set_id = azurerm_availability_set.talosas.id + delete_os_disk_on_termination = true depends_on = [ azurerm_availability_set.talosas ] @@ -461,12 +462,12 @@ resource "azurerm_virtual_machine" "talosworker" { custom_data = data.local_file.workerfile.content } -# storage_data_disk { -# name = "talosstoragedata" -# disk_size_gb = "20" -# lun = "1" -# create_option = "Empty" -# } + storage_data_disk { + name = "datadisk-talosworker${count.index}" + disk_size_gb = "200" + lun = "1" + create_option = "Empty" + } storage_image_reference { id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } @@ -484,11 +485,13 @@ resource "azurerm_virtual_machine" "talosworker" { os_profile_linux_config { disable_password_authentication = false } + delete_os_disk_on_termination = true depends_on = [ azurerm_availability_set.talosas ] } + resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address} ${var.talosctlfolderpath}" From e61ff61684b12ce9dfcf204408901f3ea6cda06c Mon Sep 17 00:00:00 2001 From: Pramod Date: Thu, 26 Oct 2023 22:23:01 +0530 Subject: [PATCH 070/107] fix security group for traefik --- azure/talos/main.tf | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 87c0563..e1fe76c 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -155,6 +155,36 @@ resource "azurerm_network_security_rule" "kube" { } +resource "azurerm_network_security_rule" "traefikhttps" { + name = "kube" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1005" + source_port_range = "*" + destination_port_ranges = [ "${var.traefikhttpsport}" ] + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" + +} + +resource "azurerm_network_security_rule" "traefikhttp" { + name = "kube" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1006" + source_port_range = "*" + destination_port_ranges = [ "${var.traefikhttpport}" ] + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" + +} + resource "azurerm_public_ip" "talos-public-ip" { count = length(var.publicipname) name = "publicip-${count.index}" From 20cee30f299ed2facc75c4fbadd46a28f624ee2a Mon Sep 17 00:00:00 2001 From: Akash LM Date: Fri, 24 Nov 2023 14:54:44 +0530 Subject: [PATCH 071/107] Added alb version --- aws/talos/main.tf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 51dbcb6..f4d46bb 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -90,6 +90,8 @@ module "security_group" { module "alb" { source = "terraform-aws-modules/alb/aws" + + version = "8.7.0" name = var.albname From 61061502c99e71a9a419a23e3ea7db0683d995f0 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:40:30 +0530 Subject: [PATCH 072/107] Add support for multi cluster creation --- azure/talos/main.tf | 68 +++++++++++++++++++-------------------- azure/talos/values.tfvars | 5 +++ azure/talos/vars.tf | 20 ++++++++++++ 3 files changed, 59 insertions(+), 34 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index e1fe76c..546ab3d 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -13,12 +13,12 @@ provider "azurerm" { } resource "azurerm_resource_group" "storagerg" { - name = "StorageRG" + name = var.storagergname location = var.region } resource "azurerm_storage_account" "talosimagesa" { - name = "talosimagesa" + name = var.storage_account_name resource_group_name = "${azurerm_resource_group.storagerg.name}" location = var.region account_tier = "Standard" @@ -31,7 +31,7 @@ resource "azurerm_storage_account" "talosimagesa" { resource "azurerm_storage_container" "talosimagecont" { - name = "talosimagecont" + name = var.talos_imagecont_name storage_account_name = azurerm_storage_account.talosimagesa.name container_access_type = "private" } @@ -69,12 +69,12 @@ resource "azurerm_storage_container" "talosimagecont" { #} resource "azurerm_resource_group" "talosrg" { - name = "talosrg" + name = var.talosrgname location = var.region } resource "azurerm_virtual_network" "talosnet" { - name = "talosnet" + name = "${var.talos_cluster_name}-vnet" address_space = [ "10.0.0.0/16" ] location = var.region resource_group_name = azurerm_resource_group.talosrg.name @@ -82,7 +82,7 @@ resource "azurerm_virtual_network" "talosnet" { } resource "azurerm_subnet" "talossubnet" { - name = "talossubnet" + name = "${var.talos_cluster_name}-subnet" resource_group_name = azurerm_resource_group.talosrg.name virtual_network_name = azurerm_virtual_network.talosnet.name address_prefixes = [ "10.0.1.0/24" ] @@ -90,7 +90,7 @@ resource "azurerm_subnet" "talossubnet" { } resource "azurerm_network_security_group" "talossg" { - name = "talossg" + name = "${var.talos_cluster_name}-talossg" resource_group_name = azurerm_resource_group.talosrg.name location = var.region } @@ -187,7 +187,7 @@ resource "azurerm_network_security_rule" "traefikhttp" { resource "azurerm_public_ip" "talos-public-ip" { count = length(var.publicipname) - name = "publicip-${count.index}" + name = "${var.talos_cluster_name}-publicip-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region @@ -196,7 +196,7 @@ resource "azurerm_public_ip" "talos-public-ip" { } resource "azurerm_public_ip" "talos-public-ip-lb" { - name = "talos-public-ip-lb" + name = "${var.talos_cluster_name}-talos-public-ip-lb" resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region @@ -205,7 +205,7 @@ resource "azurerm_public_ip" "talos-public-ip-lb" { } resource "azurerm_public_ip" "talos-public-ip-nat" { - name = "talos-public-ip-nat" + name = "${var.talos_cluster_name}-talos-public-ip-nat" resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region @@ -214,7 +214,7 @@ resource "azurerm_public_ip" "talos-public-ip-nat" { } resource "azurerm_public_ip" "talos-public-ip-traefik" { - name = "talos-public-ip-traefik" + name = "${var.talos_cluster_name}-talos-public-ip-traefik" resource_group_name = azurerm_resource_group.talosrg.name allocation_method = "Static" location = var.region @@ -223,39 +223,39 @@ resource "azurerm_public_ip" "talos-public-ip-traefik" { } resource "azurerm_lb" "taloslb" { - name = "taloslb" + name = "${var.talos_cluster_name}-lb" resource_group_name = azurerm_resource_group.talosrg.name location = var.region sku = "Standard" frontend_ip_configuration { - name = "talosfe" + name = "${var.talos_cluster_name}-talosfe" public_ip_address_id = azurerm_public_ip.talos-public-ip-lb.id } } resource "azurerm_lb" "traefiklb" { - name = "traefiklb" + name = "${var.talos_cluster_name}-traefiklb" resource_group_name = azurerm_resource_group.talosrg.name location = var.region sku = "Standard" frontend_ip_configuration { - name = "traefikfe" + name = "${var.talos_cluster_name}-traefikfe" public_ip_address_id = azurerm_public_ip.talos-public-ip-traefik.id } } resource "azurerm_lb_backend_address_pool" "talosbe" { - name = "talosbe" + name = "${var.talos_cluster_name}-talosbe" loadbalancer_id = azurerm_lb.taloslb.id depends_on = [ azurerm_lb.taloslb ] } resource "azurerm_lb_backend_address_pool" "traefikbe" { - name = "traefikbe" + name = "${var.talos_cluster_name}-traefikbe" loadbalancer_id = azurerm_lb.traefiklb.id depends_on = [ azurerm_lb.traefiklb ] } @@ -263,7 +263,7 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { count = length(var.nics) network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % 4) - ip_configuration_name = "config-${count.index}" + ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id } @@ -271,7 +271,7 @@ resource "azurerm_network_interface_backend_address_pool_association" "lbbackend resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { count = length(var.workernics) network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % 4) - ip_configuration_name = "workerconfig-${count.index}" + ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id } @@ -303,7 +303,7 @@ resource "azurerm_lb_rule" "talos-6443" { protocol = "Tcp" frontend_port = 6443 backend_port = 6443 - frontend_ip_configuration_name = "talosfe" + frontend_ip_configuration_name = "${var.talos_cluster_name}-talosfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.id ] probe_id = azurerm_lb_probe.talos-lb-health.id @@ -315,7 +315,7 @@ resource "azurerm_lb_rule" "traefik-443" { protocol = "Tcp" frontend_port = 443 backend_port = var.traefikhttpsport - frontend_ip_configuration_name = "traefikfe" + frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] probe_id = azurerm_lb_probe.traefik-443-health.id @@ -327,7 +327,7 @@ resource "azurerm_lb_rule" "traefik-80" { protocol = "Tcp" frontend_port = 80 backend_port = var.traefikhttpport - frontend_ip_configuration_name = "traefikfe" + frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] probe_id = azurerm_lb_probe.traefik-80-health.id @@ -335,14 +335,14 @@ resource "azurerm_lb_rule" "traefik-80" { resource "azurerm_network_interface" "nics" { count = length(var.nics) - name = "nic-${count.index}" + name = "${var.talos_cluster_name}-nic-${count.index}" location = var.region resource_group_name = azurerm_resource_group.talosrg.name ip_configuration { private_ip_address_allocation = "Dynamic" - name = "config-${count.index}" + name = "${var.talos_cluster_name}-config-${count.index}" subnet_id = azurerm_subnet.talossubnet.id private_ip_address = element(var.nics, count.index) public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % 4) @@ -352,14 +352,14 @@ resource "azurerm_network_interface" "nics" { resource "azurerm_network_interface" "workernics" { count = length(var.workernics) - name = "workernic-${count.index}" + name = "${var.talos_cluster_name}-workernic-${count.index}" location = var.region resource_group_name = azurerm_resource_group.talosrg.name ip_configuration { private_ip_address_allocation = "Dynamic" - name = "workerconfig-${count.index}" + name = "${var.talos_cluster_name}-workerconfig-${count.index}" subnet_id = azurerm_subnet.talossubnet.id private_ip_address = element(var.nics, count.index) @@ -367,7 +367,7 @@ resource "azurerm_network_interface" "workernics" { } resource "azurerm_availability_set" "talosas" { - name = "talosas" + name = "${var.talos_cluster_name}-talosas" location = azurerm_resource_group.talosrg.location resource_group_name = azurerm_resource_group.talosrg.name managed = true @@ -387,7 +387,7 @@ resource "azurerm_network_interface_security_group_association" "networkinterfac } resource "azurerm_nat_gateway" "talosnat" { - name = "worker-node-nat" + name = "${var.talos_cluster_name}-worker-node-nat" location = var.region resource_group_name = azurerm_resource_group.talosrg.name } @@ -425,7 +425,7 @@ data "local_file" "workerfile" { resource "azurerm_virtual_machine" "talosmaster" { count = length(var.mastercount) - name = "talosmaster-${count.index}" + name = "${var.talos_cluster_name}-talosmaster-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype @@ -435,7 +435,7 @@ resource "azurerm_virtual_machine" "talosmaster" { } os_profile { - computer_name = "talosmaster-${count.index}" + computer_name = "${var.talos_cluster_name}-talosmaster-${count.index}" admin_username = "talos" admin_password = "Talos@1234" custom_data = data.local_file.controllerfile.content @@ -452,7 +452,7 @@ resource "azurerm_virtual_machine" "talosmaster" { id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } storage_os_disk { - name = "talosmaster-${count.index}" + name = "${var.talos_cluster_name}-talosmaster-${count.index}" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" @@ -475,7 +475,7 @@ resource "azurerm_virtual_machine" "talosmaster" { resource "azurerm_virtual_machine" "talosworker" { count = length(var.workercount) - name = "talosworker-${count.index}" + name = "${var.talos_cluster_name}-talosworker-${count.index}" resource_group_name = azurerm_resource_group.talosrg.name location = var.region vm_size = var.instancetype @@ -486,7 +486,7 @@ resource "azurerm_virtual_machine" "talosworker" { } os_profile { - computer_name = "talosworker-${count.index}" + computer_name = "${var.talos_cluster_name}-talosworker-${count.index}" admin_username = "talos" admin_password = "Talos@1234" custom_data = data.local_file.workerfile.content @@ -503,7 +503,7 @@ resource "azurerm_virtual_machine" "talosworker" { } storage_os_disk { - name = "talosworker-${count.index}" + name = "${var.talos_cluster_name}-talosworker-${count.index}" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index 448e319..b2e2d3e 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -9,3 +9,8 @@ traefikhttpport = 32080 traefikhttpsport = 32443 configfolderpath = "./" talosctlfolderpath = "" +talosrgname = "talosrg1" +storagergname = "StoargeRG1" +storage_account_name = "talosimagesa1" +talos_imagecont_name = "talosimagecont1" +talos_cluster_name = "taloscluster1" \ No newline at end of file diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 2321e09..f7b6f94 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -44,3 +44,23 @@ variable "configfolderpath" { variable "talosctlfolderpath" { description = "home folder path for capten cli dir" } + +variable "talosrgname" { + description = "talos resourcegroup name" +} + +variable "storagergname" { + description = "storage resourcegroup name" +} + +variable "storage_account_name" { + description = "stoarge accountname for talosimage and diagnostics" +} + +variable "talos_imagecont_name" { + description = "talosimage container name" +} + +variable "talos_cluster_name" { + description = "talosvnet name" +} From c1a7a0f4e32b729eaf2c3edc0590839132a0753d Mon Sep 17 00:00:00 2001 From: sheril5 Date: Thu, 7 Dec 2023 09:24:03 +0530 Subject: [PATCH 073/107] modified azure lb --- azure/talos/main.tf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index f67cd72..36e68d0 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -297,6 +297,13 @@ resource "azurerm_lb_probe" "traefik-80-health" { protocol = "Tcp" } +resource "azurerm_lb_probe" "nats-4222-health" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "nats-4222-health" + port = 4222 + protocol = "Tcp" +} + resource "azurerm_lb_rule" "talos-6443" { loadbalancer_id = azurerm_lb.taloslb.id name = "talos-6443" @@ -333,6 +340,18 @@ resource "azurerm_lb_rule" "traefik-80" { probe_id = azurerm_lb_probe.traefik-80-health.id } +resource "azurerm_lb_rule" "nats-4222" { + loadbalancer_id = azurerm_lb.traefiklb.id + name = "nats-4222" + protocol = "Tcp" + frontend_port = 4222 + backend_port = var.nats-client-port + frontend_ip_configuration_name = "traefikfe " + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] + + probe_id = azurerm_lb_probe.nats-4222-health.id +} + resource "azurerm_network_interface" "nics" { count = length(var.nics) name = "${var.talos_cluster_name}-nic-${count.index}" From 7ce1556178878463a62f35901bba022c7e0aa439 Mon Sep 17 00:00:00 2001 From: sheril5 Date: Thu, 7 Dec 2023 10:06:33 +0530 Subject: [PATCH 074/107] modified vars and tfvars --- azure/talos/values.tfvars | 3 ++- azure/talos/vars.tf | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index b2e2d3e..63f78f3 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -7,10 +7,11 @@ instancetype = "Standard_DS1_v2" publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] traefikhttpport = 32080 traefikhttpsport = 32443 +nats-client-port = 31675 configfolderpath = "./" talosctlfolderpath = "" talosrgname = "talosrg1" storagergname = "StoargeRG1" storage_account_name = "talosimagesa1" talos_imagecont_name = "talosimagecont1" -talos_cluster_name = "taloscluster1" \ No newline at end of file +talos_cluster_name = "taloscluster1" diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index f7b6f94..f584bb3 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -33,6 +33,11 @@ variable "traefikhttpport" { description = "Name of the traefik 80 port target group" } +variable "nats-client-port" { + description = "Name of the nats-client-port 4222 port target group" +} + + variable "traefikhttpsport" { description = "Name of the traefik 443 port target group" } From a293f00c320a0641d83d870ec0c936c01dd3d9ef Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 14 Dec 2023 22:08:44 +0530 Subject: [PATCH 075/107] Change OS disk size --- azure/talos/main.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 546ab3d..ae17794 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -443,7 +443,7 @@ resource "azurerm_virtual_machine" "talosmaster" { # storage_data_disk { # name = "talosstoragedata" -# disk_size_gb = "20" +# disk_size_gb = "100" # lun = "1" # create_option = "Empty" # } @@ -456,7 +456,7 @@ resource "azurerm_virtual_machine" "talosmaster" { caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" - disk_size_gb = "20" + disk_size_gb = "100" } os_profile_linux_config { @@ -507,7 +507,7 @@ resource "azurerm_virtual_machine" "talosworker" { caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" - disk_size_gb = "20" + disk_size_gb = "100" } availability_set_id = azurerm_availability_set.talosas.id network_interface_ids = [ element(azurerm_network_interface.workernics[*].id, count.index ) ] From 0564c14950098c8f8b458cde6cbcf45300f7b1bb Mon Sep 17 00:00:00 2001 From: sheril fio <101544947+sheril5@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:49:35 +0530 Subject: [PATCH 076/107] Update vars.tf --- azure/talos/vars.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index f584bb3..3c908b2 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -33,7 +33,7 @@ variable "traefikhttpport" { description = "Name of the traefik 80 port target group" } -variable "nats-client-port" { +variable "nats_client_port" { description = "Name of the nats-client-port 4222 port target group" } From 3c3b65ce84cce82a7260074c98e8383d125f6f43 Mon Sep 17 00:00:00 2001 From: sheril fio <101544947+sheril5@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:50:38 +0530 Subject: [PATCH 077/107] Update values.tfvars --- azure/talos/values.tfvars | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/values.tfvars b/azure/talos/values.tfvars index 63f78f3..fdd4392 100644 --- a/azure/talos/values.tfvars +++ b/azure/talos/values.tfvars @@ -7,7 +7,7 @@ instancetype = "Standard_DS1_v2" publicipname = [ "talos-public-ip-1", "talos-public-ip-2", "talos-public-ip-3" ] traefikhttpport = 32080 traefikhttpsport = 32443 -nats-client-port = 31675 +nats_client_port = 31675 configfolderpath = "./" talosctlfolderpath = "" talosrgname = "talosrg1" From 0cb2f275ffadbf4ed0efdca5bd8a3ef3b7284192 Mon Sep 17 00:00:00 2001 From: sheril fio <101544947+sheril5@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:01:30 +0530 Subject: [PATCH 078/107] Update main.tf --- azure/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 36e68d0..3863e3d 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -345,7 +345,7 @@ resource "azurerm_lb_rule" "nats-4222" { name = "nats-4222" protocol = "Tcp" frontend_port = 4222 - backend_port = var.nats-client-port + backend_port = var.nats_client_port frontend_ip_configuration_name = "traefikfe " backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] From 1f11f11cf493c8ee101d1a8ad1c2dbade8a8cf4d Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 22 Dec 2023 11:02:14 +0530 Subject: [PATCH 079/107] Fix multi cluster issue --- azure/talos/main.tf | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 67a64b2..9ff3ac4 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -9,7 +9,6 @@ terraform { provider "azurerm" { features {} - } resource "azurerm_resource_group" "storagerg" { @@ -96,7 +95,7 @@ resource "azurerm_network_security_group" "talossg" { } resource "azurerm_network_security_rule" "apid" { - name = "apid" + name = "${var.talos_cluster_name}-apid" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1001" source_port_range = "*" @@ -111,7 +110,7 @@ resource "azurerm_network_security_rule" "apid" { } resource "azurerm_network_security_rule" "trustd" { - name = "trustd" + name = "${var.talos_cluster_name}-trustd" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1002" source_port_range = "*" @@ -126,7 +125,7 @@ resource "azurerm_network_security_rule" "trustd" { } resource "azurerm_network_security_rule" "etcd" { - name = "etcd" + name = "${var.talos_cluster_name}-etcd" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1003" source_port_range = "*" @@ -141,7 +140,7 @@ resource "azurerm_network_security_rule" "etcd" { } resource "azurerm_network_security_rule" "kube" { - name = "kube" + name = "${var.talos_cluster_name}-kube" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1004" source_port_range = "*" @@ -156,7 +155,7 @@ resource "azurerm_network_security_rule" "kube" { } resource "azurerm_network_security_rule" "traefikhttps" { - name = "kube" + name = "${var.talos_cluster_name}-traefikhttps" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1005" source_port_range = "*" @@ -171,7 +170,7 @@ resource "azurerm_network_security_rule" "traefikhttps" { } resource "azurerm_network_security_rule" "traefikhttp" { - name = "kube" + name = "${var.talos_cluster_name}-traefikhttp" network_security_group_name = azurerm_network_security_group.talossg.name priority = "1006" source_port_range = "*" @@ -278,35 +277,35 @@ resource "azurerm_network_interface_backend_address_pool_association" "traefikbe resource "azurerm_lb_probe" "talos-lb-health" { loadbalancer_id = azurerm_lb.taloslb.id - name = "talos-lb-health" + name = "${var.talos_cluster_name}-talos-lb-health" port = 6443 protocol = "Tcp" } resource "azurerm_lb_probe" "traefik-443-health" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "traefik-443-health" + name = "${var.talos_cluster_name}-traefik-443-health" port = 443 protocol = "Tcp" } resource "azurerm_lb_probe" "traefik-80-health" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "traefik-80-health" + name = "${var.talos_cluster_name}-traefik-80-health" port = 80 protocol = "Tcp" } resource "azurerm_lb_probe" "nats-4222-health" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "nats-4222-health" + name = "${var.talos_cluster_name}-nats-4222-health" port = 4222 protocol = "Tcp" } resource "azurerm_lb_rule" "talos-6443" { loadbalancer_id = azurerm_lb.taloslb.id - name = "talos-6443" + name = "${var.talos_cluster_name}-talos-6443" protocol = "Tcp" frontend_port = 6443 backend_port = 6443 @@ -318,7 +317,7 @@ resource "azurerm_lb_rule" "talos-6443" { resource "azurerm_lb_rule" "traefik-443" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "traefik-443" + name = "${var.talos_cluster_name}-traefik-443" protocol = "Tcp" frontend_port = 443 backend_port = var.traefikhttpsport @@ -330,7 +329,7 @@ resource "azurerm_lb_rule" "traefik-443" { resource "azurerm_lb_rule" "traefik-80" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "traefik-80" + name = "${var.talos_cluster_name}-traefik-80" protocol = "Tcp" frontend_port = 80 backend_port = var.traefikhttpport @@ -342,11 +341,11 @@ resource "azurerm_lb_rule" "traefik-80" { resource "azurerm_lb_rule" "nats-4222" { loadbalancer_id = azurerm_lb.traefiklb.id - name = "nats-4222" + name = "${var.talos_cluster_name}-nats-4222" protocol = "Tcp" frontend_port = 4222 backend_port = var.nats_client_port - frontend_ip_configuration_name = "traefikfe " + frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] probe_id = azurerm_lb_probe.nats-4222-health.id From 4ff280e29def6e90fdf9b2d8f6e7db5290bd6954 Mon Sep 17 00:00:00 2001 From: sheril fio <101544947+sheril5@users.noreply.github.com> Date: Fri, 22 Dec 2023 22:01:53 +0530 Subject: [PATCH 080/107] Update main.tf --- azure/talos/main.tf | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 9ff3ac4..c37bb77 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -184,6 +184,21 @@ resource "azurerm_network_security_rule" "traefikhttp" { } +resource "azurerm_network_security_rule" "nats" { + name = "${var.talos_cluster_name}-nats" + network_security_group_name = azurerm_network_security_group.talossg.name + priority = "1007" + source_port_range = "*" + destination_port_ranges = [ "${var.traefikhttpport}" ] + source_address_prefix = "*" + destination_address_prefix = "*" + direction = "Inbound" + access = "Allow" + resource_group_name = azurerm_resource_group.talosrg.name + protocol = "Tcp" + +} + resource "azurerm_public_ip" "talos-public-ip" { count = length(var.publicipname) name = "${var.talos_cluster_name}-publicip-${count.index}" From 857ab408d8983d19a42fb84bddf578959d4b27e5 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sun, 24 Dec 2023 22:48:10 +0530 Subject: [PATCH 081/107] Fix worker nic creation issue --- azure/talos/main.tf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 9ff3ac4..f76f8f5 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -261,7 +261,7 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { count = length(var.nics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % 4) + network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id @@ -269,7 +269,7 @@ resource "azurerm_network_interface_backend_address_pool_association" "lbbackend resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % 4) + network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id @@ -363,7 +363,7 @@ resource "azurerm_network_interface" "nics" { name = "${var.talos_cluster_name}-config-${count.index}" subnet_id = azurerm_subnet.talossubnet.id private_ip_address = element(var.nics, count.index) - public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % 4) + public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % ( length(var.nics) + 1 ) ) } } @@ -393,14 +393,14 @@ resource "azurerm_availability_set" "talosas" { } resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { - count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % 4) + count = length(var.nics) + network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) network_security_group_id = azurerm_network_security_group.talossg.id } resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % 4) + network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics)+ 1) ) network_security_group_id = azurerm_network_security_group.talossg.id } From 8ca3ac8f0089be2cfcf7ec6ce86179cd375e8bdc Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 26 Dec 2023 23:51:14 +0530 Subject: [PATCH 082/107] Fix health probes --- azure/talos/main.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index f76f8f5..f565d64 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -285,21 +285,21 @@ resource "azurerm_lb_probe" "talos-lb-health" { resource "azurerm_lb_probe" "traefik-443-health" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-443-health" - port = 443 + port = var.traefikhttpsport protocol = "Tcp" } resource "azurerm_lb_probe" "traefik-80-health" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-80-health" - port = 80 + port = var.traefikhttpport protocol = "Tcp" } resource "azurerm_lb_probe" "nats-4222-health" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-nats-4222-health" - port = 4222 + port = var.nats_client_port protocol = "Tcp" } From a928cc986de8c9e84a7bba9dd066c9aac20faa64 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 26 Dec 2023 23:55:01 +0530 Subject: [PATCH 083/107] Fix nats client port for azure security group --- azure/talos/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 8797613..517727d 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -189,7 +189,7 @@ resource "azurerm_network_security_rule" "nats" { network_security_group_name = azurerm_network_security_group.talossg.name priority = "1007" source_port_range = "*" - destination_port_ranges = [ "${var.traefikhttpport}" ] + destination_port_ranges = [ "${var.nats_client_port}" ] source_address_prefix = "*" destination_address_prefix = "*" direction = "Inbound" From d98ebd12777069df3caf38e954199fe0e07bdf81 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sun, 21 Jan 2024 19:14:49 +0530 Subject: [PATCH 084/107] change disk type to ssd --- azure/talos/main.tf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 517727d..1b69192 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -488,7 +488,7 @@ resource "azurerm_virtual_machine" "talosmaster" { name = "${var.talos_cluster_name}-talosmaster-${count.index}" caching = "ReadWrite" create_option = "FromImage" - managed_disk_type = "Standard_LRS" + managed_disk_type = "StandardSSD_LRS" disk_size_gb = "100" } @@ -530,6 +530,7 @@ resource "azurerm_virtual_machine" "talosworker" { disk_size_gb = "200" lun = "1" create_option = "Empty" + managed_disk_type = "StandardSSD_LRS" } storage_image_reference { id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" @@ -539,7 +540,7 @@ resource "azurerm_virtual_machine" "talosworker" { name = "${var.talos_cluster_name}-talosworker-${count.index}" caching = "ReadWrite" create_option = "FromImage" - managed_disk_type = "Standard_LRS" + managed_disk_type = "StandardSSD_LRS" disk_size_gb = "100" } availability_set_id = azurerm_availability_set.talosas.id From 3b988284d08bb37909ec864a9f566066208e7b75 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:26:04 +0530 Subject: [PATCH 085/107] Fix clientip lb rule --- azure/talos/main.tf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 1b69192..412318d 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -326,7 +326,6 @@ resource "azurerm_lb_rule" "talos-6443" { backend_port = 6443 frontend_ip_configuration_name = "${var.talos_cluster_name}-talosfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.id ] - probe_id = azurerm_lb_probe.talos-lb-health.id } @@ -336,6 +335,7 @@ resource "azurerm_lb_rule" "traefik-443" { protocol = "Tcp" frontend_port = 443 backend_port = var.traefikhttpsport + load_distribution = "SourceIPProtocol" frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] @@ -348,6 +348,7 @@ resource "azurerm_lb_rule" "traefik-80" { protocol = "Tcp" frontend_port = 80 backend_port = var.traefikhttpport + load_distribution = "SourceIPProtocol" frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] From 3bec1ddede0dbd6d3974014fed7135ae6326f583 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:22:57 +0530 Subject: [PATCH 086/107] adding scaling capapbility --- azure/talos/main.tf | 356 +++++++++++++++++++++++++++----------------- azure/talos/vars.tf | 20 ++- 2 files changed, 236 insertions(+), 140 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 1b69192..581a055 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -199,15 +199,15 @@ resource "azurerm_network_security_rule" "nats" { } -resource "azurerm_public_ip" "talos-public-ip" { - count = length(var.publicipname) - name = "${var.talos_cluster_name}-publicip-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - allocation_method = "Static" - location = var.region - sku = "Standard" +# resource "azurerm_public_ip" "talos-public-ip" { +# count = length(var.publicipname) +# name = "${var.talos_cluster_name}-publicip-${count.index}" +# resource_group_name = azurerm_resource_group.talosrg.name +# allocation_method = "Static" +# location = var.region +# sku = "Standard" -} +# } resource "azurerm_public_ip" "talos-public-ip-lb" { name = "${var.talos_cluster_name}-talos-public-ip-lb" @@ -274,21 +274,21 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { depends_on = [ azurerm_lb.traefiklb ] } -resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { - count = length(var.nics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) - ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" - backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id +# resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { +# count = length(var.nics) +# network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) +# ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" +# backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id -} +# } -resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { - count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) - ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" - backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id +# resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { +# count = length(var.workernics) +# network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) +# ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" +# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id -} +# } resource "azurerm_lb_probe" "talos-lb-health" { loadbalancer_id = azurerm_lb.taloslb.id @@ -366,38 +366,38 @@ resource "azurerm_lb_rule" "nats-4222" { probe_id = azurerm_lb_probe.nats-4222-health.id } -resource "azurerm_network_interface" "nics" { - count = length(var.nics) - name = "${var.talos_cluster_name}-nic-${count.index}" - location = var.region - resource_group_name = azurerm_resource_group.talosrg.name +# resource "azurerm_network_interface" "nics" { +# count = length(var.nics) +# name = "${var.talos_cluster_name}-nic-${count.index}" +# location = var.region +# resource_group_name = azurerm_resource_group.talosrg.name - ip_configuration { - private_ip_address_allocation = "Dynamic" - name = "${var.talos_cluster_name}-config-${count.index}" - subnet_id = azurerm_subnet.talossubnet.id - private_ip_address = element(var.nics, count.index) - public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % ( length(var.nics) + 1 ) ) +# ip_configuration { +# private_ip_address_allocation = "Dynamic" +# name = "${var.talos_cluster_name}-config-${count.index}" +# subnet_id = azurerm_subnet.talossubnet.id +# private_ip_address = element(var.nics, count.index) +# public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % ( length(var.nics) + 1 ) ) - } -} +# } +# } -resource "azurerm_network_interface" "workernics" { - count = length(var.workernics) - name = "${var.talos_cluster_name}-workernic-${count.index}" - location = var.region - resource_group_name = azurerm_resource_group.talosrg.name +# resource "azurerm_network_interface" "workernics" { +# count = length(var.workernics) +# name = "${var.talos_cluster_name}-workernic-${count.index}" +# location = var.region +# resource_group_name = azurerm_resource_group.talosrg.name - ip_configuration { - private_ip_address_allocation = "Dynamic" - name = "${var.talos_cluster_name}-workerconfig-${count.index}" - subnet_id = azurerm_subnet.talossubnet.id - private_ip_address = element(var.nics, count.index) +# ip_configuration { +# private_ip_address_allocation = "Dynamic" +# name = "${var.talos_cluster_name}-workerconfig-${count.index}" +# subnet_id = azurerm_subnet.talossubnet.id +# private_ip_address = element(var.nics, count.index) - } -} +# } +# } resource "azurerm_availability_set" "talosas" { name = "${var.talos_cluster_name}-talosas" @@ -407,17 +407,17 @@ resource "azurerm_availability_set" "talosas" { } -resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { - count = length(var.nics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) - network_security_group_id = azurerm_network_security_group.talossg.id -} +# resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { +# count = length(var.nics) +# network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) +# network_security_group_id = azurerm_network_security_group.talossg.id +# } -resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { - count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics)+ 1) ) - network_security_group_id = azurerm_network_security_group.talossg.id -} +# resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { +# count = length(var.workernics) +# network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics)+ 1) ) +# network_security_group_id = azurerm_network_security_group.talossg.id +# } resource "azurerm_nat_gateway" "talosnat" { name = "${var.talos_cluster_name}-worker-node-nat" @@ -456,119 +456,199 @@ data "local_file" "workerfile" { depends_on = [ null_resource.createtalosconfig ] } -resource "azurerm_virtual_machine" "talosmaster" { - count = length(var.mastercount) - name = "${var.talos_cluster_name}-talosmaster-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - location = var.region - vm_size = var.instancetype - boot_diagnostics { - enabled = true - storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" - } - os_profile { - computer_name = "${var.talos_cluster_name}-talosmaster-${count.index}" - admin_username = "talos" - admin_password = "Talos@1234" - custom_data = data.local_file.controllerfile.content - } +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-scalable" { + name = var.masterscalesetname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = 1 + platform_fault_domain_count = 1 + sku_name = var.instancetype -# storage_data_disk { -# name = "talosstoragedata" -# disk_size_gb = "100" -# lun = "1" -# create_option = "Empty" -# } - storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" - } - storage_os_disk { - name = "${var.talos_cluster_name}-talosmaster-${count.index}" - caching = "ReadWrite" - create_option = "FromImage" - managed_disk_type = "StandardSSD_LRS" - disk_size_gb = "100" + os_profile { + custom_data = data.local_file.controllerfile.content + } + network_interface { + name = "${var.masterscalesetname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.masterscalesetname}-ip-master" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + public_ip_address { + name = "t${var.masterscalesetname}-public-ip-master" + } } + } + + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } - os_profile_linux_config { - disable_password_authentication = false - } + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } + + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} - network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] - availability_set_id = azurerm_availability_set.talosas.id - delete_os_disk_on_termination = true - depends_on = [ azurerm_availability_set.talosas ] +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { + name = var.masterstaticname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = var.staticmasternodecount + platform_fault_domain_count = 1 + sku_name = var.instancetype + os_profile { + custom_data = data.local_file.controllerfile.content + } + network_interface { + name = "${var.masterstaticname}-network-Interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.masterstaticname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + public_ip_address { + name = "${var.masterstaticname}-public-ip" + } + load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.talosbe.id" ] + } + } -} + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } -resource "azurerm_virtual_machine" "talosworker" { - count = length(var.workercount) - name = "${var.talos_cluster_name}-talosworker-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - location = var.region - vm_size = var.instancetype + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } - boot_diagnostics { - enabled = true - storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" - } - - os_profile { - computer_name = "${var.talos_cluster_name}-talosworker-${count.index}" - admin_username = "talos" - admin_password = "Talos@1234" - custom_data = data.local_file.workerfile.content - } + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} - storage_data_disk { - name = "datadisk-talosworker${count.index}" - disk_size_gb = "200" - lun = "1" - create_option = "Empty" - managed_disk_type = "StandardSSD_LRS" - } - storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-static" { + name = var.workerstaticname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = var.staticworkernodecount + platform_fault_domain_count = 1 + sku_name = var.instancetype + + network_interface { + name = "${var.workerstaticname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.workerstaticname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id } + } + + os_profile { + custom_data = data.local_file.workerfile.content + } + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } - storage_os_disk { - name = "${var.talos_cluster_name}-talosworker-${count.index}" - caching = "ReadWrite" - create_option = "FromImage" - managed_disk_type = "StandardSSD_LRS" - disk_size_gb = "100" - } - availability_set_id = azurerm_availability_set.talosas.id - network_interface_ids = [ element(azurerm_network_interface.workernics[*].id, count.index ) ] + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } - os_profile_linux_config { - disable_password_authentication = false + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} + +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" { + name = var.wokerscalesetname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = 1 + platform_fault_domain_count = 1 + sku_name = var.instancetype + + network_interface { + name = "${var.wokerscalesetname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.wokerscalesetname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.traefikbe.id" ] } - delete_os_disk_on_termination = true - - depends_on = [ azurerm_availability_set.talosas ] + } -} + os_profile { + custom_data = data.local_file.workerfile.content + } + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } + + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address} ${var.talosctlfolderpath}" + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip-lb.ip_address} ${var.talosctlfolderpath}" } provisioner "local-exec" { - command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath} --nodes ${azurerm_public_ip.talos-public-ip[0].ip_address}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath} --nodes ${azurerm_public_ip.talos-public-ip-lb.ip_address}" } provisioner "local-exec" { command = "echo 'LoadBalancerHost: \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } - depends_on = [ azurerm_virtual_machine.talosmaster ] + depends_on = [ azurerm_orchestrated_virtual_machine_scale_set.talosmaster-static ] } diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 3c908b2..f32febd 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -2,12 +2,12 @@ variable "region" { description = "Azure Region to deploy the resources" } -variable "mastercount" { +variable "staticmasternodecount" { description = "talos master node count" default = 3 } -variable "workercount" { +variable "staticworkernodecount" { description = "talos worker node count" default = 3 } @@ -69,3 +69,19 @@ variable "talos_imagecont_name" { variable "talos_cluster_name" { description = "talosvnet name" } + +variable "wokerscalesetname" { + description = "talosworkerscaleset name" +} + +variable "masterstaticname" { + description = "talos master static name" +} + +variable "workerstaticname" { + description = "talos worker static name" +} + +variable "masterscalesetname" { + description = "talos master scaleset name" +} \ No newline at end of file From fbdaf3670da558d37db9074f7ed7a7a88c288f5a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:22:57 +0530 Subject: [PATCH 087/107] adding scaling capapbility --- azure/talos/main.tf | 356 +++++++++++++++++++++++++++----------------- azure/talos/vars.tf | 20 ++- 2 files changed, 236 insertions(+), 140 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 1b69192..581a055 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -199,15 +199,15 @@ resource "azurerm_network_security_rule" "nats" { } -resource "azurerm_public_ip" "talos-public-ip" { - count = length(var.publicipname) - name = "${var.talos_cluster_name}-publicip-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - allocation_method = "Static" - location = var.region - sku = "Standard" +# resource "azurerm_public_ip" "talos-public-ip" { +# count = length(var.publicipname) +# name = "${var.talos_cluster_name}-publicip-${count.index}" +# resource_group_name = azurerm_resource_group.talosrg.name +# allocation_method = "Static" +# location = var.region +# sku = "Standard" -} +# } resource "azurerm_public_ip" "talos-public-ip-lb" { name = "${var.talos_cluster_name}-talos-public-ip-lb" @@ -274,21 +274,21 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { depends_on = [ azurerm_lb.traefiklb ] } -resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { - count = length(var.nics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) - ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" - backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id +# resource "azurerm_network_interface_backend_address_pool_association" "lbbackendassociation" { +# count = length(var.nics) +# network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) +# ip_configuration_name = "${var.talos_cluster_name}-config-${count.index}" +# backend_address_pool_id = azurerm_lb_backend_address_pool.talosbe.id -} +# } -resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { - count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) - ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" - backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id +# resource "azurerm_network_interface_backend_address_pool_association" "traefikbeassociation" { +# count = length(var.workernics) +# network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) +# ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" +# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id -} +# } resource "azurerm_lb_probe" "talos-lb-health" { loadbalancer_id = azurerm_lb.taloslb.id @@ -366,38 +366,38 @@ resource "azurerm_lb_rule" "nats-4222" { probe_id = azurerm_lb_probe.nats-4222-health.id } -resource "azurerm_network_interface" "nics" { - count = length(var.nics) - name = "${var.talos_cluster_name}-nic-${count.index}" - location = var.region - resource_group_name = azurerm_resource_group.talosrg.name +# resource "azurerm_network_interface" "nics" { +# count = length(var.nics) +# name = "${var.talos_cluster_name}-nic-${count.index}" +# location = var.region +# resource_group_name = azurerm_resource_group.talosrg.name - ip_configuration { - private_ip_address_allocation = "Dynamic" - name = "${var.talos_cluster_name}-config-${count.index}" - subnet_id = azurerm_subnet.talossubnet.id - private_ip_address = element(var.nics, count.index) - public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % ( length(var.nics) + 1 ) ) +# ip_configuration { +# private_ip_address_allocation = "Dynamic" +# name = "${var.talos_cluster_name}-config-${count.index}" +# subnet_id = azurerm_subnet.talossubnet.id +# private_ip_address = element(var.nics, count.index) +# public_ip_address_id = element(azurerm_public_ip.talos-public-ip[*].id, count.index % ( length(var.nics) + 1 ) ) - } -} +# } +# } -resource "azurerm_network_interface" "workernics" { - count = length(var.workernics) - name = "${var.talos_cluster_name}-workernic-${count.index}" - location = var.region - resource_group_name = azurerm_resource_group.talosrg.name +# resource "azurerm_network_interface" "workernics" { +# count = length(var.workernics) +# name = "${var.talos_cluster_name}-workernic-${count.index}" +# location = var.region +# resource_group_name = azurerm_resource_group.talosrg.name - ip_configuration { - private_ip_address_allocation = "Dynamic" - name = "${var.talos_cluster_name}-workerconfig-${count.index}" - subnet_id = azurerm_subnet.talossubnet.id - private_ip_address = element(var.nics, count.index) +# ip_configuration { +# private_ip_address_allocation = "Dynamic" +# name = "${var.talos_cluster_name}-workerconfig-${count.index}" +# subnet_id = azurerm_subnet.talossubnet.id +# private_ip_address = element(var.nics, count.index) - } -} +# } +# } resource "azurerm_availability_set" "talosas" { name = "${var.talos_cluster_name}-talosas" @@ -407,17 +407,17 @@ resource "azurerm_availability_set" "talosas" { } -resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { - count = length(var.nics) - network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) - network_security_group_id = azurerm_network_security_group.talossg.id -} +# resource "azurerm_network_interface_security_group_association" "networkinterface_sg_association" { +# count = length(var.nics) +# network_interface_id = element( azurerm_network_interface.nics[*].id, count.index % (length(var.nics) + 1) ) +# network_security_group_id = azurerm_network_security_group.talossg.id +# } -resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { - count = length(var.workernics) - network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics)+ 1) ) - network_security_group_id = azurerm_network_security_group.talossg.id -} +# resource "azurerm_network_interface_security_group_association" "networkinterface_worker_sg_association" { +# count = length(var.workernics) +# network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics)+ 1) ) +# network_security_group_id = azurerm_network_security_group.talossg.id +# } resource "azurerm_nat_gateway" "talosnat" { name = "${var.talos_cluster_name}-worker-node-nat" @@ -456,119 +456,199 @@ data "local_file" "workerfile" { depends_on = [ null_resource.createtalosconfig ] } -resource "azurerm_virtual_machine" "talosmaster" { - count = length(var.mastercount) - name = "${var.talos_cluster_name}-talosmaster-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - location = var.region - vm_size = var.instancetype - boot_diagnostics { - enabled = true - storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" - } - os_profile { - computer_name = "${var.talos_cluster_name}-talosmaster-${count.index}" - admin_username = "talos" - admin_password = "Talos@1234" - custom_data = data.local_file.controllerfile.content - } +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-scalable" { + name = var.masterscalesetname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = 1 + platform_fault_domain_count = 1 + sku_name = var.instancetype -# storage_data_disk { -# name = "talosstoragedata" -# disk_size_gb = "100" -# lun = "1" -# create_option = "Empty" -# } - storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" - } - storage_os_disk { - name = "${var.talos_cluster_name}-talosmaster-${count.index}" - caching = "ReadWrite" - create_option = "FromImage" - managed_disk_type = "StandardSSD_LRS" - disk_size_gb = "100" + os_profile { + custom_data = data.local_file.controllerfile.content + } + network_interface { + name = "${var.masterscalesetname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.masterscalesetname}-ip-master" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + public_ip_address { + name = "t${var.masterscalesetname}-public-ip-master" + } } + } + + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } - os_profile_linux_config { - disable_password_authentication = false - } + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } + + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} - network_interface_ids = [ element( azurerm_network_interface.nics[*].id, count.index ) ] - availability_set_id = azurerm_availability_set.talosas.id - delete_os_disk_on_termination = true - depends_on = [ azurerm_availability_set.talosas ] +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { + name = var.masterstaticname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = var.staticmasternodecount + platform_fault_domain_count = 1 + sku_name = var.instancetype + os_profile { + custom_data = data.local_file.controllerfile.content + } + network_interface { + name = "${var.masterstaticname}-network-Interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.masterstaticname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + public_ip_address { + name = "${var.masterstaticname}-public-ip" + } + load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.talosbe.id" ] + } + } -} + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } -resource "azurerm_virtual_machine" "talosworker" { - count = length(var.workercount) - name = "${var.talos_cluster_name}-talosworker-${count.index}" - resource_group_name = azurerm_resource_group.talosrg.name - location = var.region - vm_size = var.instancetype + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } - boot_diagnostics { - enabled = true - storage_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" - } - - os_profile { - computer_name = "${var.talos_cluster_name}-talosworker-${count.index}" - admin_username = "talos" - admin_password = "Talos@1234" - custom_data = data.local_file.workerfile.content - } + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} - storage_data_disk { - name = "datadisk-talosworker${count.index}" - disk_size_gb = "200" - lun = "1" - create_option = "Empty" - managed_disk_type = "StandardSSD_LRS" - } - storage_image_reference { - id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-static" { + name = var.workerstaticname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = var.staticworkernodecount + platform_fault_domain_count = 1 + sku_name = var.instancetype + + network_interface { + name = "${var.workerstaticname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.workerstaticname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id } + } + + os_profile { + custom_data = data.local_file.workerfile.content + } + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } - storage_os_disk { - name = "${var.talos_cluster_name}-talosworker-${count.index}" - caching = "ReadWrite" - create_option = "FromImage" - managed_disk_type = "StandardSSD_LRS" - disk_size_gb = "100" - } - availability_set_id = azurerm_availability_set.talosas.id - network_interface_ids = [ element(azurerm_network_interface.workernics[*].id, count.index ) ] + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } - os_profile_linux_config { - disable_password_authentication = false + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} + +resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" { + name = var.wokerscalesetname + location = var.region + resource_group_name = azurerm_resource_group.talosrg.name + instances = 1 + platform_fault_domain_count = 1 + sku_name = var.instancetype + + network_interface { + name = "${var.wokerscalesetname}-network-interface" + primary = true + network_security_group_id = azurerm_network_security_group.talossg.id + + ip_configuration { + name = "${var.wokerscalesetname}-ip-conf" + primary = true + subnet_id = azurerm_subnet.talossubnet.id + load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.traefikbe.id" ] } - delete_os_disk_on_termination = true - - depends_on = [ azurerm_availability_set.talosas ] + } -} + os_profile { + custom_data = data.local_file.workerfile.content + } + os_disk { + caching = "ReadWrite" + storage_account_type = "StandardSSD_LRS" + } + data_disk { + lun = 1 + caching = "ReadWrite" + create_option = "Empty" + disk_size_gb = 100 + storage_account_type = "StandardSSD_LRS" + } + boot_diagnostics { + storage_account_uri = "https://${azurerm_storage_account.talosimagesa.name}.blob.core.windows.net" + } + + source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" +} resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { - command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip[0].ip_address} ${var.talosctlfolderpath}" + command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip-lb.ip_address} ${var.talosctlfolderpath}" } provisioner "local-exec" { - command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath} --nodes ${azurerm_public_ip.talos-public-ip[0].ip_address}" + command = "${var.talosctlfolderpath}/talosctl --talosconfig scripts/talosconfig kubeconfig ${var.configfolderpath} --nodes ${azurerm_public_ip.talos-public-ip-lb.ip_address}" } provisioner "local-exec" { command = "echo 'LoadBalancerHost: \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } - depends_on = [ azurerm_virtual_machine.talosmaster ] + depends_on = [ azurerm_orchestrated_virtual_machine_scale_set.talosmaster-static ] } diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 3c908b2..f32febd 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -2,12 +2,12 @@ variable "region" { description = "Azure Region to deploy the resources" } -variable "mastercount" { +variable "staticmasternodecount" { description = "talos master node count" default = 3 } -variable "workercount" { +variable "staticworkernodecount" { description = "talos worker node count" default = 3 } @@ -69,3 +69,19 @@ variable "talos_imagecont_name" { variable "talos_cluster_name" { description = "talosvnet name" } + +variable "wokerscalesetname" { + description = "talosworkerscaleset name" +} + +variable "masterstaticname" { + description = "talos master static name" +} + +variable "workerstaticname" { + description = "talos worker static name" +} + +variable "masterscalesetname" { + description = "talos master scaleset name" +} \ No newline at end of file From c183ea10dd5e6daa5194e37d931ae7a560512521 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:37:04 +0530 Subject: [PATCH 088/107] improvements for scaling --- azure/talos/main.tf | 59 ++++++++++++++++++++++++++++++++++++--------- azure/talos/vars.tf | 4 +++ 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index e32256e..d52c687 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.0.0" + version = ">=3.2.1" } } } @@ -286,7 +286,7 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { # count = length(var.workernics) # network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) # ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" -# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id +# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe. # } @@ -297,6 +297,13 @@ resource "azurerm_lb_probe" "talos-lb-health" { protocol = "Tcp" } +resource "azurerm_lb_probe" "talos-api-lb-health" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "${var.talos_cluster_name}-talos-api-lb-health" + port = 50000 + protocol = "Tcp" +} + resource "azurerm_lb_probe" "traefik-443-health" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-443-health" @@ -329,6 +336,17 @@ resource "azurerm_lb_rule" "talos-6443" { probe_id = azurerm_lb_probe.talos-lb-health.id } +resource "azurerm_lb_rule" "talos-50000" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "${var.talos_cluster_name}-talos-50000" + protocol = "Tcp" + frontend_port = 50000 + backend_port = 50000 + frontend_ip_configuration_name = "${var.talos_cluster_name}-talosfe" + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.id ] + probe_id = azurerm_lb_probe.talos-api-lb-health.id +} + resource "azurerm_lb_rule" "traefik-443" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-443" @@ -468,7 +486,12 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-scalable" os_profile { - custom_data = data.local_file.controllerfile.content + custom_data = data.local_file.controllerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } network_interface { name = "${var.masterscalesetname}-network-interface" @@ -513,10 +536,6 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { platform_fault_domain_count = 1 sku_name = var.instancetype - - os_profile { - custom_data = data.local_file.controllerfile.content - } network_interface { name = "${var.masterstaticname}-network-Interface" primary = true @@ -529,10 +548,18 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { public_ip_address { name = "${var.masterstaticname}-public-ip" } - load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.talosbe.id" ] + load_balancer_backend_address_pool_ids = [ "/subscriptions/${var.subscription_id}/resourceGroups/${var.talosrgname}/providers/Microsoft.Network/loadBalancers/${azurerm_lb.taloslb.name}/backendAddressPools/${azurerm_lb_backend_address_pool.talosbe.name}" ] } } + os_profile { + custom_data = data.local_file.controllerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } + } os_disk { caching = "ReadWrite" storage_account_type = "StandardSSD_LRS" @@ -573,7 +600,12 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-static" { } os_profile { - custom_data = data.local_file.workerfile.content + custom_data = data.local_file.workerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } os_disk { caching = "ReadWrite" @@ -611,12 +643,17 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" name = "${var.wokerscalesetname}-ip-conf" primary = true subnet_id = azurerm_subnet.talossubnet.id - load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.traefikbe.id" ] + load_balancer_backend_address_pool_ids = [ "/subscriptions/${var.subscription_id}/resourceGroups/${var.talosrgname}/providers/Microsoft.Network/loadBalancers/${azurerm_lb.traefiklb.name}/backendAddressPools/${azurerm_lb_backend_address_pool.traefikbe.name}" ] } } os_profile { - custom_data = data.local_file.workerfile.content + custom_data = data.local_file.workerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } os_disk { caching = "ReadWrite" diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index f32febd..279a114 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -84,4 +84,8 @@ variable "workerstaticname" { variable "masterscalesetname" { description = "talos master scaleset name" +} + +variable "subscription_id" { + description = "subscription id" } \ No newline at end of file From 5c3cc16f4528c1006e0e80764b0b3877161f9ed5 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:37:04 +0530 Subject: [PATCH 089/107] improvements for scaling --- azure/talos/main.tf | 59 ++++++++++++++++++++++++++++++++++++--------- azure/talos/vars.tf | 4 +++ 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index e32256e..d52c687 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.0.0" + version = ">=3.2.1" } } } @@ -286,7 +286,7 @@ resource "azurerm_lb_backend_address_pool" "traefikbe" { # count = length(var.workernics) # network_interface_id = element( azurerm_network_interface.workernics[*].id, count.index % (length(var.workernics) + 1) ) # ip_configuration_name = "${var.talos_cluster_name}-workerconfig-${count.index}" -# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe.id +# backend_address_pool_id = azurerm_lb_backend_address_pool.traefikbe. # } @@ -297,6 +297,13 @@ resource "azurerm_lb_probe" "talos-lb-health" { protocol = "Tcp" } +resource "azurerm_lb_probe" "talos-api-lb-health" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "${var.talos_cluster_name}-talos-api-lb-health" + port = 50000 + protocol = "Tcp" +} + resource "azurerm_lb_probe" "traefik-443-health" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-443-health" @@ -329,6 +336,17 @@ resource "azurerm_lb_rule" "talos-6443" { probe_id = azurerm_lb_probe.talos-lb-health.id } +resource "azurerm_lb_rule" "talos-50000" { + loadbalancer_id = azurerm_lb.taloslb.id + name = "${var.talos_cluster_name}-talos-50000" + protocol = "Tcp" + frontend_port = 50000 + backend_port = 50000 + frontend_ip_configuration_name = "${var.talos_cluster_name}-talosfe" + backend_address_pool_ids = [ azurerm_lb_backend_address_pool.talosbe.id ] + probe_id = azurerm_lb_probe.talos-api-lb-health.id +} + resource "azurerm_lb_rule" "traefik-443" { loadbalancer_id = azurerm_lb.traefiklb.id name = "${var.talos_cluster_name}-traefik-443" @@ -468,7 +486,12 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-scalable" os_profile { - custom_data = data.local_file.controllerfile.content + custom_data = data.local_file.controllerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } network_interface { name = "${var.masterscalesetname}-network-interface" @@ -513,10 +536,6 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { platform_fault_domain_count = 1 sku_name = var.instancetype - - os_profile { - custom_data = data.local_file.controllerfile.content - } network_interface { name = "${var.masterstaticname}-network-Interface" primary = true @@ -529,10 +548,18 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosmaster-static" { public_ip_address { name = "${var.masterstaticname}-public-ip" } - load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.talosbe.id" ] + load_balancer_backend_address_pool_ids = [ "/subscriptions/${var.subscription_id}/resourceGroups/${var.talosrgname}/providers/Microsoft.Network/loadBalancers/${azurerm_lb.taloslb.name}/backendAddressPools/${azurerm_lb_backend_address_pool.talosbe.name}" ] } } + os_profile { + custom_data = data.local_file.controllerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } + } os_disk { caching = "ReadWrite" storage_account_type = "StandardSSD_LRS" @@ -573,7 +600,12 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-static" { } os_profile { - custom_data = data.local_file.workerfile.content + custom_data = data.local_file.workerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } os_disk { caching = "ReadWrite" @@ -611,12 +643,17 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" name = "${var.wokerscalesetname}-ip-conf" primary = true subnet_id = azurerm_subnet.talossubnet.id - load_balancer_backend_address_pool_ids = [ "azurerm_lb_backend_address_pool.traefikbe.id" ] + load_balancer_backend_address_pool_ids = [ "/subscriptions/${var.subscription_id}/resourceGroups/${var.talosrgname}/providers/Microsoft.Network/loadBalancers/${azurerm_lb.traefiklb.name}/backendAddressPools/${azurerm_lb_backend_address_pool.traefikbe.name}" ] } } os_profile { - custom_data = data.local_file.workerfile.content + custom_data = data.local_file.workerfile.content_base64 + linux_configuration { + admin_username = "talos" + admin_password = "Talos@123" + disable_password_authentication = false + } } os_disk { caching = "ReadWrite" diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index f32febd..279a114 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -84,4 +84,8 @@ variable "workerstaticname" { variable "masterscalesetname" { description = "talos master scaleset name" +} + +variable "subscription_id" { + description = "subscription id" } \ No newline at end of file From 1148bf4400f5d2d1230790bf508447e6fade6cd2 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:18:49 +0530 Subject: [PATCH 090/107] Fix Scaling LB --- azure/talos/main.tf | 4 +++- azure/talos/scripts/talosconfiggen.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index d52c687..70db669 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -674,6 +674,8 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } + + resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip-lb.ip_address} ${var.talosctlfolderpath}" @@ -687,6 +689,6 @@ resource "null_resource" "bootstrap_etcd" { command = "echo 'LoadBalancerHost: \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } depends_on = [ azurerm_orchestrated_virtual_machine_scale_set.talosmaster-static ] - + } diff --git a/azure/talos/scripts/talosconfiggen.sh b/azure/talos/scripts/talosconfiggen.sh index f87c01a..30c9cfe 100644 --- a/azure/talos/scripts/talosconfiggen.sh +++ b/azure/talos/scripts/talosconfiggen.sh @@ -46,7 +46,7 @@ echo ${dnsname} echo ${port} echo ${talosctlpath} -${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --config-patch '[{"op": "add", "path": "/machine/certSANs", "value": ['${dnsname}']}]' --force ${talosctlpath}/talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then From b85ca3ed3303ab4484cb4ff26cfedd0f3e141a1a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:18:49 +0530 Subject: [PATCH 091/107] Fix Scaling LB --- azure/talos/main.tf | 4 +++- azure/talos/scripts/talosconfiggen.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index d52c687..70db669 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -674,6 +674,8 @@ resource "azurerm_orchestrated_virtual_machine_scale_set" "talosworker-scalable" source_image_id = "/subscriptions/7bccafd3-c548-4b45-837d-fb7dc81167b6/resourceGroups/talos-image/providers/Microsoft.Compute/images/talos" } + + resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { command = "/bin/bash scripts/bootstrapetcd.sh ${azurerm_public_ip.talos-public-ip-lb.ip_address} ${var.talosctlfolderpath}" @@ -687,6 +689,6 @@ resource "null_resource" "bootstrap_etcd" { command = "echo 'LoadBalancerHost: \"${azurerm_public_ip.talos-public-ip-traefik.ip_address}\"' > ${var.configfolderpath}/capten-lb-endpoint.yaml" } depends_on = [ azurerm_orchestrated_virtual_machine_scale_set.talosmaster-static ] - + } diff --git a/azure/talos/scripts/talosconfiggen.sh b/azure/talos/scripts/talosconfiggen.sh index f87c01a..30c9cfe 100644 --- a/azure/talos/scripts/talosconfiggen.sh +++ b/azure/talos/scripts/talosconfiggen.sh @@ -46,7 +46,7 @@ echo ${dnsname} echo ${port} echo ${talosctlpath} -${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --force +${talosctlpath}/talosctl gen config talosconfig-userdata https://${dnsname}:${port} --with-examples=false --with-docs=false --output-dir scripts/ --config-patch @scripts/patch.yaml --config-patch '[{"op": "add", "path": "/machine/certSANs", "value": ['${dnsname}']}]' --force ${talosctlpath}/talosctl validate --config scripts/controlplane.yaml --mode cloud if [ $? -eq 1 ] then From 0f3bfc4bd3928d1e71549019fa403109e73e2a95 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:39:13 +0530 Subject: [PATCH 092/107] Store tfstate in azure storageaccount --- azure/talos/main.tf | 6 ++++++ azure/talos/vars.tf | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 70db669..9a04e86 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -5,6 +5,12 @@ terraform { version = ">=3.2.1" } } + backend "azurerm" { + resource_group_name = "captentfstate" + storage_account_name = "captentfstate20050" + container_name = "captentfstate" + key = "terraform.tfstate" + } } provider "azurerm" { diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 279a114..03fa499 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -88,4 +88,17 @@ variable "masterscalesetname" { variable "subscription_id" { description = "subscription id" +} + +variable "tfstatergname" { + description = "resourcegroup where tfstate to be stored" +} + +variable "tfstatesaname" { + description = "storage account name of tfstate" + +} + +variable "tfstatecontname" { + description = "tfstate storage account container name" } \ No newline at end of file From be5d36bcb25702e0700f4f3531db4ab8c19d3b1a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:39:13 +0530 Subject: [PATCH 093/107] Store tfstate in azure storageaccount --- azure/talos/main.tf | 6 ++++++ azure/talos/vars.tf | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 70db669..9a04e86 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -5,6 +5,12 @@ terraform { version = ">=3.2.1" } } + backend "azurerm" { + resource_group_name = "captentfstate" + storage_account_name = "captentfstate20050" + container_name = "captentfstate" + key = "terraform.tfstate" + } } provider "azurerm" { diff --git a/azure/talos/vars.tf b/azure/talos/vars.tf index 279a114..03fa499 100644 --- a/azure/talos/vars.tf +++ b/azure/talos/vars.tf @@ -88,4 +88,17 @@ variable "masterscalesetname" { variable "subscription_id" { description = "subscription id" +} + +variable "tfstatergname" { + description = "resourcegroup where tfstate to be stored" +} + +variable "tfstatesaname" { + description = "storage account name of tfstate" + +} + +variable "tfstatecontname" { + description = "tfstate storage account container name" } \ No newline at end of file From b20c7c43bd35682794a0b9f7205dc6adf594db98 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:11:54 +0530 Subject: [PATCH 094/107] Fix ZTP issue and change backend config --- aws/talos/main.tf | 44 ++++++++++++++++++++++---------------------- azure/talos/main.tf | 42 +++++++++++++++++++----------------------- 2 files changed, 41 insertions(+), 45 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index f4d46bb..03638b8 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -197,14 +197,14 @@ resource "aws_lb_target_group" "talos-tg" { } -resource "aws_lb_target_group" "traefik-tg-80" { - name = var.traefik_tg_80_name - port = var.traefikhttpport - protocol = "TCP" - target_type = "ip" - vpc_id = module.vpc.vpc_id +# resource "aws_lb_target_group" "traefik-tg-80" { +# name = var.traefik_tg_80_name +# port = var.traefikhttpport +# protocol = "TCP" +# target_type = "ip" +# vpc_id = module.vpc.vpc_id -} +# } resource "aws_lb_target_group" "traefik-tg-443" { name = var.traefik_tg_443_name @@ -224,14 +224,14 @@ resource "aws_lb_target_group_attachment" "registertarget" { } -resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { +# resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { - count = var.workercount - target_group_arn = aws_lb_target_group.traefik-tg-80.arn - target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" - depends_on = [ aws_instance.talos_worker_instance ] +# count = var.workercount +# target_group_arn = aws_lb_target_group.traefik-tg-80.arn +# target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" +# depends_on = [ aws_instance.talos_worker_instance ] -} +# } resource "aws_lb_target_group_attachment" "registertarget-traefik-443" { @@ -283,16 +283,16 @@ resource "aws_alb_listener" "traefik-listener-443" { } -resource "aws_alb_listener" "traefik-listener-80" { - load_balancer_arn = aws_lb.traefik.arn - port = 80 - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.traefik-tg-80.arn - } +# resource "aws_alb_listener" "traefik-listener-80" { +# load_balancer_arn = aws_lb.traefik.arn +# port = 80 +# protocol = "TCP" +# default_action { +# type = "forward" +# target_group_arn = aws_lb_target_group.traefik-tg-80.arn +# } -} +# } resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 9a04e86..917e3b8 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -5,12 +5,8 @@ terraform { version = ">=3.2.1" } } - backend "azurerm" { - resource_group_name = "captentfstate" - storage_account_name = "captentfstate20050" - container_name = "captentfstate" - key = "terraform.tfstate" - } + backend "azurerm" {} + } provider "azurerm" { @@ -317,12 +313,12 @@ resource "azurerm_lb_probe" "traefik-443-health" { protocol = "Tcp" } -resource "azurerm_lb_probe" "traefik-80-health" { - loadbalancer_id = azurerm_lb.traefiklb.id - name = "${var.talos_cluster_name}-traefik-80-health" - port = var.traefikhttpport - protocol = "Tcp" -} +# resource "azurerm_lb_probe" "traefik-80-health" { +# loadbalancer_id = azurerm_lb.traefiklb.id +# name = "${var.talos_cluster_name}-traefik-80-health" +# port = var.traefikhttpport +# protocol = "Tcp" +# } resource "azurerm_lb_probe" "nats-4222-health" { loadbalancer_id = azurerm_lb.traefiklb.id @@ -366,18 +362,18 @@ resource "azurerm_lb_rule" "traefik-443" { probe_id = azurerm_lb_probe.traefik-443-health.id } -resource "azurerm_lb_rule" "traefik-80" { - loadbalancer_id = azurerm_lb.traefiklb.id - name = "${var.talos_cluster_name}-traefik-80" - protocol = "Tcp" - frontend_port = 80 - backend_port = var.traefikhttpport - load_distribution = "SourceIPProtocol" - frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" - backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] +# resource "azurerm_lb_rule" "traefik-80" { +# loadbalancer_id = azurerm_lb.traefiklb.id +# name = "${var.talos_cluster_name}-traefik-80" +# protocol = "Tcp" +# frontend_port = 80 +# backend_port = var.traefikhttpport +# load_distribution = "SourceIPProtocol" +# frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" +# backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] - probe_id = azurerm_lb_probe.traefik-80-health.id -} +# probe_id = azurerm_lb_probe.traefik-80-health.id +# } resource "azurerm_lb_rule" "nats-4222" { loadbalancer_id = azurerm_lb.traefiklb.id From 568ca352fb6bb1d03f29b3ce5003ccaffce3686a Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:11:54 +0530 Subject: [PATCH 095/107] Fix ZTP issue and change backend config --- aws/talos/main.tf | 44 ++++++++++++++++++++++---------------------- azure/talos/main.tf | 42 +++++++++++++++++++----------------------- 2 files changed, 41 insertions(+), 45 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index f4d46bb..03638b8 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -197,14 +197,14 @@ resource "aws_lb_target_group" "talos-tg" { } -resource "aws_lb_target_group" "traefik-tg-80" { - name = var.traefik_tg_80_name - port = var.traefikhttpport - protocol = "TCP" - target_type = "ip" - vpc_id = module.vpc.vpc_id +# resource "aws_lb_target_group" "traefik-tg-80" { +# name = var.traefik_tg_80_name +# port = var.traefikhttpport +# protocol = "TCP" +# target_type = "ip" +# vpc_id = module.vpc.vpc_id -} +# } resource "aws_lb_target_group" "traefik-tg-443" { name = var.traefik_tg_443_name @@ -224,14 +224,14 @@ resource "aws_lb_target_group_attachment" "registertarget" { } -resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { +# resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { - count = var.workercount - target_group_arn = aws_lb_target_group.traefik-tg-80.arn - target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" - depends_on = [ aws_instance.talos_worker_instance ] +# count = var.workercount +# target_group_arn = aws_lb_target_group.traefik-tg-80.arn +# target_id = "${element(split(",", join(",", aws_instance.talos_worker_instance.*.private_ip)), count.index)}" +# depends_on = [ aws_instance.talos_worker_instance ] -} +# } resource "aws_lb_target_group_attachment" "registertarget-traefik-443" { @@ -283,16 +283,16 @@ resource "aws_alb_listener" "traefik-listener-443" { } -resource "aws_alb_listener" "traefik-listener-80" { - load_balancer_arn = aws_lb.traefik.arn - port = 80 - protocol = "TCP" - default_action { - type = "forward" - target_group_arn = aws_lb_target_group.traefik-tg-80.arn - } +# resource "aws_alb_listener" "traefik-listener-80" { +# load_balancer_arn = aws_lb.traefik.arn +# port = 80 +# protocol = "TCP" +# default_action { +# type = "forward" +# target_group_arn = aws_lb_target_group.traefik-tg-80.arn +# } -} +# } resource "null_resource" "bootstrap_etcd" { provisioner "local-exec" { diff --git a/azure/talos/main.tf b/azure/talos/main.tf index 9a04e86..917e3b8 100644 --- a/azure/talos/main.tf +++ b/azure/talos/main.tf @@ -5,12 +5,8 @@ terraform { version = ">=3.2.1" } } - backend "azurerm" { - resource_group_name = "captentfstate" - storage_account_name = "captentfstate20050" - container_name = "captentfstate" - key = "terraform.tfstate" - } + backend "azurerm" {} + } provider "azurerm" { @@ -317,12 +313,12 @@ resource "azurerm_lb_probe" "traefik-443-health" { protocol = "Tcp" } -resource "azurerm_lb_probe" "traefik-80-health" { - loadbalancer_id = azurerm_lb.traefiklb.id - name = "${var.talos_cluster_name}-traefik-80-health" - port = var.traefikhttpport - protocol = "Tcp" -} +# resource "azurerm_lb_probe" "traefik-80-health" { +# loadbalancer_id = azurerm_lb.traefiklb.id +# name = "${var.talos_cluster_name}-traefik-80-health" +# port = var.traefikhttpport +# protocol = "Tcp" +# } resource "azurerm_lb_probe" "nats-4222-health" { loadbalancer_id = azurerm_lb.traefiklb.id @@ -366,18 +362,18 @@ resource "azurerm_lb_rule" "traefik-443" { probe_id = azurerm_lb_probe.traefik-443-health.id } -resource "azurerm_lb_rule" "traefik-80" { - loadbalancer_id = azurerm_lb.traefiklb.id - name = "${var.talos_cluster_name}-traefik-80" - protocol = "Tcp" - frontend_port = 80 - backend_port = var.traefikhttpport - load_distribution = "SourceIPProtocol" - frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" - backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] +# resource "azurerm_lb_rule" "traefik-80" { +# loadbalancer_id = azurerm_lb.traefiklb.id +# name = "${var.talos_cluster_name}-traefik-80" +# protocol = "Tcp" +# frontend_port = 80 +# backend_port = var.traefikhttpport +# load_distribution = "SourceIPProtocol" +# frontend_ip_configuration_name = "${var.talos_cluster_name}-traefikfe" +# backend_address_pool_ids = [ azurerm_lb_backend_address_pool.traefikbe.id ] - probe_id = azurerm_lb_probe.traefik-80-health.id -} +# probe_id = azurerm_lb_probe.traefik-80-health.id +# } resource "azurerm_lb_rule" "nats-4222" { loadbalancer_id = azurerm_lb.traefiklb.id From faae7462682af8628e68910573f2834aed10ea13 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:46:13 +0530 Subject: [PATCH 096/107] Add scaling for aws --- aws/talos/main.tf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 03638b8..212e8e0 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -125,6 +125,11 @@ data "local_file" "workerfile" { depends_on = [ null_resource.createtalosconfig ] } +resource "aws_placement_group" "talosplacemnentgroup" { + name = "talosplacemnentgroup" + strategy = "cluster" +} + resource "aws_instance" talos_master_instance { count = var.mastercount From a86b55dd9ff0cc9f951777131cfc31e30ae2c3bd Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:46:13 +0530 Subject: [PATCH 097/107] Add scaling for aws --- aws/talos/main.tf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 03638b8..212e8e0 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -125,6 +125,11 @@ data "local_file" "workerfile" { depends_on = [ null_resource.createtalosconfig ] } +resource "aws_placement_group" "talosplacemnentgroup" { + name = "talosplacemnentgroup" + strategy = "cluster" +} + resource "aws_instance" talos_master_instance { count = var.mastercount From a139b627ea02905f9c012b32efdde5e0b3d0edb8 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:48:46 +0530 Subject: [PATCH 098/107] Add scaling for aws --- aws/talos/main.tf | 130 ++++++++++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 44 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 212e8e0..269e464 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -130,68 +130,110 @@ resource "aws_placement_group" "talosplacemnentgroup" { strategy = "cluster" } -resource "aws_instance" talos_master_instance { +resource "aws_launch_configuration" "talosmaster" { + name = "talos-master" + image_id = data.aws_ami.talos.id + instance_type = var.instance_type +} - count = var.mastercount +resource "aws_autoscaling_group" "talosmaster-static" { + name = "talosmaster-static" + max_size = 20 + min_size = var.mastercount + health_check_grace_period = 300 + health_check_type = "ELB" + desired_capacity = 4 + force_delete = true + placement_group = aws_placement_group.talosplacemnentgroup.id + launch_configuration = aws_launch_configuration.talosmaster.name - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" - user_data = data.local_file.controllerfile.content - associate_public_ip_address = true + timeouts { + delete = "15m" + } - root_block_device { - volume_size = 200 - } +} - depends_on = [ data.local_file.controllerfile ] +resource "aws_autoscaling_group" "talosmaster-scalable" { + name = "talosmaster-scalable" + max_size = 20 + min_size = var.mastercount + health_check_grace_period = 300 + health_check_type = "ELB" + desired_capacity = 4 + force_delete = true + placement_group = aws_placement_group.talosplacemnentgroup.id + launch_configuration = aws_launch_configuration.talosmaster.name - tags = { - Name = "talosmaster" - } + timeouts { + delete = "15m" + } } -resource "aws_instance" talos_worker_instance { + +# resource "aws_instance" talos_master_instance { + +# count = var.mastercount + +# ami = data.aws_ami.talos.id +# instance_type = var.instance_type +# monitoring = var.nodemonitoringenabled +# vpc_security_group_ids = [ module.security_group.security_group_id ] +# subnet_id = "${element(module.vpc.private_subnets, 0)}" + +# user_data = data.local_file.controllerfile.content +# associate_public_ip_address = true + +# root_block_device { +# volume_size = 200 +# } + +# depends_on = [ data.local_file.controllerfile ] + +# tags = { +# Name = "talosmaster" +# } + + +# } +# resource "aws_instance" talos_worker_instance { - count = var.workercount +# count = var.workercount - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" +# ami = data.aws_ami.talos.id +# instance_type = var.instance_type +# monitoring = var.nodemonitoringenabled +# vpc_security_group_ids = [ module.security_group.security_group_id ] +# subnet_id = "${element(module.vpc.private_subnets, 0)}" - user_data = data.local_file.workerfile.content - associate_public_ip_address = true +# user_data = data.local_file.workerfile.content +# associate_public_ip_address = true - depends_on = [ data.local_file.workerfile ] +# depends_on = [ data.local_file.workerfile ] - root_block_device { - volume_size = 200 - } - tags = { - Name = "talosworker" - } +# root_block_device { +# volume_size = 200 +# } +# tags = { +# Name = "talosworker" +# } -} +# } -resource "aws_ebs_volume" "ebs_volume" { - count = "${var.workercount}" - availability_zone = "${element(aws_instance.talos_master_instance.*.availability_zone, count.index)}" - size = "200" -} +# resource "aws_ebs_volume" "ebs_volume" { +# count = "${var.workercount}" +# availability_zone = "${element(aws_instance.talos_master_instance.*.availability_zone, count.index)}" +# size = "200" +# } -resource "aws_volume_attachment" "volume_attachement" { - count = "${var.workercount}" - volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}" - device_name = "/dev/sdd" - instance_id = "${element(aws_instance.talos_worker_instance.*.id, count.index)}" -} +# resource "aws_volume_attachment" "volume_attachement" { +# count = "${var.workercount}" +# volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}" +# device_name = "/dev/sdd" +# instance_id = "${element(aws_instance.talos_worker_instance.*.id, count.index)}" +# } resource "aws_lb_target_group" "talos-tg" { name = var.talostg From 0afcc59b9d7d72d3b46ce6ac823a3e8544d79e9c Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:48:46 +0530 Subject: [PATCH 099/107] Add scaling for aws --- aws/talos/main.tf | 130 ++++++++++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 44 deletions(-) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 212e8e0..269e464 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -130,68 +130,110 @@ resource "aws_placement_group" "talosplacemnentgroup" { strategy = "cluster" } -resource "aws_instance" talos_master_instance { +resource "aws_launch_configuration" "talosmaster" { + name = "talos-master" + image_id = data.aws_ami.talos.id + instance_type = var.instance_type +} - count = var.mastercount +resource "aws_autoscaling_group" "talosmaster-static" { + name = "talosmaster-static" + max_size = 20 + min_size = var.mastercount + health_check_grace_period = 300 + health_check_type = "ELB" + desired_capacity = 4 + force_delete = true + placement_group = aws_placement_group.talosplacemnentgroup.id + launch_configuration = aws_launch_configuration.talosmaster.name - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" - user_data = data.local_file.controllerfile.content - associate_public_ip_address = true + timeouts { + delete = "15m" + } - root_block_device { - volume_size = 200 - } +} - depends_on = [ data.local_file.controllerfile ] +resource "aws_autoscaling_group" "talosmaster-scalable" { + name = "talosmaster-scalable" + max_size = 20 + min_size = var.mastercount + health_check_grace_period = 300 + health_check_type = "ELB" + desired_capacity = 4 + force_delete = true + placement_group = aws_placement_group.talosplacemnentgroup.id + launch_configuration = aws_launch_configuration.talosmaster.name - tags = { - Name = "talosmaster" - } + timeouts { + delete = "15m" + } } -resource "aws_instance" talos_worker_instance { + +# resource "aws_instance" talos_master_instance { + +# count = var.mastercount + +# ami = data.aws_ami.talos.id +# instance_type = var.instance_type +# monitoring = var.nodemonitoringenabled +# vpc_security_group_ids = [ module.security_group.security_group_id ] +# subnet_id = "${element(module.vpc.private_subnets, 0)}" + +# user_data = data.local_file.controllerfile.content +# associate_public_ip_address = true + +# root_block_device { +# volume_size = 200 +# } + +# depends_on = [ data.local_file.controllerfile ] + +# tags = { +# Name = "talosmaster" +# } + + +# } +# resource "aws_instance" talos_worker_instance { - count = var.workercount +# count = var.workercount - ami = data.aws_ami.talos.id - instance_type = var.instance_type - monitoring = var.nodemonitoringenabled - vpc_security_group_ids = [ module.security_group.security_group_id ] - subnet_id = "${element(module.vpc.private_subnets, 0)}" +# ami = data.aws_ami.talos.id +# instance_type = var.instance_type +# monitoring = var.nodemonitoringenabled +# vpc_security_group_ids = [ module.security_group.security_group_id ] +# subnet_id = "${element(module.vpc.private_subnets, 0)}" - user_data = data.local_file.workerfile.content - associate_public_ip_address = true +# user_data = data.local_file.workerfile.content +# associate_public_ip_address = true - depends_on = [ data.local_file.workerfile ] +# depends_on = [ data.local_file.workerfile ] - root_block_device { - volume_size = 200 - } - tags = { - Name = "talosworker" - } +# root_block_device { +# volume_size = 200 +# } +# tags = { +# Name = "talosworker" +# } -} +# } -resource "aws_ebs_volume" "ebs_volume" { - count = "${var.workercount}" - availability_zone = "${element(aws_instance.talos_master_instance.*.availability_zone, count.index)}" - size = "200" -} +# resource "aws_ebs_volume" "ebs_volume" { +# count = "${var.workercount}" +# availability_zone = "${element(aws_instance.talos_master_instance.*.availability_zone, count.index)}" +# size = "200" +# } -resource "aws_volume_attachment" "volume_attachement" { - count = "${var.workercount}" - volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}" - device_name = "/dev/sdd" - instance_id = "${element(aws_instance.talos_worker_instance.*.id, count.index)}" -} +# resource "aws_volume_attachment" "volume_attachement" { +# count = "${var.workercount}" +# volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}" +# device_name = "/dev/sdd" +# instance_id = "${element(aws_instance.talos_worker_instance.*.id, count.index)}" +# } resource "aws_lb_target_group" "talos-tg" { name = var.talostg From 691b3439ad28306139abce67d71b236a051efab1 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 3 May 2024 00:32:22 +0530 Subject: [PATCH 100/107] Add lb for talos --- aws/talos/main.tf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 269e464..700655e 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -136,6 +136,16 @@ resource "aws_launch_configuration" "talosmaster" { instance_type = var.instance_type } +resource "aws_lb" "talosapi" { + name = "talosapi" + internal = false + load_balancer_type = "network" + subnets = [for subnet in aws_subnet.public : subnet.id] + + enable_deletion_protection = true + +} + resource "aws_autoscaling_group" "talosmaster-static" { name = "talosmaster-static" max_size = 20 @@ -146,6 +156,7 @@ resource "aws_autoscaling_group" "talosmaster-static" { force_delete = true placement_group = aws_placement_group.talosplacemnentgroup.id launch_configuration = aws_launch_configuration.talosmaster.name + load_balancers = aws_lb.talosapi.arn timeouts { From ed40d88a0edf5a4cfaaaa4100f1e89a4b1097c07 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 3 May 2024 00:32:22 +0530 Subject: [PATCH 101/107] Add lb for talos --- aws/talos/main.tf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 269e464..700655e 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -136,6 +136,16 @@ resource "aws_launch_configuration" "talosmaster" { instance_type = var.instance_type } +resource "aws_lb" "talosapi" { + name = "talosapi" + internal = false + load_balancer_type = "network" + subnets = [for subnet in aws_subnet.public : subnet.id] + + enable_deletion_protection = true + +} + resource "aws_autoscaling_group" "talosmaster-static" { name = "talosmaster-static" max_size = 20 @@ -146,6 +156,7 @@ resource "aws_autoscaling_group" "talosmaster-static" { force_delete = true placement_group = aws_placement_group.talosplacemnentgroup.id launch_configuration = aws_launch_configuration.talosmaster.name + load_balancers = aws_lb.talosapi.arn timeouts { From bc46bcf50aaed8ad681cf27b8840adffe9bbc80b Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 3 May 2024 21:31:52 +0530 Subject: [PATCH 102/107] Fix lb for talos api --- aws/talos/main.tf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 700655e..6d29926 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -255,6 +255,15 @@ resource "aws_lb_target_group" "talos-tg" { } +resource "aws_lb_target_group" "talos-api" { + name = "talosapi" + port = 500000 + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + # resource "aws_lb_target_group" "traefik-tg-80" { # name = var.traefik_tg_80_name # port = var.traefikhttpport @@ -282,6 +291,14 @@ resource "aws_lb_target_group_attachment" "registertarget" { } +resource "aws_lb_target_group_attachment" "talosapi" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.talos-tg.arn + target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_master_instance ] + +} # resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { # count = var.workercount From 62ed83adf71b4e4d753cc0e513a0c77466a5eabd Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Fri, 3 May 2024 21:31:52 +0530 Subject: [PATCH 103/107] Fix lb for talos api --- aws/talos/main.tf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/aws/talos/main.tf b/aws/talos/main.tf index 700655e..6d29926 100755 --- a/aws/talos/main.tf +++ b/aws/talos/main.tf @@ -255,6 +255,15 @@ resource "aws_lb_target_group" "talos-tg" { } +resource "aws_lb_target_group" "talos-api" { + name = "talosapi" + port = 500000 + protocol = "TCP" + target_type = "ip" + vpc_id = module.vpc.vpc_id + +} + # resource "aws_lb_target_group" "traefik-tg-80" { # name = var.traefik_tg_80_name # port = var.traefikhttpport @@ -282,6 +291,14 @@ resource "aws_lb_target_group_attachment" "registertarget" { } +resource "aws_lb_target_group_attachment" "talosapi" { + + count = var.mastercount + target_group_arn = aws_lb_target_group.talos-tg.arn + target_id = "${element(split(",", join(",", aws_instance.talos_master_instance.*.private_ip)), count.index)}" + depends_on = [ aws_instance.talos_master_instance ] + +} # resource "aws_lb_target_group_attachment" "registertarget-traefik-80" { # count = var.workercount From 2abb17599c04fb5ba03cbfeb2605b19a71a0e24b Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 9 May 2024 23:15:33 +0530 Subject: [PATCH 104/107] Add jumpsever for aws --- aws/jumpserver/.terraform.lock.hcl | 24 +++++++++ aws/jumpserver/main.tf | 81 ++++++++++++++++++++++++++++++ aws/jumpserver/vars.tf | 15 ++++++ 3 files changed, 120 insertions(+) create mode 100644 aws/jumpserver/.terraform.lock.hcl create mode 100644 aws/jumpserver/main.tf create mode 100644 aws/jumpserver/vars.tf diff --git a/aws/jumpserver/.terraform.lock.hcl b/aws/jumpserver/.terraform.lock.hcl new file mode 100644 index 0000000..a88891d --- /dev/null +++ b/aws/jumpserver/.terraform.lock.hcl @@ -0,0 +1,24 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "5.48.0" + hashes = [ + "h1:sdlIu2yp0/x9nyEgJcKOYDE95hMd6SFvcO8aWzJFAqE=", + "zh:0876d94be46be905d1f6c149461979cd6e9bec80d5ffad43fd6267fe7c3a924d", + "zh:3a853f887e6f61c2ba383c46e71bcec97ecd31d25a78dab08958f43bbbaecb86", + "zh:43235595e26dd131f00704b5b64a65c4e7c4984a559b30d4272170e1b78e99b7", + "zh:6866f7535ec2ef8fe6ed16eecee2e31418a2bd86cec73e1d18e47bd3bb87f68e", + "zh:756a4ed97f30ea6e8871c16446b24ce55601143a715e067b7f9ebdae8349da34", + "zh:793e8414962934be9805186874f207ca1dc8d162b6665e4938893ad827a545c6", + "zh:79b2f886507f21ff1b752ff140ed95ed551f389abf0c8177c7b5f5bbbd95da8e", + "zh:8653b1bc6f7e62404e02f940d962d0c2ba0c4dd4c28bd595945454cf348c2697", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:9bd612f013c075685c129e5d0ec9243572cd51359599b7218459babe0e9b6ac7", + "zh:aabafe758ee8392f56d2c894017203de4dae38c1e3e0d274c54e194b9b8fccff", + "zh:aded7d6034115ca512b79ca17da65ebb8906e3b8def78dcbc0640142b0c05ca0", + "zh:ce383ee19b37666aba60db6b01cbe7a1fcbb40c6dd54d0cb36b2ba114ee5ae62", + "zh:ceaf1b998b9ced4b63f35da386358e4c7ad6def582438987c91bceffefb9e258", + "zh:d79225a9ae6a7391c33aa2d794bf9b167db66398c4f054f94d557615b051a40d", + ] +} diff --git a/aws/jumpserver/main.tf b/aws/jumpserver/main.tf new file mode 100644 index 0000000..c2b3787 --- /dev/null +++ b/aws/jumpserver/main.tf @@ -0,0 +1,81 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + } + } +} +provider "aws" { + region = var.region + access_key = var.AWS_ACCESS_KEY + secret_key = var.AWS_SECRET_KEY +} + +resource "aws_vpc" "jumpservervpc" { + cidr_block = "10.0.0.0/16" +} +# Create a public subnet +resource "aws_subnet" "public_subnet" { + vpc_id = aws_vpc.jumpservervpc.id + cidr_block = "10.0.1.0/24" + map_public_ip_on_launch = true +} + +# Create an internet gateway +resource "aws_internet_gateway" "jumpserver_igw" { + vpc_id = aws_vpc.jumpservervpc.id +} + +resource "aws_route_table" "jumpserverrt" { + vpc_id = aws_vpc.jumpservervpc.id + + route { + cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.jumpserver_igw.id + } + + tags = { + Name = "jumpserverrt" + } +} + +# Associate the route table with the public subnet +resource "aws_route_table_association" "public_subnet_association" { + subnet_id = aws_subnet.public_subnet.id + route_table_id = aws_route_table.jumpserverrt.id +} + +# Create a security group allowing SSH only from your IP +resource "aws_security_group" "ssh_sg" { + vpc_id = aws_vpc.jumpservervpc.id + + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["${var.localserverip}/32"] # Replace your_ip with your actual IP address + } +} + +# Create an EC2 instance +resource "aws_instance" "my_instance" { + ami = "ami-0a283ac1aafe112d5" # Replace with your AMI ID + instance_type = "t2.micro" + subnet_id = aws_subnet.public_subnet.id + key_name = aws_key_pair.jumpserverkey.key_name + security_groups = [aws_security_group.ssh_sg.name] + + tags = { + Name = "talosJumpserver" + } +} + +# Generate SSH key pair +resource "aws_key_pair" "jumpserverkey" { + key_name = "jumpserverkey" + public_key = file("~/.ssh/id_rsa.pub") +} + +output "ssh_key" { + value = aws_key_pair.jumpserverkey.key_name +} \ No newline at end of file diff --git a/aws/jumpserver/vars.tf b/aws/jumpserver/vars.tf new file mode 100644 index 0000000..44c0dac --- /dev/null +++ b/aws/jumpserver/vars.tf @@ -0,0 +1,15 @@ +variable "AWS_ACCESS_KEY" { + description = "AWS Access key" +} + +variable "AWS_SECRET_KEY" { + description = "AWS Secret key" +} + +variable "region" { + description = "AWS Region to deploy the resources" +} + +variable "localserverip" { + description = "AWS Region to deploy the resources" +} \ No newline at end of file From 12a13e6b80a466ee57c179a766075e49a119f2cd Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Thu, 9 May 2024 23:18:03 +0530 Subject: [PATCH 105/107] Add jumpsever for aws From 5c313069b8b85003903f787a8fa87abe9ef0d2e7 Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 13 May 2024 22:30:54 +0530 Subject: [PATCH 106/107] add jumpserver for azure --- azure/jumpserver/.terraform.lock.hcl | 22 ++++++ azure/jumpserver/main.tf | 107 +++++++++++++++++++++++++++ azure/jumpserver/vars.tf | 7 ++ 3 files changed, 136 insertions(+) create mode 100644 azure/jumpserver/.terraform.lock.hcl create mode 100644 azure/jumpserver/main.tf create mode 100644 azure/jumpserver/vars.tf diff --git a/azure/jumpserver/.terraform.lock.hcl b/azure/jumpserver/.terraform.lock.hcl new file mode 100644 index 0000000..0f6fe70 --- /dev/null +++ b/azure/jumpserver/.terraform.lock.hcl @@ -0,0 +1,22 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.103.1" + constraints = ">= 3.2.1" + hashes = [ + "h1:6bkftpJOwSmA74r2ewWu5JrIoSbwzWRAcsv7S/A+6fs=", + "zh:0e78a947c041893a47d2af804f2896d1337cc06230e730e3926db78d416ba883", + "zh:21666ab923f659a2fb7a28eee464249acc8617a21eeb4a805fd1acce5f6c0768", + "zh:357f7daa2f8cc88394d357192f736b21c2626aa99e31bf0dc0dc2fcf6956e555", + "zh:3bfaaa2b1b20841093c44c863bd3cf31068fc6e51b72f85006aa6e656e6555c6", + "zh:624d8eea3587b606209cbae89c51070aa85bf4877ea7d4ffeb4cb5d90d0cd3bb", + "zh:b66a65f0f60e62b9dc911f5376e7801d481810b8c52ae5e36a58730be0779b8a", + "zh:c0362821d82e9a989de4217527f7b9858cd71923508147ae65f47b32ffd85a0e", + "zh:ca8d1fc6e67af8970d3655c8f47bccd4e799b2efb5c7ce402ace7462915f30b3", + "zh:cd9aa496be3900b447a3c3e041e9d25aa6d10a6b0b4d1ebb1385cd6668d35b50", + "zh:d2350210ad53f1dd18ec29b84255aa7b14877e0f1cb5ae77355f9b8ebe2ea209", + "zh:f51cbed8c9b225fb346cc42d884c41bf43bb79c90d753e8cf2770362e4689d79", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} diff --git a/azure/jumpserver/main.tf b/azure/jumpserver/main.tf new file mode 100644 index 0000000..f437607 --- /dev/null +++ b/azure/jumpserver/main.tf @@ -0,0 +1,107 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">=3.2.1" + } + } + +} + +provider "azurerm" { + features {} +} + +# Create a resource group +resource "azurerm_resource_group" "jumpserverrg" { + name = "jumpserverrg" + location = var.region +} + +# Create virtual network +resource "azurerm_virtual_network" "jumpservervnet" { + name = "jumpservervnet" + resource_group_name = azurerm_resource_group.jumpserverrg.name + location = azurerm_resource_group.jumpserverrg.location + address_space = ["10.0.0.0/16"] +} + +# Create subnet +resource "azurerm_subnet" "jumpserversubnet" { + name = "jumpserversubnet" + resource_group_name = azurerm_resource_group.jumpserverrg.name + virtual_network_name = azurerm_virtual_network.jumpservervnet.name + address_prefixes = ["10.0.1.0/24"] +} + +# Create public IP address +resource "azurerm_public_ip" "jumpserverpublicip" { + name = "jumpserverpublicip" + location = azurerm_resource_group.jumpserverrg.location + resource_group_name = azurerm_resource_group.jumpserverrg.name + allocation_method = "Static" +} + +# Create network security group +resource "azurerm_network_security_group" "jumpserversg" { + name = "jumpserversg" + location = azurerm_resource_group.jumpserverrg.location + resource_group_name = azurerm_resource_group.jumpserverrg.name + + security_rule { + name = "SSH" + priority = 1001 + direction = "Inbound" + access = "Allow" + protocol = "Tcp" + source_port_range = "*" + destination_port_range = "22" + source_address_prefix = "${var.localserverip}/32" # Replace with your actual IP + destination_address_prefix = "*" + } +} + +# Create network interface with public IP and attach NSG +resource "azurerm_network_interface" "jumpserver-nic" { + name = "jumpserver-nic" + location = azurerm_resource_group.jumpserverrg.location + resource_group_name = azurerm_resource_group.jumpserverrg.name + + ip_configuration { + name = "internal" + subnet_id = azurerm_subnet.jumpserversubnet.id + private_ip_address_allocation = "Dynamic" + public_ip_address_id = azurerm_public_ip.jumpserverpublicip.id + } + + + #network_security_group_id = azurerm_network_security_group.jumpserversg.id +} + +# Create virtual machine +resource "azurerm_linux_virtual_machine" "jumpserver" { + name = "talos-jumpserver" + location = azurerm_resource_group.jumpserverrg.location + resource_group_name = azurerm_resource_group.jumpserverrg.name + network_interface_ids = [azurerm_network_interface.jumpserver-nic.id] + size = "Standard_DS1_v2" + admin_username = "adminuser" + disable_password_authentication = true + + admin_ssh_key { + username = "adminuser" + public_key = file("~/.ssh/id_rsa.pub") # Path to your SSH public key + } + + os_disk { + caching = "ReadWrite" + storage_account_type = "Premium_LRS" + } + + source_image_reference { + publisher = "Canonical" + offer = "UbuntuServer" + sku = "16.04-LTS" + version = "latest" + } +} diff --git a/azure/jumpserver/vars.tf b/azure/jumpserver/vars.tf new file mode 100644 index 0000000..8c26a70 --- /dev/null +++ b/azure/jumpserver/vars.tf @@ -0,0 +1,7 @@ +variable "region" { + description = "Azure Region to deploy the resources" +} + +variable "localserverip" { + description = "Localip of your laptop to allow ssh" +} \ No newline at end of file From 9796dfaa1d1ff26c5806628a5966d9b20830694d Mon Sep 17 00:00:00 2001 From: vpramod03 <110480433+vpramod03@users.noreply.github.com> Date: Mon, 13 May 2024 22:31:37 +0530 Subject: [PATCH 107/107] add jumpserver for azure --- azure/jumpserver/.terraform.lock.hcl | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 azure/jumpserver/.terraform.lock.hcl diff --git a/azure/jumpserver/.terraform.lock.hcl b/azure/jumpserver/.terraform.lock.hcl deleted file mode 100644 index 0f6fe70..0000000 --- a/azure/jumpserver/.terraform.lock.hcl +++ /dev/null @@ -1,22 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.103.1" - constraints = ">= 3.2.1" - hashes = [ - "h1:6bkftpJOwSmA74r2ewWu5JrIoSbwzWRAcsv7S/A+6fs=", - "zh:0e78a947c041893a47d2af804f2896d1337cc06230e730e3926db78d416ba883", - "zh:21666ab923f659a2fb7a28eee464249acc8617a21eeb4a805fd1acce5f6c0768", - "zh:357f7daa2f8cc88394d357192f736b21c2626aa99e31bf0dc0dc2fcf6956e555", - "zh:3bfaaa2b1b20841093c44c863bd3cf31068fc6e51b72f85006aa6e656e6555c6", - "zh:624d8eea3587b606209cbae89c51070aa85bf4877ea7d4ffeb4cb5d90d0cd3bb", - "zh:b66a65f0f60e62b9dc911f5376e7801d481810b8c52ae5e36a58730be0779b8a", - "zh:c0362821d82e9a989de4217527f7b9858cd71923508147ae65f47b32ffd85a0e", - "zh:ca8d1fc6e67af8970d3655c8f47bccd4e799b2efb5c7ce402ace7462915f30b3", - "zh:cd9aa496be3900b447a3c3e041e9d25aa6d10a6b0b4d1ebb1385cd6668d35b50", - "zh:d2350210ad53f1dd18ec29b84255aa7b14877e0f1cb5ae77355f9b8ebe2ea209", - "zh:f51cbed8c9b225fb346cc42d884c41bf43bb79c90d753e8cf2770362e4689d79", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -}