mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
add kubernetes files
This commit is contained in:
parent
662fb36372
commit
d217c9f1d7
8 changed files with 285 additions and 0 deletions
34
LimeChain/terraform-k8s/.gitignore
vendored
Normal file
34
LimeChain/terraform-k8s/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Local .terraform directories
|
||||
**/.terraform/*
|
||||
|
||||
# .tfstate files
|
||||
*.tfstate
|
||||
*.tfstate.*
|
||||
|
||||
# Crash log files
|
||||
crash.log
|
||||
crash.*.log
|
||||
|
||||
# Exclude all .tfvars files, which are likely to contain sensitive data, such as
|
||||
# password, private keys, and other secrets. These should not be part of version
|
||||
# control as they are data points which are potentially sensitive and subject
|
||||
# to change depending on the environment.
|
||||
*.tfvars
|
||||
*.tfvars.json
|
||||
|
||||
# Ignore override files as they are usually used to override resources locally and so
|
||||
# are not checked in
|
||||
override.tf
|
||||
override.tf.json
|
||||
*_override.tf
|
||||
*_override.tf.json
|
||||
|
||||
# Include override files you do wish to add to version control using negated pattern
|
||||
# !example_override.tf
|
||||
|
||||
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
|
||||
# example: *tfplan*
|
||||
|
||||
# Ignore CLI configuration files
|
||||
.terraformrc
|
||||
terraform.rc
|
||||
13
LimeChain/terraform-k8s/README.md
Normal file
13
LimeChain/terraform-k8s/README.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
This is terraform code that will create a kubernetes cluster create deployment there. Please perform the following steps.
|
||||
|
||||
1. Install latest `aws cli`
|
||||
2. Export credential
|
||||
|
||||
```
|
||||
export AWS_ACCESS_KEY_ID=<>
|
||||
export AWS_SECRET_ACCESS_KEY=<>
|
||||
export AWS_SESSION_TOKEN=<>
|
||||
```
|
||||
|
||||
3. Run `terraform init`, `terrafrom apply`
|
||||
4. Set up kubernetes credentials via `aws eks --region $(terraform output -raw region) update-kubeconfig --name $(terraform output -raw cluster_name)`
|
||||
67
LimeChain/terraform-k8s/kubernetes-task.tf
Normal file
67
LimeChain/terraform-k8s/kubernetes-task.tf
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
provider "kubernetes" {
|
||||
host = module.eks.cluster_endpoint
|
||||
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
|
||||
exec {
|
||||
api_version = "client.authentication.k8s.io/v1beta1"
|
||||
args = ["eks", "get-token", "--cluster-name", local.cluster_name]
|
||||
command = "aws"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
resource "kubernetes_deployment" "ethereum-node" {
|
||||
metadata {
|
||||
name = "ethereum-node"
|
||||
labels = {
|
||||
app = "eth-dev"
|
||||
}
|
||||
}
|
||||
|
||||
spec {
|
||||
replicas = 1
|
||||
|
||||
selector {
|
||||
match_labels = {
|
||||
app = "eth-dev"
|
||||
}
|
||||
}
|
||||
|
||||
template {
|
||||
metadata {
|
||||
labels = {
|
||||
app = "eth-dev"
|
||||
}
|
||||
}
|
||||
|
||||
spec {
|
||||
container {
|
||||
image = "vatman/client-go-hardhat:latest"
|
||||
name = "ethereum-node"
|
||||
args = ["--dev", "--http", "--http.api", "eth,web3,net", "--http.corsdomain", "http://remix.ethereum.org"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
resource "kubernetes_service" "example" {
|
||||
metadata {
|
||||
name = "ethereum-node-service"
|
||||
}
|
||||
spec {
|
||||
selector = {
|
||||
app = "eth-dev"
|
||||
}
|
||||
|
||||
port {
|
||||
port = 8545
|
||||
target_port = 8545
|
||||
}
|
||||
|
||||
type = "ClusterIP"
|
||||
}
|
||||
}
|
||||
113
LimeChain/terraform-k8s/main.tf
Normal file
113
LimeChain/terraform-k8s/main.tf
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
provider "aws" {
|
||||
region = var.region
|
||||
}
|
||||
|
||||
data "aws_availability_zones" "available" {
|
||||
filter {
|
||||
name = "opt-in-status"
|
||||
values = ["opt-in-not-required"]
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
cluster_name = "education-eks-${random_string.suffix.result}"
|
||||
}
|
||||
|
||||
resource "random_string" "suffix" {
|
||||
length = 8
|
||||
special = false
|
||||
}
|
||||
|
||||
module "vpc" {
|
||||
source = "terraform-aws-modules/vpc/aws"
|
||||
version = "5.1.2"
|
||||
|
||||
name = "education-vpc"
|
||||
|
||||
cidr = "10.0.0.0/16"
|
||||
azs = slice(data.aws_availability_zones.available.names, 0, 3)
|
||||
|
||||
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
|
||||
public_subnets = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"]
|
||||
|
||||
enable_nat_gateway = true
|
||||
single_nat_gateway = true
|
||||
enable_dns_hostnames = true
|
||||
|
||||
public_subnet_tags = {
|
||||
"kubernetes.io/cluster/${local.cluster_name}" = "shared"
|
||||
"kubernetes.io/role/elb" = 1
|
||||
}
|
||||
|
||||
private_subnet_tags = {
|
||||
"kubernetes.io/cluster/${local.cluster_name}" = "shared"
|
||||
"kubernetes.io/role/internal-elb" = 1
|
||||
}
|
||||
}
|
||||
|
||||
module "eks" {
|
||||
source = "terraform-aws-modules/eks/aws"
|
||||
version = "19.19.0"
|
||||
|
||||
cluster_name = local.cluster_name
|
||||
cluster_version = "1.27"
|
||||
|
||||
vpc_id = module.vpc.vpc_id
|
||||
subnet_ids = module.vpc.private_subnets
|
||||
cluster_endpoint_public_access = true
|
||||
|
||||
eks_managed_node_group_defaults = {
|
||||
ami_type = "AL2_x86_64"
|
||||
|
||||
}
|
||||
|
||||
eks_managed_node_groups = {
|
||||
one = {
|
||||
name = "node-group-1"
|
||||
|
||||
instance_types = ["t3.small"]
|
||||
|
||||
min_size = 1
|
||||
max_size = 3
|
||||
desired_size = 2
|
||||
}
|
||||
|
||||
two = {
|
||||
name = "node-group-2"
|
||||
|
||||
instance_types = ["t3.small"]
|
||||
|
||||
min_size = 1
|
||||
max_size = 2
|
||||
desired_size = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# https://aws.amazon.com/blogs/containers/amazon-ebs-csi-driver-is-now-generally-available-in-amazon-eks-add-ons/
|
||||
data "aws_iam_policy" "ebs_csi_policy" {
|
||||
arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
|
||||
}
|
||||
|
||||
module "irsa-ebs-csi" {
|
||||
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc"
|
||||
version = "5.30.1"
|
||||
|
||||
create_role = true
|
||||
role_name = "AmazonEKSTFEBSCSIRole-${module.eks.cluster_name}"
|
||||
provider_url = module.eks.oidc_provider
|
||||
role_policy_arns = [data.aws_iam_policy.ebs_csi_policy.arn]
|
||||
oidc_fully_qualified_subjects = ["system:serviceaccount:kube-system:ebs-csi-controller-sa"]
|
||||
}
|
||||
|
||||
resource "aws_eks_addon" "ebs-csi" {
|
||||
cluster_name = module.eks.cluster_name
|
||||
addon_name = "aws-ebs-csi-driver"
|
||||
addon_version = "v1.20.0-eksbuild.1"
|
||||
service_account_role_arn = module.irsa-ebs-csi.iam_role_arn
|
||||
tags = {
|
||||
"eks_addon" = "ebs-csi"
|
||||
"terraform" = "true"
|
||||
}
|
||||
}
|
||||
22
LimeChain/terraform-k8s/outputs.tf
Normal file
22
LimeChain/terraform-k8s/outputs.tf
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Copyright (c) HashiCorp, Inc.
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
output "cluster_endpoint" {
|
||||
description = "Endpoint for EKS control plane"
|
||||
value = module.eks.cluster_endpoint
|
||||
}
|
||||
|
||||
output "cluster_security_group_id" {
|
||||
description = "Security group ids attached to the cluster control plane"
|
||||
value = module.eks.cluster_security_group_id
|
||||
}
|
||||
|
||||
output "region" {
|
||||
description = "AWS region"
|
||||
value = var.region
|
||||
}
|
||||
|
||||
output "cluster_name" {
|
||||
description = "Kubernetes Cluster Name"
|
||||
value = module.eks.cluster_name
|
||||
}
|
||||
31
LimeChain/terraform-k8s/terraform.tf
Normal file
31
LimeChain/terraform-k8s/terraform.tf
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
terraform {
|
||||
|
||||
required_providers {
|
||||
kubernetes = {
|
||||
source = "hashicorp/kubernetes"
|
||||
version = ">= 2.0.0"
|
||||
}
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = "~> 5.7.0"
|
||||
}
|
||||
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
version = "~> 3.5.1"
|
||||
}
|
||||
|
||||
tls = {
|
||||
source = "hashicorp/tls"
|
||||
version = "~> 4.0.4"
|
||||
}
|
||||
|
||||
cloudinit = {
|
||||
source = "hashicorp/cloudinit"
|
||||
version = "~> 2.3.2"
|
||||
}
|
||||
}
|
||||
|
||||
required_version = "~> 1.3"
|
||||
}
|
||||
|
||||
5
LimeChain/terraform-k8s/variables.tf
Normal file
5
LimeChain/terraform-k8s/variables.tf
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
variable "region" {
|
||||
description = "AWS region"
|
||||
type = string
|
||||
default = "us-east-2"
|
||||
}
|
||||
Loading…
Reference in a new issue